大神求解动力学微分方程,用matlab中ode45编程实现!
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/11/05 22:41:06
大神求解动力学微分方程,用matlab中ode45编程实现!
其中的参数可以随便设置,
其中的参数可以随便设置,
参考代码:
% 参数定义
m1 = 1; m2 = 2; m3 = 3;
k1 = 4; k2 = 5; k3 = 6; k4 = 7;
P0 = 8; w = 9;
% 微分方程
A = [k1+k2 -k1 0; -k2 k2+k3 -k3; 0 -k3 k3+k4];
dx = @(t,x)[x(4:6); (-A*x(1:3)+[P0*sin(w*t);0;0])./[m1;m2;m3]];
% 初始条件(x4~x6 为 x1'~x3')
x0 = zeros(6,1);
% 直接绘图
ode45(dx,[0 5],x0)
lstr = arrayfun(@(i){sprintf('x%i',i)},1:6);
legend(lstr{:})
legend(lstr{:},'Location','S','Orientation','horizontal')
再问: 在微分方程中加入一个阻尼矩阵怎么编程,还有程序里的@是什么意思,主要是matlab都不会。。。。
再答: 程序中的@ 表示匿名函数(anonymous function)。关于匿名函数的更多信息,请自行搜索相关介绍。 要想加入阻尼,除了定义常数C1-C3,另外需要修改一下匿名函数dx: % 参数定义
m1 = 1; m2 = 2; m3 = 3;
k1 = 4; k2 = 5; k3 = 6; k4 = 7;
P0 = 8; w = 9;
C1 = 1; C2 = 2; C3 =3;% 微分方程
A = [k1+k2 -k1 0; -k2 k2+k3 -k3; 0 -k3 k3+k4];
dx = @(t,x)[x(4:6); (-A*x(1:3)-x(4:6)./[C1;C2;C3]+[P0*sin(w*t);0;0])./[m1;m2;m3]];% 初始条件(x4~x6 为 x1'~x3')
x0 = zeros(6,1);% 求解,直接绘图
ode45(dx,[0 5],x0)
lstr = arrayfun(@(i){sprintf('x%i',i)},1:6);
legend(lstr{:})
legend(lstr{:},'Location','S','Orientation','horizontal')
再问: 如果阻尼不是对角阵,怎么编写匿名函数呢?如阻尼矩阵是
再答: 上次写错了,匿名函数 dx = @(t,x)[x(4:6); (-A*x(1:3)-x(4:6)./[C1;C2;C3]+[P0*sin(w*t);0;0])./[m1;m2;m3]];应为 dx = @(t,x)[x(4:6); (-A*x(1:3)-x(4:6).*[C1;C2;C3]+[P0*sin(w*t);0;0])./[m1;m2;m3]];如果C不是对角阵,就改成 dx = @(t,x)[x(4:6); (-A*x(1:3)-C*x(4:6)+[P0*sin(w*t);0;0])./[m1;m2;m3]]; 不举例子了,你自己试试吧。
% 参数定义
m1 = 1; m2 = 2; m3 = 3;
k1 = 4; k2 = 5; k3 = 6; k4 = 7;
P0 = 8; w = 9;
% 微分方程
A = [k1+k2 -k1 0; -k2 k2+k3 -k3; 0 -k3 k3+k4];
dx = @(t,x)[x(4:6); (-A*x(1:3)+[P0*sin(w*t);0;0])./[m1;m2;m3]];
% 初始条件(x4~x6 为 x1'~x3')
x0 = zeros(6,1);
% 直接绘图
ode45(dx,[0 5],x0)
lstr = arrayfun(@(i){sprintf('x%i',i)},1:6);
legend(lstr{:})
legend(lstr{:},'Location','S','Orientation','horizontal')
再问: 在微分方程中加入一个阻尼矩阵怎么编程,还有程序里的@是什么意思,主要是matlab都不会。。。。
再答: 程序中的@ 表示匿名函数(anonymous function)。关于匿名函数的更多信息,请自行搜索相关介绍。 要想加入阻尼,除了定义常数C1-C3,另外需要修改一下匿名函数dx: % 参数定义
m1 = 1; m2 = 2; m3 = 3;
k1 = 4; k2 = 5; k3 = 6; k4 = 7;
P0 = 8; w = 9;
C1 = 1; C2 = 2; C3 =3;% 微分方程
A = [k1+k2 -k1 0; -k2 k2+k3 -k3; 0 -k3 k3+k4];
dx = @(t,x)[x(4:6); (-A*x(1:3)-x(4:6)./[C1;C2;C3]+[P0*sin(w*t);0;0])./[m1;m2;m3]];% 初始条件(x4~x6 为 x1'~x3')
x0 = zeros(6,1);% 求解,直接绘图
ode45(dx,[0 5],x0)
lstr = arrayfun(@(i){sprintf('x%i',i)},1:6);
legend(lstr{:})
legend(lstr{:},'Location','S','Orientation','horizontal')
再问: 如果阻尼不是对角阵,怎么编写匿名函数呢?如阻尼矩阵是
再答: 上次写错了,匿名函数 dx = @(t,x)[x(4:6); (-A*x(1:3)-x(4:6)./[C1;C2;C3]+[P0*sin(w*t);0;0])./[m1;m2;m3]];应为 dx = @(t,x)[x(4:6); (-A*x(1:3)-x(4:6).*[C1;C2;C3]+[P0*sin(w*t);0;0])./[m1;m2;m3]];如果C不是对角阵,就改成 dx = @(t,x)[x(4:6); (-A*x(1:3)-C*x(4:6)+[P0*sin(w*t);0;0])./[m1;m2;m3]]; 不举例子了,你自己试试吧。
大神求解动力学微分方程,用matlab中ode45编程实现!
matlab ode45 求解二阶常微分方程
用matlab的ode45求解如下微分方程的程序
matlab用ode45 解微分方程
求大神支招,我想用ode45来求解一个微分方程的数值解,但是MATLAB老是说有错,怎么办?
matlab里的ode45求解二阶微分方程问题!
matlab数值解法求解二阶微分方程 ODE45函数
matlab 用ode45解决二元微分方程,有两个初始条件
matlab ode45求解微分方程组
matlab ode45求解微分方程 D2y-0.01*Dy.^2+2*y=sin(t),
求大神帮忙用matlab求解微分方程的数值解
我想用matlab中的ode45 求解常微分方程(Dy)^2-3*Dy+2y=1,y(0)=1,Dy(0)=0.