Я пытаюсь сопоставить данные моделирования с полиномом. К счастью, я знаю точные данные и знаю, что мои значения совсем не плохи! Однако при попытке подогнать данные к полиномиальной функции с помощью mathematica результат совсем не удовлетворяет. (Уменьшенные) данные по сравнению с точными данными:
A = {{1, 4.20109`*^7}, {1.2214`, 5.92216`*^7}, {1.49182`,
9.21732`*^7}, {1.82212`, 1.60874`*^8}, {2.22554`,
3.21498`*^8}, {2.71828`, 7.4201`*^8}, {3.32012`,
2.01259`*^9}, {4.0552`, 6.24526`*^9}, {4.95303`,
2.2347`*^10}, {6.04965`, 9.13043`*^10}, {7.38906`,
4.12888`*^11}, {9.02501`, 2.03485`*^12}, {11.0232`,
1.07487`*^13}, {13.4637`, 5.98665`*^13}, {16.4446`,
3.49113`*^14}, {20.0855`, 1.96163`*^15}, {24.5325`,
1.15952`*^16}, {29.9641`, 8.46196`*^16}, {36.5982`,
5.93001`*^17}, {44.7012`, 2.86328`*^18}, {54.5982`,
1.56988`*^19}, {66.6863`, 8.60926`*^19}, {81.4509`,
4.95028`*^20}, {99.4843`, 2.56403`*^21}, {121.51`,
1.85016`*^22}};
InterFunc = Simplify[InterpolatingPolynomial[A, x]];
poly = Fit[A, {1, x, x^2, x^3, x^4, x^5, x^6, x^7, x^9}, x]
FindFit[A,
a + b*x + c*x^2 + d*x^3 + e*x^4 + l*x^5 + m*x^6 + h*x^7 + o*x^9, {a,
b, c, d, e, l, m, h, o}, x]
func = 10966470 + 12755136*x + 9092592*x^2 + 5269920*x^3 +
2435256*x^4 + 1059120*x^5 + 257880*x^6 + 94272*x^7 + 3504*x^9;
Show[ListLogPlot[A, PlotStyle -> Red],
LogPlot[{poly}, {x, 0, First[Last[A]]}, PlotStyle -> Orange],
LogPlot[{func}, {x, 0, First[Last[A]]}, PlotStyle -> Blue]]
Моя первая идея состояла в том, чтобы использовать команду InterpolatingPolynomial и уменьшить количество данных до 10, чтобы я получил полином 9-го порядка. Он не работает, ни Fit, ни FindFit, хотя «func» показывает, что существует полином, хорошо соответствующий данным. Есть ли другой способ сделать подгонку правильно? Mathematica использует метод наименьших квадратов, есть ли другой метод, который можно использовать?
Еще один более математический вопрос: полином ведет себя хорошо, почему здесь не работает метод наименьшего квадрата?
FindFit
вычисляет свою ошибку в линейном пространстве. Если вам просто нужна хорошая подгонка, вы должны взять журнал данных и подстроиться под нее. Если вы действительно хотите эту полинольную форму, вам нужно будет работать с аргументомNormFunction
дляFindFit
, чтобы указать ему определить ошибку на основе журнала данных. - person agentp   schedule 30.03.2015