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 = 10回del = 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并再次运行它,它总是以这种方式运行).
问题是你的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)