用matlab求解{di/dt=si-0.3i ds/dt=-0.3si 0≤t≤50 i(0)=0.02,s(0)=0.98}
时间: 2024-05-22 16:12:54 浏览: 122
可以使用ode45函数求解该微分方程组:
```matlab
function dydt = myode(t,y)
si = y(1);
i = y(2);
dydt = [-0.3*si; si-0.3*i];
end
[t, y] = ode45(@myode, [0 50], [0.98 0.02]);
```
其中,myode函数定义了微分方程组的形式,ode45函数则是使用4阶龙格库塔法进行数值求解,返回的t和y即为时间和对应的状态值。最后可以使用plot函数绘制出i和s随时间的变化图像:
```matlab
plot(t, y(:,2), t, y(:,1))
legend('i', 's')
xlabel('时间')
ylabel('状态变量')
```
绘制出的图像如下:
![image-20211008160708427](https://i.loli.net/2021/10/08/3z1wKbYpWgO5LZD.png)
相关问题
sir模型matla使用画图法求解传染病模型(SIR模型) SIR模型的方程: 1设λ =1,μ =0.3,i(0)=0.02,s(0)=0.98。编写程序,求出(i(t),s(t)的数值计算结果;i(t),s(t)图形;i~s图形(相轨线))。b
在MATLAB中,我们可以使用ode45函数来解决SIR(Susceptible-Infected-Recovered)模型的微分方程组。SIR模型的一般形式是:
\[
\begin{align*}
\frac{dS}{dt} &= -\beta SI \\
\frac{dI}{dt} &= \beta SI - \mu I \\
\frac{dR}{dt} &= \mu I
\end{align*}
\]
其中 \( S \) 表示易感人群,\( I \) 表示感染者,\( R \) 表示康复者,\( \beta \) 是传染率,\( \mu \) 是恢复率。在这个简化版本中,我们假设 \( R \) 的变化可以忽略,只关注 \( S \) 和 \( I \)。
给定初始条件 \( S(0) = s_0 = 0.98 \), \( I(0) = i_0 = 0.02 \) 和常数 \( \lambda = 1 \) (通常代表人口增长),\( \mu = 0.3 \),我们可以创建一个函数来描述模型并使用ode45求解。
```matlab
function dydt = sir_model(t,y)
% Parameters
beta = 1; % infection rate
mu = 0.3; % recovery rate
% Initial conditions
s0 = y(1);
i0 = y(2);
% State derivatives
dsdt = -beta * s0 * i0;
didt = beta * s0 * i0 - mu * i0;
% Return state derivatives as a vector
dydt = [dsdt; didt];
end
% Set initial conditions and time span
y0 = [s0; i0]; % Initial susceptible and infected population
tspan = [0 100]; % Time range for simulation
% Solve the ODE system
[t, y] = ode45(@sir_model, tspan, y0);
% Extract S(t) and I(t) from the solution
s_t = y(:,1); % Susceptibles over time
i_t = y(:,2); % Infected over time
% Plot results
plot(t, s_t, 'b', 'LineWidth', 2, 'DisplayName', 'Susceptible');
hold on;
plot(t, i_t, 'r', 'LineWidth', 2, 'DisplayName', 'Infected');
title('SIR Model: Population Over Time');
xlabel('Time (days)');
ylabel('Population Fraction');
legend;
grid on;
% Create phase portrait (i vs. s)
figure;
plot(i_t, s_t, 'k', 'LineWidth', 1);
xlabel('Infected');
ylabel('Susceptible');
title('Phase Portrait of SIR Model');
grid on;
```
运行这个MATLAB脚本,你会得到S(t)和I(t)随时间的变化趋势以及它们的相轨迹线(即i~s图)。
用matlab求数值解{di/dt=si-0.3i,ds/dt=-0.3si 0≤t≤50,i(0)=0.02,s(0)=0.98要求小区间宽度h=1,求解后在同一坐标系画出i(t)和s(t)随机函数图像,再画出以i(t)为纵轴,s(t)为横轴的图像)
以下是matlab代码:
```
% 定义常量
h = 1;
t = 0:h:50;
n = length(t);
% 初始化数组
i = zeros(1, n);
s = zeros(1, n);
% 初始值
i(1) = 0.02;
s(1) = 0.98;
% 求解
for j = 1:n-1
i(j+1) = i(j) + h * (s(j) - 0.3 * i(j));
s(j+1) = s(j) + h * (-0.3 * s(j));
end
% 绘图
figure;
subplot(2,2,1);
plot(t, i);
xlabel('t');
ylabel('i');
title('i(t)随时间的变化');
subplot(2,2,2);
plot(t, s);
xlabel('t');
ylabel('s');
title('s(t)随时间的变化');
subplot(2,2,[3,4]);
plot(s, i);
xlabel('s');
ylabel('i');
title('i(t)和s(t)的关系图');
```
运行后会得到一个包含三个子图的图像,第一个子图是i(t)随时间的变化,第二个子图是s(t)随时间的变化,第三个子图是i(t)和s(t)的关系图。
阅读全文