用Mathematica求解矩阵微分方程

用Mathematica求解矩阵微分方程,math,wolfram-mathematica,Math,Wolfram Mathematica,我需要用Mathematica来解这个方程: d/dxv(x)=Av(x) 这里v是列向量{v1(x)、v2(x)、v3(x)、v4(x)}和 A是一个4x4矩阵。 我想求解带有任何初始条件的函数v1、v2、v3、v4。 x的范围是从0到1000 如何使用NDSolve为这类微分方程编写Mathematica代码?试试这样的方法(我家笔记本上没有Mathematica:) ps:你可以用另一种方式重写它,把你的记录替换成一组方程式 {v1'[x]==a11*v1[x]+a12*v2[x]+a13

我需要用Mathematica来解这个方程:

d/dxv(x)=Av(x)

这里v列向量
{v1(x)、v2(x)、v3(x)、v4(x)}
A是一个4x4矩阵。 我想求解带有任何初始条件的函数
v1、v2、v3、v4
。 x的范围是从0到1000

如何使用
NDSolve
为这类微分方程编写Mathematica代码?

试试这样的方法(我家笔记本上没有Mathematica:)

ps:你可以用另一种方式重写它,把你的记录替换成一组方程式
{v1'[x]==a11*v1[x]+a12*v2[x]+a13*v3[x]+a14*v4[x],v2'[x]==a21*v1[x]+a22*v2[x]+a23*v3[x]+a24*v4[x],依此类推。}如果你想要的话。

那么,如果你有一些可怕的矩阵

A =  RandomReal[0.1, {4, 4}]; (* A horrible matrix *)
我们把它变成反对称的(所以解是振荡的)

定义函数的向量及其初始条件

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;
它可以产生如下解决方案


我想用矩阵而不是向量v做同样的事情。只要在不知道该符号表示向量或矩阵的情况下可以正确读取其方程,NDSolve就可以从初始条件推导其特征,但在变量的维数明确的情况下:

M'[t]==a[t]*IdentityMatrix[2]+M[t]
它失败了。 “普通”解决方案是明确定义矩阵,并在作为变量列表给出时将其展平

但是,我忽略了这个问题(以及许多relatex语法问题),只是引入了一个reduntant变量,该变量的唯一作用是标识矩阵,但没有引入列表(矩阵是2d列表,因此Mathematica在相互添加列表时起作用,生成错误):

一些工作证据:

Plot[{Evaluate[w[t] /. sol][[1, 1, 1]], Evaluate[w[t] /. sol][[1, 1, 2]]}, {t, 0, 1}]

也许值得在这里问一个问题:谢谢你,樱桃。但我的母体很可怕。我不能把它的元素a11,a22。。。手工:(.经过一些运算后,我得到了一个矩阵。所以我需要直接使用这个结果。如果只写a而不是元素,它会工作得很好吗?:-s@Mush在我的第一个例子中尝试一下-我明天才接近Mathematica:)如果你有一个矩阵,你不需要重写它的元素-你可以直接访问它们,就像一个[[1]][[2] )谢利:在你的第一个代码块中,你不小心用了
*
而不是
@Simon,这里没关系。{{a,b},{c,d}.{x,y}或{a,b},{c,d}.{x,y}记录是一样的。哇!Thaaaaank很多!很棒:)我可怕的矩阵是x的函数。感谢上帝,你说数字代码保持不变!:P还需要一个建议。你能给我推荐一本关于mathematica的好书吗?@Mush:一本可靠的新书。但是mathematica的文档也非常好,有很多最后,这里有一个网站——一些优秀的Mathematica程序员(包括一些WRI员工)。请参阅@Mush:btw上发布的大列表,如果我的帖子回答了您的问题,请不要忘记按下复选标记按钮接受它。@PlatoManiac:您可能不应该链接到非法书籍副本。请链接到Sal的主页或亚马逊,因为stackexchange会自动关联这些链接。@Simon为道德错误感到抱歉。但我一直都是个盗版的家伙。我的意思是这本书还在
M'[t]==a[t]*IdentityMatrix[2]+M[t]
eqn = {w'[t] == a[t]*identity[t] + w[t], a'[t] == 2, identity'[t] == {{0, 0}, {0, 0}}}
init={ w[0] == {{1, 2}, {2, 1}}, a[0] == 1, identity[0] == {{1, 0}, {0, 1}}}


sol = NDSolve[eqn&&init, {w, a, identity}, {t, 0, 1}]
Plot[{Evaluate[w[t] /. sol][[1, 1, 1]], Evaluate[w[t] /. sol][[1, 1, 2]]}, {t, 0, 1}]