2012-02-09 62 views
0

我有一個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}] 

然後我想比較擬合值,我。即我想如何使用fp[[All, 1]]中的每個x以及fp[[All, 2]]中的每個y來生成一個新的列表(例如,一個x,y2) ,例如由{fitline(x1,y1),fitline(x2,y2),...}組成的fdata?有沒有沒有使用嵌入式循環呢?

+1

你用什麼版本的Mathematica?您是否可以從版本7訪問LinearModelFit? – Szabolcs 2012-02-09 07:20:12

回答

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"]; 
[email protected][{[email protected], {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 = 
[email protected][{[email protected], {predz}}, 1] // MatrixForm 
相關問題