matlab - 使用 MATLAB 绘制由 ODE 系统定义的函数
问题描述
我正在尝试用 MATLAB 解决一阶 ODE 系统,
$$\left\{
\begin{array}{l}
x_{1}^{\prime }=-\frac{1}{t+1}x_{1}+x_{2} \\
x_{2}^{\prime }=-(1+e^{-2t})x_{1}-\frac{1}{t+1}x_{2}+\frac{e^{-3t}}{t+1}x_{3}
\\
x_{3}^{\prime }=-\frac{1}{t+1}x_{3}+x_{4} \\
x_{4}^{\prime }=e^{-3t}\left( t+1\right) x_{1}-\left( 1+e^{-2t}\right) x_{3}-%
\frac{1}{t+1}x_{4}-\frac{1}{t+1}x_{3}^{2}%
\end{array}%
\right. $$
我已经定义了函数:
function dzdt=odefun(t,z)
dzdt=zeros(4,1);
dzdt(1)=-(1/(t+1))*z(1)+z(2);
dzdt(2)=-(1+exp(-2*t))*z(1)-(1/(t+1))*z(2)+(exp(-3*t))/(t+1)*z(3);
dzdt(3)=z(4)-(1/(t+1))*z(3);
dzdt(4)=(exp(-3*t))*(t+1)*z(1)-(1+exp(-2*t))*z(3)-(1/(t+1))*z(4)-(1/(t+1))*z(3)^2;
end
时间间隔为[0,100]
,初始条件为z0 = [0.01 0.01 0.01 0.01]
。
使用ode45
求解器,我使用了以下命令:
>> tspan = [0 100];
>> z0 = [0.01 0.01 0.01 0.01];
>> [t,z] = ode45(@(t,z) odefun(t,z), tspan, z0);
>> plot(t,z(:,1),'r')
我很容易得到z(1)=x_1
.
但我想绘制函数f(t)=(t+1)*x_1(t)
, t\in [0,100]
,x_1=z(1)
系统的第一个未知数在哪里。我怎么能这样做?
解决方案
只需使用每个元素乘法.*
plot((t+1).*z(:,1))
推荐阅读
- c++ - 为什么我们更喜欢向量而不是 C++ 中的数组?因为核心转储?
- php - Laravel 使用 RelationShip 仅获取他们具有特定角色的用户
- ios - 为什么 UITableViewCell 中的目标操作会丢失?
- python - azure 函数和其他脚本的 Python 最佳实践秘诀
- jquery - 如何在Django Ajax表单提交中避免“AttributeError:'ModelFormOptions'对象没有属性'concrete_model'”
- python - 矩阵类方法中的参数错误 - Python
- spring-boot - 从应用程序服务器到 Spring Boot - 如何进行性能调优
- typescript - 如何编写类型安全的联合类型化保存方法
- c# - 如何使用自动映射器将枚举列表映射到字符串列表
- c# - 有没有办法将来自不同表的一些数据连接到 mssql 中的查询中