首页 文章

在matlab中求解微分方程组

提问于
浏览
1

我试图在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行)In Untitled(第37行)n(u)= [empty 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 * nu(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的答案,但我得到第二个方程的误差,矩阵维必须如下所示 .

u = 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错误使用/ Matrix尺寸必须一致 . @(u,xi)(1-u ^ 2)/(1 u ^ 2 Ku(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,... ode45方法中的错误(第24行)[u,xi] = ode45(dxidu,你,0); %initial xi = 0

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

2 回答

  • 2

    你有一个 coupled 微分方程系统,你需要将它解决为耦合系统 . 一个ODE函数用于具有3个分量的向量值函数 .

  • 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);
    

相关问题