求解matlab中微分方程组

时间:2015-07-08 11:23:51

标签: matlab ode differential-equations

我正在尝试在Matlab中求解微分方程组。

enter image description here

dn/du=(-2*u*n-K*(n*u-(1+g)))/(1+u^2+K*u*(u-(1+g)/n))

dxi/du=(1-u^2)/(1+u^2+K*u*(u-(1+g)/n))

df/du=(2*u+K*u^2*(u-(1+g)/n))/(1+u^2+K*u*(u-(1+g)/n))

K和gamma是常数。我有这样的初始条件:

n(0)=1, xi(0)=0, f(0)=0

首先我尝试使用' dsolve'。

g=0.1;
K=3;

syms n(u) u 
n(u)=dsolve(diff(n,u)== (-2*u*n-K*(n*u-(1+g)))/(1+u^2+K*u*(u-(1+g)/n)),n(0)==1)

syms x(u) u n
x(u)= dsolve(diff(x,u)== (1-u^2)/(1+u^2+K*u*(u-(1+g)/n)),x(0)==0)

syms f(u) u n
f(u)=dsolve(diff(f,u)== (2*u+K*u^2*(u-(1+g)/n))/(1+u^2+K*u*(u-(1+g)/n)),f(0)==0)

从此我得到的是第一个等式没有明确的解,并返回[空sym],如下所示。

  

警告:找不到明确的解决方案。

     

在dsolve(第201行)

     

在无标题(第37行)

     

n(u) =   [空sym]

     

x(u) =    (1089 * atan(33 /(1600 * n ^ 2 - 1089)^(1/2) - (80 * n * u)/(1600 * n ^ 2 - 1089)^(1/2)))/( 160 * n *(1600 * n ^ 2 - 1089)^(1/2)) - (35937 * log(40 * n * u ^ 2 - 33 * u + 10 * n))/(2 *( - 256000) * n ^ 3 + 174240 * n)) - u / 4 +(33 * log(10 * n)*(1600 * n ^ 2 - 1089)^(1/2) - 2178 * atan(33 /(1600 *) n ^ 2 - 1089)^(1/2))+ 8000 * n ^ 2 * atan(33 /(1600 * n ^ 2 - 1089)^(1/2)))/(320 * n *(1600 * n ^ 2 - 1089)^(1/2)) - (25 * n * atan(33 /(1600 * n ^ 2 - 1089)^(1/2) - (80 * n * u)/(1600 * n ^ 2 - 1089)^(1/2)))/(1600 * n ^ 2 - 1089)^(1/2)+(26400 * n ^ 2 * log(40 * n * u ^ 2 - 33 * u + 10 * n))/( - 256000 * n ^ 3 + 174240 * n)

     

f(u) =    (3 * u ^ 2)/ 8 - (33 * u)/(160 * n) - (log(40 * n * u ^ 2 - 33 * u + 10 * n)*(3200000 * n ^ 4 - 3920400 * n ^ 2 + 1185921))/(2 *( - 10240000 * n ^ 4 + 6969600 * n ^ 2))+(log(10 * n)* *(3200000 * n ^ 4 - 3920400 * n ^ 2 + 1185921 ))/(2 *( - 10240000 * n ^ 4 + 6969600 * n ^ 2))+(33 * atan((1089 *(2800 * n ^ 2 - 1089))/((1600 * n ^ 2 - 1089) )^(1/2)*(92400 * n ^ 2 - 35937)))*(2800 * n ^ 2 - 1089))/(6400 * n ^ 2 *(1600 * n ^ 2 - 1089)^(1 / 2)) - (33 * atan((1089 *(2800 * n ^ 2 - 1089))/((1600 * n ^ 2 - 1089)^(1/2)*(92400 * n ^ 2 - 35937) ) - (2640 * n u (2800 * n ^ 2 - 1089))/((1600 * n ^ 2 - 1089)^(1/2)*(92400 * n ^ 2 - 35937 )))*(2800 * n ^ 2 - 1089))/(6400 * n ^ 2 *(1600 * n ^ 2 - 1089)^(1/2))

然后我尝试使用' ode45'。

u=0:0.1:1;
K=3;
g=0.1;
dndu=@(u,n) (-2*u*n-K*(n*u-(1+g)))/(1+u^2+K*u*(u-(1+g)/n));
[u,n]=ode45(dndu, u, 1) % initial n=1

dxidu=@(u,xi) (1-u^2)/(1+u^2+K*u*(u-(1+g)/n));
[u,xi]=ode45(dxidu, u, 0); %initial xi=0

dfdu=@(u,f) (2*u+K*u^2*(u-(1+g)/n))/(1+u^2+K*u*(u-(1+g)/n));
[u,f]=ode45(dfdu, u, 0) %initial f=0

K和g是常数,u得到0到1的值。 当我运行这个时,第一个方程得到解决并得到了u和n的答案但是我得到了第二个方程的误差,矩阵维数必须如下所示:

  你好            0       0.1000       0.2000       0.3000       0.4000       0.5000       0.6000       0.7000       0.8000       0.9000       1.0000

     

n =       1.0000       1.3409       1.6243       1.7746       1.7945       1.7263       1.6119       1.4800       1.3470       1.2208       1.1048

     

使用/
时出错   矩阵维度必须一致。

     

@(u,xi)中的错误(1-u ^ 2)/(1 + u ^ 2 + K u (u-(1 + g)/ n))

     

odearguments中的错误(第87行)
  f0 = feval(ode,t0,y0,args {:}); %ODE15I将args {1}设置为yp0。

     

ode45错误(第113行)
  [neq,tspan,ntspan,next,t0,tfinal,tdir,y0,f0,odeArgs,odeFcn,...

     

ode45method错误(第24行)
  [u,xi] = ode45(dxidu,u,0); %initial xi = 0

任何人都可以帮我解决这类问题吗?提前谢谢!

2 个答案:

答案 0 :(得分:2)

您有一个耦合微分方程系统,您需要将其解析为耦合系统。一个ODE函数用于具有3个分量的向量值函数。

答案 1 :(得分:2)

u1=0:0.01:1;
K=3;
g=0.1;
dydu=@(u,y)[(-2*u*y(1)-K*(y(1)*u-(1+g)))/(1+u^2+K*u*(u-(1+g)/y(1)))
        (1-u^2)/(1+u^2+K*u*(u-(1+g)/y(1)))
        (2*u+K*u^2*(u-(1+g)/y(1)))/(1+u^2+K*u*(u-(1+g)/y(1)))];
[U,Y]=ode45(dydu,u1,[1 0 0]);
n=Y(:,1);
xi=Y(:,2);
f=Y(:,3);