声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1603|回复: 4

[综合讨论] 又有新问题了,ode45,Input argument "q" is undefined.

[复制链接]
发表于 2009-7-20 21:55 | 显示全部楼层 |阅读模式

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

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

x
在用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=[70 10130 1485];
ic=[0 0];
[T,Q]=ode45(@sigs1,[0:0.005:10],ic);
??? Input argument "q" is undefined.

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

[ 本帖最后由 ChaChing 于 2009-7-20 23:56 编辑 ]
回复
分享到:

使用道具 举报

发表于 2009-7-21 09:28 | 显示全部楼层

回复 楼主 ukman 的帖子

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

评分

1

查看全部评分

 楼主| 发表于 2009-7-21 16:59 | 显示全部楼层

回复 沙发 zhailiangjun 的帖子

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

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

[ 本帖最后由 ChaChing 于 2009-7-21 19:17 编辑 ]
发表于 2009-7-23 08:36 | 显示全部楼层

回复 板凳 ukman 的帖子

不太理解你要做的是什么计算,反正你的程序写的肯定不对,你可以借一本matlab编程的书先看看,把调用ode45时函数怎么写给弄清楚,或者你把你要做的问题发出来,说不定哪位有时间能帮你思考一下程序怎么写。
发表于 2009-7-24 16:07 | 显示全部楼层
q的话,笨方法是用global q.这样是可以的。
另外你可以看下matlab 帮助里,有传递参数的帮助。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-2 11:04 , Processed in 0.176599 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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