matlab怎样求解含参数的微分方程组
发布网友
发布时间:2022-03-25 19:59
我来回答
共2个回答
热心网友
时间:2022-03-25 21:28
ode方程组可以通过matlab的ode系列命令进行求解(ode23,ode45,ode15s,ode113,......),不同的算法代表不同的积分方法,具有不同的精度,适用于不同的场合,具体可参考有关simulink求解器的选择方法,对于本题,若以ode45命令为例进行求解:
①
新建函数文件:f.m
function
dx=f(t,x)
%
x=[
x
]
%
[
y
];
dx=[
7.3*10^5*(x(1)/x(2))-1.88*10^4*(x(1)^2/x(2));
7.3*10^5-1.88*10^4*x(1)+10.69*x(1)*sqrt(2.1*10^6-x(2))
];
保存。
②
在命令行运行以下命令:
[t,x]=ode45(@f,[0
10],[206.5
0.099])
(由于题设未给出,这里假定仿真10s,对应第二项
[0
10],即从0s至10s)
③
绘图:
plot(t,x(:,1))
%绘制x(t)图像
plot(t,x(:,2))
%绘制y(t)图像
补充:1)本题函数的刚性较大,求解时可能出现复数,请校核函数表达式和初值,并选择恰当的积分方法;2)其它ode命令的使用方法类同,具体请参见help
热心网友
时间:2022-03-25 22:46
可以借助于嵌套函数或匿名函数实现附加参数的传递,例如
function
main
y0
=
[1.4;
0.1;
0.1];
A
=
linspace(eps,
10,
20);
Y
=
A
*
NaN;
for
ii
=
length(A)
a
=
A(ii);
y
=
ode45(@eq2,
[0
a],
y0);
Y(ii)
=
y(end,
1);
end
plot(A,
Y)
function
dy=eq2(t,y)
dy
=
y*0;
dy(1)=-(a*y(2))/(4*exp(a*t/4));
dy(2)=-(a/4)*(exp(a*t/4))*(y(1)+0.5)+(a/4)*y(2)-y(3)*((exp(a*t/4))^2);
dy(3)=4*y(2);
end
end
但微分方程组似乎是刚性的,不过换用ode15s、ode23s等适合刚性系统的算法效果也不理想(可以调用ode*函数时不返回参数,观察求解的过程)。