List 极大值:将矩阵方程转换为赋值列表

List 极大值:将矩阵方程转换为赋值列表,list,matrix,maxima,List,Matrix,Maxima,我想计算一个表达式,其中包含一些符号(在矩阵s中给出),其值在矩阵v中给出: s: matrix([a,b,c]); v: matrix([1,2,3]); expr: a*b+c; ev(expr,s=v); /* not working but gives the idea of the purpose */ 如何生成要传递给ev的正确分配列表[a=1,b=2,c=3] 提前感谢。您可以使用列表而不是矩阵,并为其创建适配器 如果需要将矩阵转换为列表 (%i1) m2l(M):=block(

我想计算一个表达式,其中包含一些符号(在矩阵
s
中给出),其值在矩阵
v
中给出:

s: matrix([a,b,c]);
v: matrix([1,2,3]);
expr: a*b+c;
ev(expr,s=v); /* not working but gives the idea of the purpose */
如何生成要传递给ev的正确分配列表
[a=1,b=2,c=3]


提前感谢。

您可以使用列表而不是矩阵,并为其创建适配器

如果需要将矩阵转换为列表

(%i1) m2l(M):=block([L: []], matrixmap(lambda([e], push(e, L)), M), L) $
(%i2) s: matrix([a,b,c]) $
(%i3) m2l(s);
(%o3)                              [c, b, a]
过了很长时间,我已经发布了一个。我建议使用新的解决方案,而不是下面的解决方案

在Maxima邮件列表上,我找到了一种方法来生成分配列表
[a=1,b=2,c=3]
,并将其传递给
ev
,使用一种更通用的方法(该方法允许在两边都未知的情况下解矩阵方程
a=b
——从未用火焰喷射器煮过热狗?)。前提是矩阵可以通过函数转换为列表

m2l(M):= xreduce('append,args(M)) $
要传递给ev的分配列表
[a=1,b=2,c=3]
可通过以下方式获得:

assign_list(s,v):= algsys(xreduce('append, args(s-v)), m2l(s)) $
因此,给定矩阵
s
v
和表达式
expr
expr
可以用

ev(expr,assign_list(s,v));

有一个更简单的解决方案:

m2l(M):= xreduce('append,args(M)) $
massl(A,B):= map("=",m2l(A),m2l(B)) $ /*massl stands for "matrix assignment list"*/

在我们的例子中,
massl(s,v)
根据需要返回赋值列表
[a=1,b=2,c=3]

谢谢,它似乎有效,只是我注意到
m2l
函数以相反的顺序返回元素。在Maxima邮件列表上,我找到了另一种方法将矩阵转换为保持顺序的列表<代码>xreduce('append,args(M))。您可能需要记下并更新您的答案。
m2l(M):= xreduce('append,args(M)) $
massl(A,B):= map("=",m2l(A),m2l(B)) $ /*massl stands for "matrix assignment list"*/