簡體   English   中英

在matlab中求解微分方程組

[英]solve system of differential equation in matlab

我正在嘗試在Matlab中解決微分方程組。

在此處輸入圖片說明

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和伽瑪是常數。 我有這樣的初始條件:

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)

由此我得到第一個方程式沒有明確的解決方案,並返回了一個[empty sym],如下所示。

警告:找不到明確的解決方案。

處於溶解狀態(201行)

在無標題(第37行)中

n(u) = [空符號]

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的答案,但是第二個方程式卻出現了一個誤差,矩陣尺寸必須一致,如下所示。

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

使用/時出錯
矩陣尺寸必須一致。

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

排列錯誤(第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,u,0); %initial xi = 0

誰能幫助我解決這類問題? 提前致謝!

您有一個耦合的微分方程組,需要將其作為一個耦合系統進行求解。 一個ODE函數用於具有3個分量的矢量值函數。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM