【发布时间】:2015-05-23 14:25:18
【问题描述】:
我有 14 个一阶微分方程。
14 个条件,7 个是初始条件,例如 x1(0)=0、x2(0)=5...
7 是终端的x8(10)=25,x9(10)=0....
我想我应该使用bvp4c
我找到了这个答案,但我还有几个问题:how to solve a system of Ordinary Differential Equations (ODE's) in Matlab
我创建了一个 matlab 函数来放入我的系统。
x'=2x
y'=3x+5y
编码如下:
xdot=[2x(1);3x(1)+5x(2)]
就像我在ode45 中所做的那样。
然后我应该对边界条件做同样的事情。但我不知道如何编码它们。
我应该构建一个包含它们的矩阵,但我不知道如何构建它。
我正在尝试使用此参考:http://www.math.tamu.edu/~phoward/m442/matode.pdf 第 12 页,但他做了y2=y' 的事情,我有点迷失在我的案例中。它也没有很好地解释我应该如何放置我拥有的 14 个条件。一条7条,另一条7条?如何告诉程序每个变量引用了哪个值?
提前致谢。
这是实际系统。它有点大,所以我担心我需要数值方法。
f1=(delta1*gn-(beta*phi*x(7)*x(1)+(1-u1))/(x(1)+x(2)+x(3)+x(4))-mu*x(1)+psi*x(4));
f2=((beta*phi*x(7)*x(1)*(1-u1))/(x(1)+x(2)+x(3)+x(4))-d*x(2)-mu*x(2));
f3=(d*x(2)-(r+r0*u2)*x(3)-(alfa+mu)*x(3));
f4=((r+r0*u2)*x(3)-(mu+phi)*x(4));
f5=(delta2*hp-(phi*teta*x(3)*x(5)*(1-u1))/(x(1)+x(2)+x(3)+x(4))-gamma*x(5));
f6=((phi*teta*x(3)*x(5)*(1-u1))/(x(1)+x(2)+x(3)+x(4))-gamma*x(6)-k*x(6));
f7=(k*x(6)-gamma*x(7));
f8=x(8)*(mu - (beta*phi*x(1)*x(7) - u1 + 1)/(x(1) + x(2) + x(3) + x(4))^2 + (beta*phi*x(7))/(x(1) + x(2) + x(3) + x(4))) + x(9)*((beta*phi*x(7)*(u1 - 1))/(x(1) + x(2) + x(3) + x(4)) - (beta*phi*x(1)*x(7)*(u1 - 1))/(x(1) + x(2) + x(3) + x(4))^2) + (teta*x(12)*phi*x(3)*x(5)*(u1 - 1))/(x(1) + x(2) + x(3) + x(4))^2 - (teta*x(13)*phi*x(3)*x(5)*(u1 - 1))/(x(1) + x(2) + x(3) + x(4))^2;
f9=x(9)*(d + mu - (beta*phi*x(1)*x(7)*(u1 - 1))/(x(1) + x(2) + x(3) + x(4))^2) - d*x(10) - A1 - (x(8)*(beta*phi*x(1)*x(7) - u1 + 1))/(x(1) + x(2) + x(3) + x(4))^2 + (teta*x(12)*phi*x(3)*x(5)*(u1 - 1))/(x(1) + x(2) + x(3) + x(4))^2 - (teta*x(13)*phi*x(3)*x(5)*(u1 - 1))/(x(1) + x(2) + x(3) + x(4))^2;
f10= x(10)*(alfa + mu + r + r0*u2) - A2 - x(11)*(r + r0*u2) - x(12)*((teta*phi*x(5)*(u1 - 1))/(x(1) + x(2) + x(3) + x(4)) - (teta*phi*x(3)*x(5)*(u1 - 1))/(x(1) + x(2) + x(3) + x(4))^2) + x(13)*((teta*phi*x(5)*(u1 - 1))/(x(1) + x(2) + x(3) + x(4)) - (teta*phi*x(3)*x(5)*(u1 - 1))/(x(1) + x(2) + x(3) + x(4))^2) - (x(8)*(beta*phi*x(1)*x(7) - u1 + 1))/(x(1) + x(2) + x(3) + x(4))^2 - (beta*x(9)*phi*x(1)*x(7)*(u1 - 1))/(x(1) + x(2) + x(3) + x(4))^2;
f11=x(11)*(mu + phi) - x(8)*(psi + (beta*phi*x(1)*x(7) - u1 + 1)/(x(1) + x(2) + x(3) + x(4))^2) - (beta*x(9)*phi*x(1)*x(7)*(u1 - 1))/(x(1) + x(2) + x(3) + x(4))^2 + (teta*x(12)*phi*x(3)*x(5)*(u1 - 1))/(x(1) + x(2) + x(3) + x(4))^2 - (teta*x(13)*phi*x(3)*x(5)*(u1 - 1))/(x(1) + x(2) + x(3) + x(4))^2;
f12=x(12)*(gamma - (teta*phi*x(3)*(u1 - 1))/(x(1) + x(2) + x(3) + x(4))) + (teta*x(13)*phi*x(3)*(u1 - 1))/(x(1) + x(2) + x(3) + x(4));
f13=x(13)*(gamma + k) - k*x(14);
f14=gamma*x(14) + (beta*x(8)*phi*x(1))/(x(1) + x(2) + x(3) + x(4)) + (beta*x(9)*phi*x(1)*(u1 - 1))/(x(1) + x(2) + x(3) + x(4));
额外的:
u1=max(a1,min(b1,1/(2*B1)*(beta*phi/(x(1)+x(2)+x(3)+x(4))*x(7)*x(1)*(x(9)-x(8))+phi*teta/(x(1)+x(2)+x(3)+x(4))*x(3)*x(5)*(x(13)-x(12)))));
u2=max(a2,min(b2,1/(2*B2)*(r0*x(3)*x(10)-r0*x(3)*x(11))));
【问题讨论】:
-
如果你的系统只是一阶系统,并且你有初始条件并且想要数值解,你可以使用ode45。如果您有边界条件并想要数值解,请使用 bvp4c,因为 ode45 仅适用于初始条件。您可以查看mathworks.com/help/matlab/ref/bvp4c.html 的示例。 dsolve,因为它是象征性的,不关心条件是初始的还是其他的。例如,在下面的解决方案中,将 y(0)==1 更改为 y(1)==1 即可解决。
-
我正在尝试 dsolve,但是当我添加有关 u1 和 u2 的行时出现错误。它说它们需要可转换为浮点数。有点奇怪,不也是象征性的表达吗?
-
我同意se.mathworks.com/help/matlab/ref/bvp4c.html 可能是你最好的,如果 dsolve 可以解析求解一个 14 维系统,其中嵌套了像 max(min()) 这样令人讨厌的非线性系统,我会感到震惊
-
@alexandreiolov 谢谢,我正在尝试 bvp4c atm,我在输入边界条件时遇到了一些问题,但这个视频很有帮助:youtube.com/watch?v=iEep1-WnjlM
标签: matlab ode differential-equations boundary