如何将列表值应用于函数中的变量并获取结果列表?

时间:2012-02-09 06:45:27

标签: wolfram-mathematica

我有一个3D列表fp = {{x1,y1,z1},{x2,y2,z2},... {x100,y100,z100}},我有一个函数来自Fit

fitline = Fit[fp, {1, x, x^2, y, y^2, x y}, {x, y}]

然后我想比较拟合值,i。即fitline(x1,y1),fitline(x2,y2)等,与原始的z1,z2等等。

那么如何使用fp[[All, 1]]中的每个x和fp[[All, 2]]中的每个y来生成一个新列表,比如由{fitline(x1,y1),fitline(x2,y2)组成的fdata, ...}?没有使用嵌入式循环,有什么可以做的吗?

1 个答案:

答案 0 :(得分:3)

假设(希望)您拥有Mma版本7,以便您可以使用LinearModelFit,它允许提取包含"PredictedResponse"的拟合模型的许多属性。例如,

 ClearAll[x, y, data, pred];
 data = Flatten[Table[{x, y, Sin[x + y]}, {x, 5}, {y, 5}], 1];
 lm = LinearModelFit[data, {x, y}, {x, y}];
 pred = lm["PredictedResponse"];
 Transpose@Flatten[{Transpose@data, {pred}}, 1] // MatrixForm

给出

data with predictions

如果您必须使用Fit,则可以执行以下操作:

 lmf = Fit[data, {1, x, y}, {x, y}];
 fitfunc[x_, y_] := lmf[[1]] + lmf[[2, 1]] x + lmf[[3, 1]] y;
 predz = fitfunc @@@ data[[All, 1 ;; 2]];
 dataAndPredictions = 
 Transpose@Flatten[{Transpose@data, {predz}}, 1] // MatrixForm