Wolfram mathematica 在Mathematica中,有没有一种方法可以将表达式放入变量中,而不考虑局部变量?

Wolfram mathematica 在Mathematica中,有没有一种方法可以将表达式放入变量中,而不考虑局部变量?,wolfram-mathematica,variable-assignment,differential-equations,Wolfram Mathematica,Variable Assignment,Differential Equations,我用Mathematica中的NDSolve来解一组方程。我正在寻找某种方法将方程组放入变量中,并在NDSolve中引用它,以使代码更易于阅读 以下是我正在做的一个简单版本: In[1]:= equs = {a x + b y == 0, x - y == 1}; In[2]:= f[a_, b_] := Module[{x, y}, {x, y} /. Solve[equs, {x, y}]] 当评估时,它没有给出正确的答案: In[3]:= f[1, 1] Out[3]:= {x$6

我用Mathematica中的NDSolve来解一组方程。我正在寻找某种方法将方程组放入变量中,并在NDSolve中引用它,以使代码更易于阅读

以下是我正在做的一个简单版本:

In[1]:= equs = {a x + b y == 0, x - y == 1};
In[2]:= f[a_, b_] := Module[{x, y}, {x, y} /. Solve[equs, {x, y}]]
当评估时,它没有给出正确的答案:

In[3]:=   f[1, 1]
Out[3]:=  {x$627, y$627}
这是因为x,y,a,b是局部变量,它们的内部名称与x,y,a,b不同。如果我将equs的定义更改为函数,它可以给出正确的结果:

In[4]:= Clear[equs, f]

In[5]:= equs[x_, y_, a_, b_] := {a x + b y == 0, x - y == 1};

In[6]:= f[a_, b_] := 
 Module[{x, y}, {x, y} /. Solve[equs[x, y, a, b], {x, y}]]

In[7]:= f[1, 1]

Out[7]= {{1/2, -(1/2)}}

但我的问题是,在我的实际代码中,EQU中有20多个变量,显式地写出它们会使代码不容易阅读。有什么办法可以解决这个问题吗?

这个变化似乎对我有效:

equs = {a x + b y == 0, x - y == 1};
sols = Block[{x, y}, {x, y} /. (Solve[equs, {x, y}])];
f[a_, b_] := Evaluate[sols];
f[1,1]
我不确定你真正的系统是什么样子的,但也许像这样的系统可以工作。

一种方法是使用。它们受到
保护
,因此使用安全,无需模块等本地化。它们进入速度较慢(例如Esc
$a
Esc),但一旦使用,就相当干净


也许
f[a,b]:={x,y}/。求解[eqs/{\[FormalA]->a,\[FormalB]->b},{x,y}]
给出他期望的结果。