Как применить значения списка к переменным в функции и получить список результатов? - PullRequest
0 голосов
/ 09 февраля 2012

У меня есть 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}]

тогда я бы хотел сравнить подгонянные значения, т.е. fitline (x1, y1), fitline (x2, y2) и т. Д., С исходными z1, z2 и т. Д.

Так как же я могу использовать каждый x в fp[[All, 1]] и каждый y в fp[[All, 2]] для создания нового списка, скажем, fdata, состоящего из {fitline (x1, y1), fitline (x2, y2), ...}?Можно ли это сделать без использования встроенных циклов?

1 Ответ

3 голосов
/ 09 февраля 2012

Предполагая (надеясь), что у вас есть версия 7 Mma, чтобы вы могли использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...