不寻常的Solve []行为延迟

PJR*_*PJR 3 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]
Run Code Online (Sandbox Code Playgroud)

执行给出

{{R -> -1.24567}, {R -> 1.24567}}
Run Code Online (Sandbox Code Playgroud)

但是,当我改变del = 0,以del = 10在上面块,我得到当我执行同样的答案!当我第二次执行该块时,我得到了正确的答案:

{{R -> -0.903299}, {R -> 0.903299}}
Run Code Online (Sandbox Code Playgroud)

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

{{R -> -0.903299}, {R -> 0.903299}}
Run Code Online (Sandbox Code Playgroud)

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

{{R -> -1.24567}, {R -> 1.24567}}
Run Code Online (Sandbox Code Playgroud)

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

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

Leo*_*rin 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]
Run Code Online (Sandbox Code Playgroud)

或使用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]
Run Code Online (Sandbox Code Playgroud)

  • @PJR,如果你真的想删除这篇文章,请点击问题底部的"flag"字样.选择"其他"并向主持人解释您要删除此内容.请注意,他们可能不会遵循您的意愿.如前所述,我的观点是,它对其他人有用,Leonid花时间回答它,所以它应该保留下来. (3认同)