警告 Mathematica FittedModel:参数函数 (MachinePrecision) 的精度小于 WorkingPrecision (MachinePrecision)

Warning Mathematica FittedModel: The precision of the argument function (MachinePrecision) is less than WorkingPrecision (MachinePrecision)

同学们,

我不明白为什么我在 Mathematica 中收到来自以下代码的警告消息:

data = {{0, 1}, {1, 0.02307044673005989`}, {2, 
0.00784879347316981`}, {3, 0.0061305265946403195`}, {4, 
0.0008550610216054799`}, {5, 0.00010928133254420425`}, {6, 
0.000011431049984759768`}, {7, 1.93788101788827`*^-6}, {8, 
1.6278670621771263`*^-6}, {9, 2.6661469926370584`*^-7}, {10, 
3.443821224260662`*^-8}, {11, 7.413060538191399`*^-9}, {12, 
1.4031525687948224`*^-9}, {13, 5.973790450062338`*^-10}, {14, 
1.7434844383850214`*^-10}, {15, 2.6053424128998922`*^-11}, {16, 
9.887095524831592`*^-12}, {17, 1.2318024865446659`*^-12}, {18, 
2.2125640342387203`*^-13}, {19, 1.3176590670511745`*^-13}, {20, 
2.7354393146500743`*^-14}};

fit = NonlinearModelFit[data, a + b Exp[-x/c], {a, b, c}, x, 
   MaxIterations -> \[Infinity], PrecisionGoal -> MachinePrecision, 
   WorkingPrecision -> MachinePrecision];

fit["BestFitParameters"] (* THE WARNING APPEARS AFTER CALLING THIS FUNCTION *)

警告信息是:

FittedModel: The precision of the argument function (MachinePrecision) is less than WorkingPrecision (MachinePrecision).

提前致谢。

问题是许多数据值很小并且接近机器精度。您可以尝试对数据值的 Log 进行线性拟合。

data2 = {First[#], Log[Last[#]]} & /@ data;
lm = LinearModelFit[data2, x, x]
Show[ListPlot[data2], Plot[lm[x], {x, 0, 20}]]

第一个数据点 {0, 1} 看起来不正确。你确定它是正确的吗?