level 1
代码如下
Clear["Global`*"]
gA[x] := Sqrt[h]*Exp[-h*Abs[x]]
s = 1/Sqrt[2]/h
2*Integrate[gA[x]^2, {x, s, Infinity}]
2*Integrate[gA[x]^2, {x, s, Infinity}] /. h -> Range[1, 5]
2*Simplify[Integrate[gA[x]^2, {x, s, Infinity}], h > 0]
2020年07月18日 05点07分
2
level 1
最后一个积分结果是
正确的
(积分结果与参数h无关了)
前一个积分为啥我赋了几个值反而错误了?
2020年07月18日 05点07分
3
level 7
然而分开算又是对的,建议去排查每一次迭代里h和s的值。感觉是在list计算里被之前的结果干扰了。这一串代码应该是没问题的:
gA[x_, h_] := Sqrt[h]*Exp[-h*Abs[x]]
2*Integrate[gA[x,
#]^2, {x, 1/Sqrt[2]/#
, Infinity}] & /@ Range[1, 5]
能保证s和h每次都是一致的。
2020年07月18日 08点07分
4
多谢老哥解答。
2020年07月18日 11点07分
我用你这个双变量函数,写的代码还是存在这个问题,可能是没太理解这个赋值的顺序,按你写的换#号就对了。2*Integrate[gA[x, z]^2, {x, 1/Sqrt[2]/z, Infinity}] /. z -> Range[1, 5]
2020年07月18日 11点07分
大概明白了,我这样赋值可以分别赋到积分号里头去,但对积分区间的赋值,程序只选取了第一个Range的值之后就没改动过了。也是醉了。
2020年07月18日 11点07分
level 7
问题大概出在你给一个表达式中的变量赋值为一个列表,想要计算这个变量分别取列表里每个值对应的结果,但是这就涉及到Listable属性,一般的初等函数是没有问题的,但这里具体到积分上下限就会出问题,楼上提到的Map是一种方法,另一种仍然从替换的角度出发的写法是:
2*Integrate[gA[x]^2, {x, s, Infinity}]/. Evaluate[List /@ Thread[h -> Range[1, 5]]]
(非常难看的写法,但是可以保证替换是按你的想法进行的,看看后面有没有人能改进一下)不明白的话把 /. 后面的拿出来运行一下应该就懂了。
2020年07月18日 15点07分
5
非要用替换的话感觉也还要用上map,thread之类的用法。这里有个尝试: Outer[ReplaceAll[h -> #][2*Integrate[gA[x]^2, {x, s, Infinity}]] &, Range[1, 5]]
2020年07月18日 16点07分