Mathematica可以求解矩阵方程吗?
mathematica吧
全部回复
仅看楼主
level 1
_dino___ 楼主
mathematica软件可以解矩阵方程吗?或者说不符合交换律的方程,方程组中的各个未知数都是矩阵,用solve直接解能得到表达式,但是我不知道它是否已经被交换过了,很多时候两个矩阵是不能交换的,有办法解决这样的问题吗?
另外矩阵没有除法,但我觉得这个可以忽略,把方程里解出来的分母视为乘以这些矩阵的逆即可。同时还有方程中有的是N*1矩阵,有的是N*N,有的是1*N...这个也太复杂了。就先假设所有都是方阵,这个方程能用软件解出来吗?
eqns = {D1 E^(-k z0) == E^(k z0) C2 + E^(-k z0) D2 ,
-E1 k E^(-k z0) D1 == E1 k (E^(k z0) C2 - E^(-k z0) D2) - A ,
E1 (C2 + D2) == U (C3 + D3),
E1 k (C2 - D2) == V p (C3 - D3),
(U (E^(-p d) C3 + E^(p d) D3)) E^(-p d) == E1 E^(k d) C4,
( V p (E^(-p d) C3 - E^(p d) D3)) E^(-p d) == E1 E^(k d) C4
};
Simplify[Solve[eqns, {D1 , C2, D2, C3, D3, C4}]]
2020年03月17日 13点03分 1
吧务
level 10
首先说明矩阵乘法使用 . 运算符也就是Dot函数来实现。
矩阵乘法构成的等式实际上是矩阵元素的代数方程,按这个思路走就是了。
你的方程我没仔细看,不过对于许多矩阵代数方程的求解中,使用SVD分解之类的操作可能是更有利的。
2020年03月19日 06点03分 5
感谢回复,您说的很对,我实际上每一行矩阵方程都是N个的代数方程,因为代数方程很有归类又可以分组,所以就用矩阵表示成了6组。我的N等于100,我解这个方程不可能写600个方程的方程组然后用Solve啊[泪]所以想直接解矩阵方程,就简单多了
2020年03月21日 11点03分
@_dino___ 使用Array来生成矩阵,使用Thread来将等号分配到矩阵内部并压平方程组,就得到了向量方程组。再次执行分配和压平,就得到代数方程组
2020年03月21日 12点03分
level 1
_dino___ 楼主
代码付错了 o(╥﹏╥)o
eqns = { E^(-k z0) D1 == E^(k z0) C2 + E^(-k z0) D2 ,
-E1 k E^(-k z0) D1 == E1 k (E^(k z0) C2 - E^(-k z0) D2) - A ,
E1 (C2 + D2) == U (C3 + D3),
E1 k (C2 - D2) == V p (C3 - D3),
U (E^(p d) C3 + E^(-p d) D3) == E1 E^(k d) C4,
V p (E^(p d) C3 - E^(-p d) D3) == k E1 E^(k d) C4
};
Simplify[Solve[eqns, {D1 , C2, D2, C3, D3, C4}]]
2020年03月21日 11点03分 6
吧务
level 10
给你写个例子
A = Array[a, {3, 3}]
B = Array[b, {3, 3}]
F = Array[f, {3, 3}]
Thread /@ Thread[A.B == F] // Flatten
2020年03月21日 12点03分 7
1