我需要在 Mathematica 中求解这个方程:
d/dx v(x) = A . v(x)
这里v是列向量 {v1(x),v2(x),v3(x),v4(x)}
和
A 是一个4 x 4 矩阵。
我想求解具有任何初始条件的函数 v1、v2、v3、v4
。
x 的取值范围为 0 到 1000。
如何使用 NDSolve
为此类微分方程编写 Mathematica 代码?
最佳答案
所以,如果你有一些可怕的矩阵
A = RandomReal[0.1, {4, 4}]; (* A horrible matrix *)
我们将其设为反对称(因此解是振荡的)
A = A - Transpose@A;
定义函数向量及其初始条件
v[x_] := {v1[x], v2[x], v3[x], v4[x]};
init = v[0] == RandomReal[1, 4]
然后 NDSolve
命令看起来像
sol = NDSolve[LogicalExpand[v'[x] == A.v[x] && init],
{v1, v2, v3, v4}, {x, 0, 1000}]
解决方案可以用
Plot[Evaluate[v[x] /. sol], {x, 0, 1000}]
请注意,上述微分方程是线性的、具有常系数的一阶方程,因此可以使用矩阵指数简单地求解。
但是,如果矩阵 A
是 x
的函数,则解析解变得困难,但数值代码保持不变。
例如,尝试:
A = RandomReal[1/10, {4, 4}] - Exp[-RandomReal[1/100, {4, 4}] x^2];
A = A - Transpose@A;
可以生成如下的解决方案
关于math - 用 Mathematica 求解矩阵微分方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8999504/