簡體   English   中英

Matlab微分方程系統

[英]Matlab system of differential equations

我這里有一個我不知道如何解決的小程序,我以前寫過一個代碼,可以為我求解兩個很好的微分方程組。

但是,我現在必須解決一個由三個微分方程組成的系統:

d(alphai)/ dt = ui = k * alphai * f(tethai)

d(泰泰)/ dt = alphai * f(泰泰)-(泰泰-tethaex)

d(tethaex)/ dt = sigma *(總和(1.N)(tethai-tethaex))-phi * tethaex

到目前為止,這是我的代碼,但出現一些錯誤:

%Script for differential derivatives specifcation

   function dy = NRateDE(T,Y,p)
   %Extract parameters from P
   u0 = p(1);
   g = p(2);
   k = p(3);
   a = p(4);
   b = p(5);
   N = p(6);

   %Format output as a column vector
   dy = zeros(3,1);

   %Set differential equations
   dy(1) = (u0*exp(-g*T)) - (k*Y(1)*exp(Y(2)));
   dy(2) = Y(1)*exp(Y(2)) - (Y(2)) - Y(3);
A = Sum(Y,N);
dy(3) = (a .* A) - (b .* Y(3));
end

function A = Sum(Y,N)
    for i=1:N
        A = A + (Y(2) - Y(3));
    end
end

最后是主要功能:

%% Initialize the environment
close all;
clear all;
clc;

%%Define parameters and initial conditions
u0 = 0.12; g = 0; k = 0.09; N = 2; a = 0; b = 0.1; z = 0;A=0; %Parameters
MaxTime = 300;
T = 0:0.01:MaxTime; %integration time
Yinitial = 0; Yminitial = 0; %intial conditions

%%Solve and generate equations
%#Numerical approximation
    for z=1:N
        %Create random numbers to change the value of u0
        a1 = - 0.01;
        b1 = 0.01;
        r = (b1-a1).*rand(1) + a1;
        u0 = u0 +r; %value changes on each iteration
        [T,Y] = ode23s(@NRateDE,[T],[Yminitial Yinitial],[],[u0 g k a b N A]);
    end   
%#Analytical approximation
    tau = 0:0.2:MaxTime;              
    tetha = (u0*exp(-g*tau))/k;
    alpha = u0*exp(-g*tau).*exp(tetha);

在N = 2的情況下,我應該獲得兩組[T,Y]的矩陣,但是我不知道如何糾正代碼。 我對Matlab相當陌生,所以請原諒任何愚蠢的錯誤哈哈。

有任何想法嗎?

提前謝謝你的幫助!

編輯:我已經稍微改變了第一個功能和“ RateDE”不是故意的。 這也是錯誤消息:

試圖訪問Y(3); 索引超出范圍,因為numel(Y)= 2。

NRateDE(第18行)中的錯誤dy(2)= Y(1)* exp(Y(2))-(Y(2))-Y(3);

odgeguments中的錯誤(第88行)f0 = feval(ode,t0,y0,args {:}); %ODE15I將args {1}設置為yp0。

ode15s中的錯誤(第149行)[neq,tspan,ntspan,next,t0,tfinal,tdir,y0,f0,odeArgs,odeFcn,...

RunRateNparticles中的錯誤(第20行)[T,Y] = ode15s(@NRateDE,[T],[Yminitial Yinitial],[],[u0 gkab NA]);


對!

我了解錯誤消息,並通過在Y上添加元素來更正了它們:

[T,Y] = ode23s(@NRateDE,[T],[Yminitial Yinitial Ylinitial],[],[u0 g k a b N A]);

但是,我仍然無法解決第一條消息中給出的三個微分方程組。

這是當前的錯誤消息:

未定義的函數或變量“ A”。

NRateDE中的錯誤(第19行)A = A +(Y(2)-Y(3));

odgeguments中的錯誤(第88行)f0 = feval(ode,t0,y0,args {:}); %ODE15I將args {1}設置為yp0。

ode23s中的錯誤(第120行)[neq,tspan,ntspan,next,t0,tfinal,tdir,y0,f0,odeArgs,odeFcn,...

RunRateNparticles(第20行)中的錯誤[T,Y] = ode23s(@NRateDE,[T],[Yimitial Yiinitial Ylinitial],[],[u0 gkab NA]);

您自己的答案中已經概述了原始問題的解決方案。
Y需要具有3個元素,因此您可以添加另一個初始條件。

新問題是缺少作業。 Sum函數嘗試向A添加一些內容,但該變量尚不存在。 像這樣修復您的功能應該可以:

function A = Sum(Y,N)
    A = 0;
    for i=1:N
        A = A + (Y(2) - Y(3));
    end
end

暫無
暫無

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

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