如何在Mathematica中完成拉普拉斯逆变换数值反演并简化结果?
搞定Erfc[s]拉普拉斯逆变换的数值简化!
嘿,我看了你用Stehfest方法写的Mathematica代码,现在输出的是符号表达式没得到数值结果,主要是两个小细节在搞鬼:
首先,Mathematica对大小写特别较真,自然对数函数是大写的Log[],不是小写的log,你代码里全用了小写,导致系统没法把它解析成数值计算函数;其次,你原代码的逆变换公式里漏了除以t(Stehfest方法的核心公式里有Log[2]/t这一项),而且调用时的语法也有小瑕疵。
修正后的完整操作步骤
1. 重新定义正确的Stehfest函数
把小写log改成大写Log,同时用延迟定义:=避免提前计算,确保函数逻辑正确:
csteh[n_, i_] := (-1)^(i + n/2) Sum[k^(n/2)(2k)!/((n/2 - k)! k! (k - 1)! (i - k)! (2k - i)!), {k, Floor[(i + 1)/2], Min[i, n/2]}]; NLInvSteh[F_, s_, t_, n_] := Log[2]/t Sum[csteh[n, i] F /. s -> i Log[2]/t, {i, 1, n}] // N
2. 定义目标函数并调用
用正确的语法定义F[s],然后直接调用逆变换函数:
F[s_] := Erfc[s]; NLInvSteh[F[s], s, 100, 6]
运行这段代码后,你就能直接得到简化后的数值结果了。
3. 直接处理你现有的输出表达式
如果你不想重写代码,也可以把你得到的符号表达式修正后计算数值:把所有log换成Log,再补上除以100的项,最后用N[]触发数值计算:
N[(Erfc[Log[2.]] - 49. Erfc[2. Log[2.]] + 366. Erfc[3. Log[2.]] - 858. Erfc[4. Log[2.]] + 810. Erfc[5. Log[2.]] - 270. Erfc[6. Log[2.]]) Log[2.] / 100]
最终数值结果
修正后运行代码,会得到近似0.0056的数值(具体精确值可以直接运行代码获取)。
内容的提问来源于stack exchange,提问作者Hisay
相关产品推荐
相关产品推荐

