声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1653|回复: 3

[编程技巧] 3维2阶动力学微分方程组,输入参数为时间的函数

[复制链接]
发表于 2007-6-14 11:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
在这里看到过一个例子,是3维2阶动力学微分方程组,其外力是恒定值,如下:
clear all
n=3;
F=[25;24;20];
m1=31.2;
m2=31.2;  
m3=31.2;
k1=67.51;
k2=67.51;
k3=67.51;
c1=0.01;
c2=0.01;  
c3=0.01;
M=[m1,0,0;0,m2,0;0,0,m3];
B=[c1+c2,-c2,0;-c2,c2+c3,-c3;0,-c3,c3];
K=[k1+k2,-k2,0;-k2,k2+k3,-k3;0,-k3,k3];
DL=inline('[x(n+1:end,1); inv(M)*(F-B*x(1:n,1)-K*x(1:n,1))]',...
          't','x','flag','n','M','K','F','B');
options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]);
[t,x]=ode45(DL,[0,3],rand(n,1),options,n,M,K,F,B);  
plot(t,x(:,1:n))

而我的动力学方程中,外力为时间的函数F=[10*sin(2*pi*t),0,0];我直接将此函数矩阵替换原先的F=[25;24;20];结果出错:
??? Undefined function or variable 't'.

于是我在前面添加了一句:t=0:0.001:2;,结果又有如下错误:
??? Error using ==> inline/feval
Not enough inputs to inline function.
Error in ==> C:\MATLAB6p5\toolbox\matlab\funfun\private\odearguments.m
On line 104  ==> f0 = feval(ode,t0,y0,args{:});
Error in ==> C:\MATLAB6p5\toolbox\matlab\funfun\ode45.m
On line 155  ==> [neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, args, ...


我刚学matlab,请教一下我的问题该如何解决呢?谢谢了。
回复
分享到:

使用道具 举报

发表于 2007-6-14 15:28 | 显示全部楼层
生搬硬套是不行的, 请注意先理解我的帖子-----示例的意义正是希望大家能举一反三.
 楼主| 发表于 2007-6-14 18:00 | 显示全部楼层
因为我很多函数都没有弄清楚用法,这两天刚学,所以生搬硬套了。呵呵,见笑了
 楼主| 发表于 2007-6-14 18:51 | 显示全部楼层
我先把我的方程降阶,然后再套用另外一个例子,结果可以算了,呵呵。
function xprim=xprim3(t,x)
xprim=[(7e7*sin(20*t)-(x(4)-x(5))*9e9-(x(1)+x(2))*0.5)/8e6;...
        ((x(4)-x(5))*9e9-(x(5)-x(6))*9e9+(x(1)-x(2))*0.5-(x(2)-x(3))*0.5)/4e3;...
        ((x(5)-x(6))*9e9+(x(2)-x(3))*0.5-x(3)*0.5)/27.4;...
        x(1);x(2);x(3)]
保存上面m文件后,运行以下命令:
[t,x]=ode45('xprim3',[0,20],[30;20;10;2;0;0]);
plot(t,x);
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-19 00:34 , Processed in 0.057336 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表