Replace 数学概论:伊瓦尔。。。不是有效的变量

Replace 数学概论:伊瓦尔。。。不是有效的变量,replace,wolfram-mathematica,Replace,Wolfram Mathematica,我在Mathematica中有以下问题: values = {b -> 1, c -> 0}; Solutions := Solve[x^2 + b*x + c == 0, x] x1 := x /. Solutions[[1]]; x2 := x /. Solutions[[2]]; "Solution 1" x1 "Solution 2" x2 "Choose ~preferred~ Solution, which is -1 when using values" If[Modu

我在Mathematica中有以下问题:

values = {b -> 1, c -> 0};
Solutions := Solve[x^2 + b*x + c == 0, x]
x1 := x /. Solutions[[1]];
x2 := x /. Solutions[[2]];
"Solution 1"
x1
"Solution 2"
x2
"Choose ~preferred~ Solution, which is -1 when using values"
If[Module[{list = values}, ReplaceRepeated[x1 == -1, list]], x = x1, x = x2]
"~Preferred~ Solution"
x
当我第一次评估时,一切都正常:

Solution 1
1/2 (-b - Sqrt[b^2 - 4 c])
Solution 2
1/2 (-b + Sqrt[b^2 - 4 c])
Choose ~preferred~ Solution, which is -1 when using values
1/2 (-b - Sqrt[b^2 - 4 c])
但通过第二次评估,出现了几个错误:

Solution 1
General::ivar: 1/2 (-b-Sqrt[b^2-4 c]) is not a valid variable. >>
General::ivar: 1/2 (-b-Sqrt[b^2-4 c]) is not a valid variable. >>
ReplaceAll::reps: {1/2 b (-b-Sqrt[Plus[<<2>>]])+1/4 (-b-Power[<<2>>])^2+c==0} is neither a list of replacement rules nor a valid dispatch table, and so cannot be used for replacing. >>
1/2 (-b - Sqrt[b^2 - 4 c]) /. 
1/2 b (-b - Sqrt[b^2 - 4 c]) + 1/4 (-b - Sqrt[b^2 - 4 c])^2 + c == 0
"Solution 2"
...
解决方案1
常规::ivar:1/2(-b-Sqrt[b^2-4 c])不是有效变量。>>
常规::ivar:1/2(-b-Sqrt[b^2-4 c])不是有效变量。>>
ReplaceAll::reps:{1/2 b(-b-Sqrt[Plus[])+1/4(-b-Power[])^2+c==0}既不是替换规则列表,也不是有效的调度表,因此无法用于替换。>>
1/2(-b-Sqrt[b^2-4 c])/。
1/2b(-b-Sqrt[b^2-4c])+1/4(-b-Sqrt[b^2-4c])^2+c==0
“解决方案2”
...

在我看来,if条件中的replace是全局工作的,尽管它是一个模块环境。有人能帮忙吗?我如何解决这个问题?

第一次评估您的代码

In[1]:= values = {b -> 1, c -> 0};
Solutions := Solve[x^2 + b*x + c == 0, x]
x1 := x /. Solutions[[1]];
x2 := x /. Solutions[[2]];
"Solution 1"
x1
"Solution 2"
x2
"Choose ~preferred~ Solution, which is -1 when using values"
If[Module[{list = values}, ReplaceRepeated[x1 == -1, list]], x = x1, x = x2]
"~Preferred~ Solution"
x

Out[5]= "Solution 1"
Out[6]= 1/2 (-b - Sqrt[b^2 - 4 c])
Out[7]= "Solution 2"
Out[8]= 1/2 (-b + Sqrt[b^2 - 4 c])
Out[9]= "Choose ~preferred~ Solution, which is -1 when using values"
Out[10]= 1/2 (-b - Sqrt[b^2 - 4 c])
Out[11]= "~Preferred~ Solution"
Out[12]= 1/2 (-b - Sqrt[b^2 - 4 c])
一切都很好。现在x的值是多少

In[13]:= x
Out[13]= 1/2 (-b - Sqrt[b^2 - 4 c])
那很好。现在开始第二次评估代码

In[14]:= values = {b -> 1, c -> 0};
Solutions := Solve[x^2 + b*x + c == 0, x]
假设您现在要评估解决方案。这将计算你的平方英寸,但你看,x不再只是一个没有值的符号,它将使用x的值in Out[13],解是

In[15]:= Solutions

During evaluation of In[15]:= Solve::ivar: 1/2 (-b-Sqrt[b^2-4 c]) is not a valid variable. >>

Out[15]= Solve[1/2b(-b-Sqrt[b^2-4c])+1/4(-b-Sqrt[b^2-4c])^2+c==0, 1/2(-b-Sqrt[b^2-4c])]

这就是它失败的原因。您之前为x指定了一个值,您在求解中使用了x和该值。也许您想在评估所有这些之前清除x。

第一次评估代码

In[1]:= values = {b -> 1, c -> 0};
Solutions := Solve[x^2 + b*x + c == 0, x]
x1 := x /. Solutions[[1]];
x2 := x /. Solutions[[2]];
"Solution 1"
x1
"Solution 2"
x2
"Choose ~preferred~ Solution, which is -1 when using values"
If[Module[{list = values}, ReplaceRepeated[x1 == -1, list]], x = x1, x = x2]
"~Preferred~ Solution"
x

Out[5]= "Solution 1"
Out[6]= 1/2 (-b - Sqrt[b^2 - 4 c])
Out[7]= "Solution 2"
Out[8]= 1/2 (-b + Sqrt[b^2 - 4 c])
Out[9]= "Choose ~preferred~ Solution, which is -1 when using values"
Out[10]= 1/2 (-b - Sqrt[b^2 - 4 c])
Out[11]= "~Preferred~ Solution"
Out[12]= 1/2 (-b - Sqrt[b^2 - 4 c])
一切都很好。现在x的值是多少

In[13]:= x
Out[13]= 1/2 (-b - Sqrt[b^2 - 4 c])
那很好。现在开始第二次评估代码

In[14]:= values = {b -> 1, c -> 0};
Solutions := Solve[x^2 + b*x + c == 0, x]
假设您现在要评估解决方案。这将计算你的平方英寸,但你看,x不再只是一个没有值的符号,它将使用x的值in Out[13],解是

In[15]:= Solutions

During evaluation of In[15]:= Solve::ivar: 1/2 (-b-Sqrt[b^2-4 c]) is not a valid variable. >>

Out[15]= Solve[1/2b(-b-Sqrt[b^2-4c])+1/4(-b-Sqrt[b^2-4c])^2+c==0, 1/2(-b-Sqrt[b^2-4c])]
这就是它失败的原因。您之前为x指定了一个值,您在求解中使用了x和该值。也许您想在评估所有这些之前清除x