Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 计算线性常微分方程解并给出错误结果的简单脚本_Matlab_Differential Equations - Fatal编程技术网

Matlab 计算线性常微分方程解并给出错误结果的简单脚本

Matlab 计算线性常微分方程解并给出错误结果的简单脚本,matlab,differential-equations,Matlab,Differential Equations,这是一个既涉及编程又涉及数学的问题。所以,我正试图编写一个代码来计算一个线性常微分方程组的通解。数学公式如上图所示: 其中,方程式中出现的希腊符号\PHI是expm(A*t) 问题是我的ODE解决方案图看起来不太好,正如你所看到的: 解决方案是错误的,因为图中显示的曲线不是从初始值开始的,它等于1。但形状与MATLAB ODE解算器给出的图非常相似: 但是,如果我设置t0=0,那么由我的代码和MATLAB解算器给出的绘图就完全相等了。因此,对于t0=0,我的代码没有问题,但是对于任何其他值,

这是一个既涉及编程又涉及数学的问题。所以,我正试图编写一个代码来计算一个线性常微分方程组的通解。数学公式如上图所示:

其中,方程式中出现的希腊符号\PHI是
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