Como listar a resposta do parâmetro de ajuste?
Eu quero perguntar como listar o parâmetro de ajuste, usando "Encontrar ajuste"?
Eu tenho dados como,
lists ={{{2, 3}, {4.1, 1.2}, {5.3, 3.1}, {8., 10.5}}, {{2, 1}, {4.1, 0}, {5.4, 2}, {8.3, 6}}, {{1, 8.3}, {3.5, 2}, {5.5, 1.9}, {10, 6.1}}}
A lista que eu quero é
coefficients = {{0.489728, -3.622667, 8.19737}, {0.225141, -1.48628, 2.91705}, {0.290042, -3.39467, 11.1431}}
Mas agora a forma como posso derivar a lista de "coeficientes" seguindo,
ClearAll;
list1 = {{2, 3}, {4.1, 1.2}, {5.3, 3.1}, {8.0, 10.5}};
FindFit[list1, a1*x1^2 + a2*x1 + a3, {a1, a2, a3}, x1]
ans1 = %
ClearAll;
list2 = {{2, 1}, {4.1, 0}, {5.4, 2}, {8.3, 6}};
FindFit[list2, a4*x2^2 + a5*x2 + a6, {a4, a5, a6}, x2]
ans2 = %
ClearAll;
list3 = {{1, 8.3}, {3.5, 2}, {5.5, 1.9}, {10, 6.1}};
FindFit[list3, a7*x3^2 + a8*x3 + a9, {a7, a8, a9}, x3]
ans3 = %
coefficients = {ans1,ans2,ans3}
O código acima estará OK se o número da lista for pequeno (ou seja, desta vez apenas 3 listas), no entanto, se eu tiver mais listas, será problemático. Acho que coeficientes desafiadores como "a1, a2, a3, a4, a5, a6, a7, a8, a9" não são sofisticados. Tentei fazer funcionar, mas não funcionou. Se alguém souber de maneiras mais inteligentes de escrever, por favor, me diga. Além disso, o último código que escrevi inclui caracteres como "a1 ->", dos quais estou lutando para me livrar ...
Respostas
Você pode definir uma função que leva uma lista de entrada de {x,y}pares e retorna três coeficientes (nomeado a, be c)
ClearAll[fitCoefficients]
fitCoefficients[inputdata_] := {a, b, c} /.
FindFit[inputdata, a x^2 + b x + c, {a, b, c}, x]
Você pode Mapfuncionar fitCoefficientsemlists
coefficients = fitCoefficients /@ lists
{{0.489728, -3.62267, 8.19737}, {0.225141, -1.48628, 2.91705}, {0.290042, -3.39467, 11.1431}}
Como alternativa, você pode usar Tablepara iterar sobre os conjuntos de dados em lists:
coefficients = Table[fitCoefficients[lists[[i]]], {i, Length@lists}]
same result