ukman 发表于 2009-7-20 21:55

又有新问题了,ode45,Input argument "q" is undefined.

在用ode的时候,目标函数如下:
function dq=sigs1(X,t,q)
%function to calculate time history of response
%m=x(1);k=x(2);c=x(3);
% generate input
y = 0.01*cos(2*pi*t^2+6*t);%dis input;
yy=-0.01*sin(2*pi*t^2+6*t)*(4*pi*t+6);
yyy=-1/100*cos(2*pi*t^2+6*t)*(4*pi*t+6)^2-1/25*sin(2*pi*t^2+6*t)*pi;
%q(1)=displacement;q(2)=velocity
dq=zeros(2,1);
dq(1)=q(2);
dq(2)=(X(2)*1000*(y-q(1))+X(3)*100*(yy-q(2)))/X(1);
调用ode45,
X=;
ic=;
=ode45(@sigs1,,ic);
??? Input argument "q" is undefined.

Error in ==> sigs1 at 12
dq(1)=q(2);
为什么啊,q还要怎么定义?不都是直接这么用的吗?请指教一下。

[ 本帖最后由 ChaChing 于 2009-7-20 23:56 编辑 ]

zhailiangjun 发表于 2009-7-21 09:28

回复 楼主 ukman 的帖子

function dq=sigs1(X,t,q),在定义函数时,需要输入的变量为三个,x,t,q。但是,ic=;
=ode45(@sigs1,,ic);初始值ic只有两个啊,自然是最后一个变量q没有定义了,

ukman 发表于 2009-7-21 16:59

回复 沙发 zhailiangjun 的帖子

哦,是这个意思啊,我一直以为ic定义的只是位移,速度之类的。谢谢啊,赶紧试一下。

你的意思是说要相应地定义X,t,q的初值吗,这里的X是含3个元素的vector,q又有q(1)和q(2),定义成ic=运行之后还说说q没定义啊。

[ 本帖最后由 ChaChing 于 2009-7-21 19:17 编辑 ]

zhailiangjun 发表于 2009-7-23 08:36

回复 板凳 ukman 的帖子

不太理解你要做的是什么计算,反正你的程序写的肯定不对,你可以借一本matlab编程的书先看看,把调用ode45时函数怎么写给弄清楚,或者你把你要做的问题发出来,说不定哪位有时间能帮你思考一下程序怎么写。

tcwave 发表于 2009-7-24 16:07

q的话,笨方法是用global q.这样是可以的。
另外你可以看下matlab 帮助里,有传递参数的帮助。
页: [1]
查看完整版本: 又有新问题了,ode45,Input argument "q" is undefined.