ode45解振动微分方程
图里是两阶振动微分方程转成到状态空间的方程组,现在方程里的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)
本帖最后由 chybeyond 于 2015-2-1 15:13 编辑
函数调用时候要给参数传值
%定义函数
function y = Add(a, b)
y = a+b;
%调用函数
Add(1, 2)
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=;
u1=s;
u2=gradient(s,tspan);
for i=1:length(tspan)-1
=ode45(@lore,,x0,[],u1(i),u2(i));
end 本帖最后由 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 chybeyond 发表于 2015-2-2 20:54
应该是ode45函数调用lore时参数错误,看你微分方程求解x的个数与ode45中给出初值的个数不相等。未使用 ...
加了下面三条语句就可以运行了,其实我也不懂为什么这样就行了
xx=x0;
x0=x(end,:);
xx=; 个人想法,若不能容易让别人复製LZ的一样报错,或许比较不易得到别人的帮助
或许个人水平及时间比较有限 ChaChing 发表于 2015-2-6 22:38
个人想法,若不能容易让别人复製LZ的一样报错,或许比较不易得到别人的帮助
或许个人水平及时间比较有限
好的,明白了
页:
[1]