didihewo 发表于 2007-6-14 11:17

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

在这里看到过一个例子,是3维2阶动力学微分方程组,其外力是恒定值,如下:
clear all
n=3;
F=;
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=;
B=;
K=;
DL=inline('',...
          't','x','flag','n','M','K','F','B');
options = odeset('RelTol',1e-4,'AbsTol',);
=ode45(DL,,rand(n,1),options,n,M,K,F,B);
plot(t,x(:,1:n))

而我的动力学方程中,外力为时间的函数F=;我直接将此函数矩阵替换原先的F=;结果出错:
??? 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,请教一下我的问题该如何解决呢?谢谢了。

xjzuo 发表于 2007-6-14 15:28

生搬硬套是不行的, 请注意先理解我的帖子-----示例的意义正是希望大家能举一反三.

didihewo 发表于 2007-6-14 18:00

因为我很多函数都没有弄清楚用法,这两天刚学,所以生搬硬套了。呵呵,见笑了

didihewo 发表于 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文件后,运行以下命令:
=ode45('xprim3',,);
plot(t,x);
页: [1]
查看完整版本: 3维2阶动力学微分方程组,输入参数为时间的函数