Unusual Solve[]行为的延迟

3

在一个计算光谱数据中的键长的项目中,我使用Solve[]解决了一个相当简单的方程来求解未知数。当我更改输入时,我开始注意到“异常”的行为。具体来说,当我更改数字并使用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,任何两个数字都可以。就像这个Solve[]块有一个延迟效应一样...我不确定这是我的电脑(MacBook Intel)的怪癖还是Solve本身的问题。告诉我,如果你们在运行这段代码时得到了与我相同的行为,那么你们有什么想法为什么会发生这种情况吗?(我已经尝试重新启动Mathematica并再次运行它,它总是以这种方式运行)。

3
只是确保一下显而易见的事情。在更改 del 的值后,你是否评估了其他赋值以更新它们的值?Mathematica 不会自动为你执行这个操作。 - Sasha
你好PJR,欢迎来到StackOverflow。如果你对这个网站有疑问,请查看此FAQ。请记得为好的答案投票和接受 - Mr.Wizard
2个回答

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]

是的,我其实几分钟前就发现了,当时我正在看它!哎呀,现在感觉有点傻...谢谢Leonid。既然这篇帖子有点无用,那么有没有什么方法可以删除它? - user747538
3
如果你真的想删掉这篇文章,点击问题底部的“标记”一词。选择“其他”,并向管理员解释你想要删除它。请注意,他们可能不会按照你的要求行事。就像之前说的,我的观点是它对其他人有用,Leonid花时间回答了它,所以应该保留。 - Mr.Wizard

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

标签。

Clear["Global`*"]  

在代码之前。然后 del 的更改就没有机会重新定义 B。^_^


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接