У меня есть небольшая программа, в которой я не знаю, как справиться, я ранее написал код, который бы решил для меня систему двух дифференциальных уравнений, которая отлично работает.Matlab система дифференциальных уравнений
Тем не менее, я теперь должен решить систему трех дифференциальных уравнений:
д (alphai)/дт = Ui = к * alphai * F (tethai)
д (tethai)/дт = alphai * F (tethai) - (tethai - tethaex)
д (tethaex)/дт = сигма * (Сумма (1.N) (tethai - tethaex)) - фи * 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, поэтому, пожалуйста, простите любую глупую ошибку ха-ха ».
Любая идея, подсказка?
Благодарим за помощь!
EDIT: Я немного изменил первую функцию, и «RateDE» не был преднамеренным. Также здесь появляется сообщение об ошибке:
Попытка доступа к Y (3); индекс за пределами границ, потому что numel (Y) = 2.
Ошибка в NRateDE (строка 18) dy (2) = Y (1) * exp (Y (2)) - (Y (2)) - Y (3);
Ошибка в выводах (строка 88) f0 = feval (ode, t0, y0, args {:}); % ODE15I устанавливает args {1} в yp0.
Ошибка в ode15s (строка 149) [NEQ, tspan, ntspan, рядом, 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));
Ошибка в выводах (строка 88) f0 = feval (ode, t0, y0, args {:}); % ODE15I устанавливает args {1} в yp0.
Ошибка в ode23s (строка 120) [NEQ, tspan, ntspan, рядом, t0, tfinal, tdir, у0, f0, odeArgs, odeFcn, ...
Ошибка в RunRateNparticles (строка 20) [T, Y] = ode23s (@NRateDE, [T], [Yminitial Yinitial Ylinitial], [], [u0 gkab NA]);
Это поможет, если вы разместите точное сообщение об ошибке. Я предполагаю, что вы не сделали начальное условие размера 3. – bdecaf
Преднамеренно ли ваша функция называется «RateDE», а в основной программе вы используете дескриптор для «NRateDE»? – scenia
RatDE не был преднамеренным, я скопировал предыдущий код. Также я добавил сообщение об ошибке. Возможно, потому, что проблема слишком жесткая? – KannonX