在 Octave 中使用 ode45 求解 ODE
Solving an ODE using ode45 in Octave
我正在尝试使用 Octave 求解以下 ODE,尤其是函数 ode45。
dx/dt = x(1-x/2), 0<= t <= 10
初始条件 x(0) = 0.5
但是我得到的图表并不是我所期望的。
我认为带有红色叉号的图表表示 x' vs x 而不是 x vs t。
代码如下:
clear all
close all
% Differential Equation: x' = x(1-x/2)
function dx = f(x,t)
dx = x*(1-x./2);
endfunction
% Exacte Solution: 2*e^t/(3+e^t)
function xexac =solexac(t)
xexac = (2*exp(t))./(3+exp(t));
endfunction
x0=0.5; %%Initial condition
T=10; %% maximum time T
t=[0:0.1:T]; %% we choose the times t(k) where is calculated 'y'
sol=ode45(@f,[0,T],x0); %% numerical solution of (E)
tt=sol.x;y=sol.y; %% extraction of the results
clf;hold on ; %% plot the exact and numerical solutionss
plot(tt,y,'xr')
plot(t,solexac(t),'-b')
xlabel('t')
ylabel('x(t)')
title('Chemostat Model')
legend("Numerical Solution","Exacte Solution ")
如果你们中的任何人都可以帮助我处理此代码,我们将非常高兴。
ode45
期望 ODE 函数的参数顺序为 (time, state)
,因此正好相反。你有效地做的是积分 t-t^2/2
,结果函数 0.5+t^2/2-t^3/6
就是你在图中得到的。
我正在尝试使用 Octave 求解以下 ODE,尤其是函数 ode45。
dx/dt = x(1-x/2), 0<= t <= 10
初始条件 x(0) = 0.5
但是我得到的图表并不是我所期望的。
我认为带有红色叉号的图表表示 x' vs x 而不是 x vs t。
代码如下:
clear all
close all
% Differential Equation: x' = x(1-x/2)
function dx = f(x,t)
dx = x*(1-x./2);
endfunction
% Exacte Solution: 2*e^t/(3+e^t)
function xexac =solexac(t)
xexac = (2*exp(t))./(3+exp(t));
endfunction
x0=0.5; %%Initial condition
T=10; %% maximum time T
t=[0:0.1:T]; %% we choose the times t(k) where is calculated 'y'
sol=ode45(@f,[0,T],x0); %% numerical solution of (E)
tt=sol.x;y=sol.y; %% extraction of the results
clf;hold on ; %% plot the exact and numerical solutionss
plot(tt,y,'xr')
plot(t,solexac(t),'-b')
xlabel('t')
ylabel('x(t)')
title('Chemostat Model')
legend("Numerical Solution","Exacte Solution ")
如果你们中的任何人都可以帮助我处理此代码,我们将非常高兴。
ode45
期望 ODE 函数的参数顺序为 (time, state)
,因此正好相反。你有效地做的是积分 t-t^2/2
,结果函数 0.5+t^2/2-t^3/6
就是你在图中得到的。