如何使最大值适用于未定义维度和未定义内容的矩阵?

问题描述 投票:0回答:1

据我所知,最大值只能处理固定维度的矩阵。 我真的不敢相信这一点!我尝试组成一个子矩阵矩阵并反转父矩阵,并且 maxima 始终建议除以子矩阵,就好像它们是标量一样。 看来declare()仅适用于标量类型。 事实真的如此吗? 使用矩阵函数仅适用于维度的整数常量。

J:matrix([Jm, Jms],[Jsm, Js]);
x:matrix([xm], [xs]);
f:matrix([fm],[fs]);
J.x - f=0;
invert(J).f;
maxima
1个回答
0
投票

我发现可以通过将表示子矩阵的变量声明为非标量,然后应用一个函数以考虑非交换乘法的方式来反转

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

© www.soinside.com 2019 - 2024. All rights reserved.