Matlab 计算线性常微分方程解并给出错误结果的简单脚本
这是一个既涉及编程又涉及数学的问题。所以,我正试图编写一个代码来计算一个线性常微分方程组的通解。数学公式如上图所示: 其中,方程式中出现的希腊符号\PHI是Matlab 计算线性常微分方程解并给出错误结果的简单脚本,matlab,differential-equations,Matlab,Differential Equations,这是一个既涉及编程又涉及数学的问题。所以,我正试图编写一个代码来计算一个线性常微分方程组的通解。数学公式如上图所示: 其中,方程式中出现的希腊符号\PHI是expm(A*t) 问题是我的ODE解决方案图看起来不太好,正如你所看到的: 解决方案是错误的,因为图中显示的曲线不是从初始值开始的,它等于1。但形状与MATLAB ODE解算器给出的图非常相似: 但是,如果我设置t0=0,那么由我的代码和MATLAB解算器给出的绘图就完全相等了。因此,对于t0=0,我的代码没有问题,但是对于任何其他值,
expm(A*t)
问题是我的ODE解决方案图看起来不太好,正如你所看到的:
解决方案是错误的,因为图中显示的曲线不是从初始值开始的,它等于1
。但形状与MATLAB ODE解算器给出的图非常相似:
但是,如果我设置
t0=0
,那么由我的代码和MATLAB解算器给出的绘图就完全相等了。因此,对于t0=0,我的代码没有问题,但是对于任何其他值,我的代码都会出错 基本矩阵的通解为
或者更常被视为
但由于初始时间通常被视为零,基本矩阵的逆矩阵通常被忽略,因为它是零处线性常系数问题的恒等式(即,expm(zeros(n))==eye(n)
),并且c向量等价于初始条件向量
将符号声明附近的一些行交换到此
syms t x_0 c_0
hom = expm(A*t) ;
invhom = inv(hom) ;
invhom_0 = subs(invhom,t,sym(t0)) ;
c_0 = invhom_0 * x_0 ;
hom_initialcond = hom * c_0 ;
应提供非零初始时间的正确解。基本矩阵的一般解为
或者更常被视为
但由于初始时间通常被视为零,基本矩阵的逆矩阵通常被忽略,因为它是零处线性常系数问题的恒等式(即,expm(zeros(n))==eye(n)
),并且c向量等价于初始条件向量
将符号声明附近的一些行交换到此
syms t x_0 c_0
hom = expm(A*t) ;
invhom = inv(hom) ;
invhom_0 = subs(invhom,t,sym(t0)) ;
c_0 = invhom_0 * x_0 ;
hom_initialcond = hom * c_0 ;
应为非零初始时间提供正确的解决方案。您忘记在行c\u 0=invhom*x\u 0中的t0处计算invhom
您忘记在行c\u 0=invhom*x\u 0中的t0处计算invhom