声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2659|回复: 6

[编程技巧] ode45解振动微分方程

[复制链接]
发表于 2015-1-30 16:05 | 显示全部楼层 |阅读模式

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

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

x
图里是两阶振动微分方程转成到状态空间的方程组,现在方程里的u1和u2是给定的一组通过adamas仿真出来的路面激励的信号,不能用表达式写出,

是一些离散的数值,这种情况下怎么解方程呢,
我用matlab解的时候,把u1和u2作为参数输入,function dx=lore(t,x,u1,u2)

但是运行时总是提示Error using lore (line 139)   139行就是这个方程组
Not enough input arguments.


Error in odearguments (line 88)
f0 = feval(ode,t0,y0,args{:});   % ODE15I sets args{1} to yp0.


Error in ode45 (line 114)
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...
360截图20150130160213968.jpg
回复
分享到:

使用道具 举报

发表于 2015-2-1 15:11 | 显示全部楼层
本帖最后由 chybeyond 于 2015-2-1 15:13 编辑

函数调用时候要给参数传值
%定义函数
function y = Add(a, b)
y = a+b;
%调用函数
Add(1, 2)
  
 楼主| 发表于 2015-2-2 10:00 | 显示全部楼层
chybeyond 发表于 2015-2-1 15:11
函数调用时候要给参数传值
%定义函数
function y = Add(a, b)

在主程序里我有给参数传值的
w=importdata('C:\1.txt');
a=w(:,2);%加速度
L=6911;
v=zeros(L,1);
s=zeros(L,1);
dt=0.001;
fs=1/dt;
v(1,1)=0+(a(1,1)+a(1+1,1))/(2*fs);
s(1,1)=0+(v(1,1)+v(1+1,1))/(2*fs);
for i=2:L-1
    v(i,1)=v(i-1,1)+(a(i,1)+a(i+1,1))/(2*fs); %复化梯形积分法求速度信号
end

for i=2:L-1
    s(i,1)=s(i-1,1)+(v(i,1)+v(i+1,1))/(2*fs); %复化梯形积分法求位移信号
end

tspan=0.001:0.001:6.911;
x0=[0,0,0,0,0,0,0,0,0,0,0,0];
u1=s;
u2=gradient(s,tspan);
for i=1:length(tspan)-1
[t,x]=ode45(@lore,[tspan(i),tspan(i+1)],x0,[],u1(i),u2(i));
end
发表于 2015-2-2 20:54 | 显示全部楼层
本帖最后由 chybeyond 于 2015-2-2 20:56 编辑
gumengyinyin 发表于 2015-2-2 10:00
在主程序里我有给参数传值的
w=importdata('C:\1.txt');
a=w(:,2);%加速度


应该是ode45函数调用lore时参数错误,看你微分方程求解x的个数与ode45中给出初值的个数不相等。未使用过这个函数,不能帮你太多,可参考下面这个简单的例子:http://wenku.baidu.com/link?url=aGlsHog4jBLsASPbmyOnH0_KoS9fHX76__jekO7ZSIEFabDcw38dizPBEav3J9I6gh0CyCwE7js1vEpcNoyEEXJeBT8En0kYyOs4NXcYqXu
 楼主| 发表于 2015-2-2 22:12 | 显示全部楼层
chybeyond 发表于 2015-2-2 20:54
应该是ode45函数调用lore时参数错误,看你微分方程求解x的个数与ode45中给出初值的个数不相等。未使用 ...

加了下面三条语句就可以运行了,其实我也不懂为什么这样就行了
xx=x0;
x0=x(end,:);
xx=[xx;x0];
发表于 2015-2-6 22:38 | 显示全部楼层
个人想法,若不能容易让别人复製LZ的一样报错,或许比较不易得到别人的帮助
或许个人水平及时间比较有限
 楼主| 发表于 2015-2-7 09:38 | 显示全部楼层
ChaChing 发表于 2015-2-6 22:38
个人想法,若不能容易让别人复製LZ的一样报错,或许比较不易得到别人的帮助
或许个人水平及时间比较有限

好的,明白了
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-4 04:17 , Processed in 0.054921 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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