2016-10-19 35 views
1

欲評價含有一些符號(在基質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

在此先感謝。

回答

1

你可以用它代替矩陣列表和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] 
+0

謝謝,它似乎工作,只有我注意到'm2l'函數以相反的順序返回元素。在Maxima郵件列表中,我找到了另一種方法將矩陣轉換爲保存順序的列表; 'xreduce('追加,ARGS(M))'。你可能想記下並更新你的答案。 – mmj

2

在千里馬郵件列表我找到了一種方法來使用更通用的方法(它允許解決矩陣方程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)) $ 

因此,給定所獲得的矩陣sv和表達exprexpr可以簡單地與

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