不寻常的Solve []行为延迟

时间:2011-05-10 19:19:38

标签: wolfram-mathematica

对于涉及从光谱数据计算键长的项目,我使用Solve[]来解决未知的相当简单的等式。当我改变输入时,我开始注意到“不寻常”的行为。具体来说,当我更改一个数字并解决时,结果就是之前的答案。但是,再次执行代码会给出正确的答案;这就像是一次执行的延迟。 这是一个例子:

B = (11.09 + del)*2.998*10^10;

c = h*1000*n*10^20/(8 \[Pi]^2);

h = 6.62618*10^-34;

n = 6.02204*10^23;

del = 0;

Solve[c/B == 0.97959253 R^2, R]

执行给出

{{R -> -1.24567}, {R -> 1.24567}}

但是,当我在上面的块中将del = 0更改为del = 10时,我执行时会得到相同的答案!当我第二次执行该块时,我得到了正确的答案:

{{R -> -0.903299}, {R -> 0.903299}}

然后,将del = 10更改回del = 0并执行给出:

{{R -> -0.903299}, {R -> 0.903299}}

并且可以想象,第二次执行该块会给出正确的答案

{{R -> -1.24567}, {R -> 1.24567}}

0和10没有什么特别的,任何2个数字都有效。就像这个Solve[]块有延迟效果......

我不确定这是否是我电脑的怪癖(MacBook Intel),或者它是否是Solve固有的东西。告诉我你们是否得到了与运行此代码时相同的行为,如果是这样,你知道为什么会这样吗? (我已经尝试重新启动Mathematica并再次运行它,它总是以这种方式运行)。

2 个答案:

答案 0 :(得分:7)

问题是,您的del定义是在del存在的其他一些定义之后。因此,在执行这些操作时,del仍然具有旧值。您有两种选择:将del作业放在最上面:

del = 0;
B = (11.09 + del)*2.998*10^10;
c = h*1000*n*10^20/(8 Pi^2);
h = 6.62618*10^-34;
n = 6.02204*10^23;
Solve[c/B == 0.97959253 R^2, R]

或使用SetDelayed:=)进行分配:

B := (11.09 + del)*2.998*10^10;
c := h*1000*n*10^20/(8 Pi^2);
h = 6.62618*10^-34;
n = 6.02204*10^23;
del = 0;
Solve[c/B == 0.97959253 R^2, R]

答案 1 :(得分:1)

我认为解决PJR问题最简单的方法就是添加

Clear["Global`*"]  

beofroe代码。然后,del的更改将无法重新定义B。 ^ _ ^