求助,关于ReplaceAll代入自变量的值与直接代入自变量的值的结果
mathematica吧
全部回复
仅看楼主
level 3
代码和运行结果如下:
在吧内尝试着找了一下没有找到相关的帖子,我自己觉得应该是与替换规则的使用或者代码的运算顺序有关系,但是不知道应该去找哪些资料来看,所以如果存在现有的资料的话就拜托大家帮忙指个路了
mKc = 0.493677;
mpi0 = 0.1349768;
f = 0.093;
\[Epsilon] = 0.001;
omega[m_, q_] := Sqrt[m^2 + q^2];
fcut[p_, cut_] := Exp[-(p/cut)^2];
g[s_, cut_] :=
NIntegrate[((4*Pi)/(2*Pi)^3)*((omega[mKc, q] + omega[mpi0, q])/(2*
omega[mKc, q]*omega[mpi0, q]))*
((q^2*
fcut[q, cut])/(s - (omega[mKc, q] + omega[mpi0, q])^2 +
I*\[Epsilon])), {q, 0, 4}, Method -> "LocalAdaptive"];
g[0.5, 1]
g[s, 1] /. {s -> 0.5}
2024年09月18日 08点09分 1
level 3
其实就是一个数值积分,所以不太能理解为什么这两种代入自变量的值的方法会输出不同的结果。希望得到帮助以理解这个问题产生的原因以及如何避免,因为后续工作也许涉及到对积分结果使用FindRoot一类的函数寻找最大值,目前存在的这个问题会导致FindRoot输出的结果是不对的。
2024年09月18日 08点09分 2
level 9
因为g[s, 1]返回的结果就是0., 这个错误不是由 /. {s -> 0.5}引起的, 而是在数值积分NIntegrate不能有任何非数值的符号.
我不知道为什么在这样的情况下为什么NIntegrate不报错而是返回0.
NIntegrate[q*(q - 0.5 s), {q, 0, 4}, Method -> "LocalAdaptive"]
2024年09月18日 08点09分 3
哦哦,非常感谢[玫瑰][玫瑰] 也就是说我用含有这个积分的式子去找最大值和最小值这个操作本身就是不成立的是吧[泪][泪]
2024年09月18日 09点09分
但是我刚想了一下,在我的计算中对于某些s的值代入确实是可以得到g[s,1]/.{s->0.5}的非零值的,这种时候是为什么会有值的呢
2024年09月18日 09点09分
@起个名都这么诶 代入得到非零值的代码贴出来我看看
2024年09月18日 09点09分
@王皮尔磁子 啊啊啊不好意思,刚去看了一眼代码,是我记错了,有非零结果的是另一个函数,其表达式中包含g这个函数。那这样看来g[s, 1]返回的确实就都是0.了。 非常感谢!!!
2024年09月18日 10点09分
level 9
我的想法是, 首先生成离散的数值表data, 再使用Interpolation通过数值表生成插值函数ifun, 最后FindMaximum对插值函数再一个区域内求极值, 比如
data = Flatten[
ParallelTable[{x, y, Sin[x]*Sin[y]}, {x, 0, Pi, 0.01}, {y, 0, Pi,
0.01}], 1];
ifun = Interpolation@data;
FindMaximum[{ifun [x, y], 0 < x < Pi, 0 < y < Pi}, {{x, 1}, {y, 1}}]
2024年09月18日 10点09分 4
太感谢了! 这就去尝试一下![哈哈][哈哈]
2024年09月18日 13点09分
不好意思再打扰一下,我尝试了一下,发现加上?NumberQ之后就能给出正确的结果,但是我不理解为什么就对了,想问一下您了解这个计算逻辑是什么样的吗(新的运算结果图放在了新楼层,与之前的区别就只是加了?NumberQ)
2024年09月22日 07点09分
level 3
我发现在数值积分这个函数里加上?NumberQ就可以让替换和直接代入得到同样的结果,而且在此基础上使用FindRoot 也可以给出正确的结果,但是我不能理解为什么加上?NumberQ之后它不报错而是直接给出了正确的结果
2024年09月22日 07点09分 6
因为NumberQ后, s不是Number, g[s, 1]就不进行计算, 因此没有运行NIntegrat直到当你/.{s->0.5}给s一个数值才开始NIntegrate. 相当于在一开始没有NumberQ的代码中使用Unevaluated[g[s, 1]] /. {s -> 0.5}
2024年09月23日 16点09分
@王皮尔磁子 哦哦,相当于避免了代入非数值变量使得它直接输出0导致没法替换的问题。 理解啦,感谢[爱心][爱心]
2024年09月24日 01点09分
1