欲評價含有一些符號(在基質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 */
如何可以生成正確的轉讓名單[a=1,b=2,c=3]
將傳遞給ev
?
在此先感謝。
欲評價含有一些符號(在基質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 */
如何可以生成正確的轉讓名單[a=1,b=2,c=3]
將傳遞給ev
?
在此先感謝。
你可以用它代替矩陣列表和subst
(%i1) msubst(a, b, c):=block([L: map(lambda([a0, b0], a0=b0), a, b)], subst(L, c)) $
(%i2) s : [a,b,c] $
(%i3) v : [1,2,3] $
(%i4) msubst(s, v, a*b+c);
(%o4) 5
創建一個適配器如果你需要一個矩陣轉換到一個列表
(%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]
在千里馬郵件列表我找到了一種方法來使用更通用的方法(它允許解決矩陣方程A=B
與雙方unknonws - 使用火焰throwe從來沒有煮熟的熱狗生成轉讓名單[a=1,b=2,c=3]
將傳遞到ev
R')。條件是一個矩陣可以被轉換爲一個列表與所述功能
m2l(M):= xreduce('append,args(M)) $
列表[a=1,b=2,c=3]
要傳遞給ev
分配可以通過
assign_list(s,v):= algsys(xreduce('append, args(s-v)), m2l(s)) $
因此,給定所獲得的矩陣s
,v
和表達expr
,expr
可以簡單地與
ev(expr,assign_list(s,v));
謝謝,它似乎工作,只有我注意到'm2l'函數以相反的順序返回元素。在Maxima郵件列表中,我找到了另一種方法將矩陣轉換爲保存順序的列表; 'xreduce('追加,ARGS(M))'。你可能想記下並更新你的答案。 – mmj