##题目1
using TyMath
using TyPlot
function rigid_ode(t, y)
# y[1] = y₁, y[2] = y₂, y[3] = y₃
dydt = [
y[2] * y[3], # y₁' = y₂y₃
-y[1] * y[3], # y₂' = -y₁y₃
0.51 * y[1] * y[2] # y₃' = 0.51y₁y₂
]
return dydt
end
function solve_rigid_body()
tspan = [0 12] # 时间区间 [0, 12]
y0 = [0.0; 1.0; 1.0] # 初始条件 [y₁(0), y₂(0), y₃(0)] = [0, 1, 1]
#调用 ode45 求解
t, y = ode45(rigid_ode, tspan, y0)
#绘制结果
figure(figsize=(8, 5)) # 设置图幅大小
hold("on")
plot(t, y[:, 1], "-o", label=raw"$y_1$") # y₁ 曲线
plot(t, y[:, 2], "-o", label=raw"$y_2$") # y₂ 曲线
plot(t, y[:, 3], "-o", label=raw"$y_3$") # y₃ 曲线
hold("off")
#添加标题、图例和标签
title("刚性体运动方程的数值解")
xlabel("时间")
ylabel("状态变量")
legend(loc="best")
end
solve_rigid_body()
##题目2
using TyMath
using TyPlot
#定义SIR模型的ODE函数
function sirODE(t, p)
β = 0.4
γ = 0.1
N = 10000
dSdt = -β * p[1] * p[2] / N
dIdt = β * p[1] * p[2] / N - γ * p[2]
dRdt = γ * p[2]
return [dSdt, dIdt, dRdt]
end
#设置时间区间与初始条件
tspan = [0, 100]
p0 = [9990.0, 10.0, 0.0]
#调用ode45求解
t, p = ode45(sirODE, tspan, p0)
#绘制结果
plot(t, p)
title("SIR模型传染病传播预测")
xlabel("时间/天")
ylabel("人数/人")
legend(["易感者(S)", "感染者(I)", "康复者 (R)"])
grid(true) # 显示网格
xlim([0,100])
题目1结果:

题目2结果:
