【发布时间】:2013-03-02 02:17:02
【问题描述】:
我正在尝试编写一小段代码来执行错误传播。到目前为止,我可以让 Mathematica 为函数 f(x1,x2,...,xi,...,xn) 中的错误 delta_f 生成公式,错误为 dx1,dx2,...,dxi,.. .dxn:
fError[f_, xi__, dxi__] :=
Sum[(D[f[xi], xi[[i]]]*dxi[[i]])^2, {i, 1, Length[xi]}]^(1/2)
其中 fError 要求输入函数 f 的所有变量都被 {...} 包围。例如,
d[{mv_, Mv_, Av_}] := 10^(1/5 (mv - Mv + 5 - Av))
FullSimplify[fError[d, {mv, Mv, Av}, {dmv, dMv, dAv}]]
返回
2 Sqrt[10^(-(2/5) (Av - mv + Mv)) (dAv^2 + dmv^2 + dMv^2)] Log[10]
我的问题是,我该如何评估这个?理想情况下,我想将 fError 修改为:
fError[f_, xi__, nxi__, dxi__]
其中 nxi 是 xi 的实际值列表(分开,因为将 xi 设置为它们的数值会破坏上面的微分步骤。)这个函数应该找到误差 delta_f 的一般公式然后 如果可能,对它进行数值评估。我认为解决方案应该像 Hold[] 或 With[] 或类似的东西一样简单,但我似乎无法理解。
【问题讨论】:
-
This 可能很有用。
-
@rcollyer 这些似乎都比我需要的高级一点。我真的只是在寻找一种优雅的、单行或两行的解决方案,我可以适应各种计算。我也不必处理相关的错误。不过,我发现,如果我只调用 fError[f,xi,dxi]/.{x1->nx1,...},它就可以工作。这对我的目的来说已经足够了。
标签: wolfram-mathematica uncertainty