gumengyinyin 发表于 2015-1-30 16:05

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:11

本帖最后由 chybeyond 于 2015-2-1 15:13 编辑

函数调用时候要给参数传值
%定义函数
function y = Add(a, b)
y = a+b;
%调用函数
Add(1, 2)

gumengyinyin 发表于 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=;
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: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

gumengyinyin 发表于 2015-2-2 22:12

chybeyond 发表于 2015-2-2 20:54
应该是ode45函数调用lore时参数错误,看你微分方程求解x的个数与ode45中给出初值的个数不相等。未使用 ...

加了下面三条语句就可以运行了,其实我也不懂为什么这样就行了
xx=x0;
x0=x(end,:);
xx=;

ChaChing 发表于 2015-2-6 22:38

个人想法,若不能容易让别人复製LZ的一样报错,或许比较不易得到别人的帮助
或许个人水平及时间比较有限

gumengyinyin 发表于 2015-2-7 09:38

ChaChing 发表于 2015-2-6 22:38
个人想法,若不能容易让别人复製LZ的一样报错,或许比较不易得到别人的帮助
或许个人水平及时间比较有限

好的,明白了
页: [1]
查看完整版本: ode45解振动微分方程