对于涉及从光谱数据计算键长的项目,我使用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并再次运行它,它总是以这种方式运行)。
答案 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
。 ^ _ ^