wxMaxima-对包含特定变量的术语进行求解/重新排列
我想用wxMaxima重新排列一个等式,使某些变量只出现在左侧wxMaxima-对包含特定变量的术语进行求解/重新排列,maxima,simplify,reformat,Maxima,Simplify,Reformat,我想用wxMaxima重新排列一个等式,使某些变量只出现在左侧 %i: eq: term1 = term2 ; %i: fun(eq,[v]); %o: term3 = term4 其中允许的术语符号如下: term1=全部 term2=全部 term3=仅[v]和运算符 term4=除[v]以外的所有 [v] =我希望位于左侧的变量(或列表) 我试图用matchdeclare和defrule完成一些事情,但我甚至无法将a=b+c的b放到左侧。我甚至不确定defrule是否是正确的方法,因
%i: eq: term1 = term2 ;
%i: fun(eq,[v]);
%o: term3 = term4
其中允许的术语符号如下:
- term1=全部
- term2=全部
- term3=仅[v]和运算符
- term4=除[v]以外的所有
- [v] =我希望位于左侧的变量(或列表)
matchdeclare
和defrule
完成一些事情,但我甚至无法将a=b+c
的b
放到左侧。我甚至不确定defrule是否是正确的方法,因为术语1和2与3和4无关。有没有办法解决列表的问题
更新:
我想出了一些“东西”。这还不是我最初想要的,但至少更接近。
这基本上是一种替代。我可以提供一个左手边,函数试图解决它。当然,这个精确的左侧可能不可能,因此一些变量保留在右侧。但可以指定一个应该在右侧消除的变量
expr: a=b+c*d+e $
left: log(a+b) $
notright: b $
solve_form( expr, left, notright);
结果:
[log(b+a)=log(-e-c*d+2*a)]
现在,如果我选择左侧的log(a-b)
,则输出为:
[log(a-b)=log(e+c*d)]
这正是我想要的。变量a
和b
位于左侧,但不在右侧。
但我必须给出一个明确的左侧。我希望有一个函数可以自己找到任意的左边,这样a
和b
都不在右边
显而易见的解决方案是:[a-b=e+c*d]
功能:
solve_form(expr,lterm,substvar) := block(
[z],
lterm: z = lterm,
solve(lterm,substvar),
ev(expr,%%),
solve(%%,z),
ev(%%,lterm)
)$
不需要notright
输入的替代功能
solveform(expr,zz_term) := block(
[z,zz_term_vars,slist],
zz_term: zz = zz_term,
zz_term_vars: listofvars(rhs(zz_term)),
slist:[],
for i:1 thru length(zz_term_vars) do block(
solve(zz_term,zz_term_vars[i]),
ev(expr,%%),
slist: append(slist,solve(%%,zz))
),
listify(setify(ev(slist,zz_term)))
)$
我认为
solve
、linsolve
、algsys
、和exclude
或多或少都有你想要的效果。我不确定这些对更好地解决我的问题有多大帮助。我更新了这个问题,让它更清楚一点。