据我所知,最大值只能处理固定维度的矩阵。 我真的不敢相信这一点!我尝试组成一个子矩阵矩阵并反转父矩阵,并且 maxima 始终建议除以子矩阵,就好像它们是标量一样。 看来declare()仅适用于标量类型。 事实真的如此吗? 使用矩阵函数仅适用于维度的整数常量。
J:matrix([Jm, Jms],[Jsm, Js]);
x:matrix([xm], [xs]);
f:matrix([fm],[fs]);
J.x - f=0;
invert(J).f;
我发现可以通过将表示子矩阵的变量声明为非标量,然后应用一个函数以考虑非交换乘法的方式来反转
J
来获得你想要的结果(invert
没有;这是不足)。
这就是我要做的工作。
declare ([Jm, Jms, Jsm, Js, xm, xs, fm, fs], nonscalar);
matrix_element_mult: ".";
这是问题陈述中的代码,
J:matrix([Jm, Jms],[Jsm, Js]);
x:matrix([xm], [xs]);
f:matrix([fm],[fs]);
J.x - f=0;
此时,我将调用
invert_by_lu
并告诉它在非交换乘法环中工作。
invert_by_lu (J, noncommutingring);
J_inverse: expand (%);
J_inverse.f;
此时,您可以将特定矩阵分配给
Jm, Js, Jsm, Jms
等,并通过J_inverse
或其他方式重新评估ev(J_inverse)
。
请注意,我在拨打
expand
后又拨打了 invert_by_lu
。这是因为 1
的结果中出现了文字 invert_by_lu
,这不太正确;它应该是单位矩阵的某种表示。解决这个问题可能需要一些仔细的思考和一些代码行;这并不是不可能的,但是,我采取了简单的方法,只是打电话给expand
。