|
|
Hallo Martin, Das Ganze ist eine Definitionssache. Geschrieben steht (Mma 4.2): The Weights option allows you to implement weighted least squares by specifying a list of weights, one for each data point; the default Weights -> Automatic implies a weight of unity for each data point. When Weights -> {w_1, w_2, ..., w_N} the parameter estimates are chosen to minimize the weighted sum of squared residuals Sum[w_i (e_i)^2, {i, 1, N]. Also nicht die Gewichte werden quadriert, sondern die Abweichungen von den Messpunkten. Die Gewichte stehen linear drin (soetwas wie eine Massendichte, deswegen heissen die auch Gewichte). Tippt man etwa In[67]:= With[{a = 20., c = 0., g = 1., xL = -2., xR = 2., anZ = 100}, data = ({#, Lorentz[#, a, c, g] + Random[NormalDistribution[0., sigma[Lorentz[#, a, c, g]]]]} & ) /@ Sort[Table[Random[Real, {xL, xR}, 8], {anZ}]]; ListPlot[data]; Table[{j, NonlinearRegress[data, Lorentz[x1, a1, c1, g1], {x1}, {a1, c1, g1}, Weights -> (sigma[#]^j &), RegressionReport -> BestFitParameters]}, {j, -2, 2, 1/2} ] ] dann bekommt man neben dem überzeugend Verrauschung zeigenden (hier unterdrückten) Bildchen das Resultat: Out[67]= {{-2, {BestFitParameters -> {a1 -> 18.4578, c1 -> 0.00484121, g1 -> 0.962976}}}, {-3/2, {BestFitParameters -> {a1 -> 18.882, c1 -> -0.000956114, g1 -> 0.971776}}}, {-1, {BestFitParameters -> {a1 -> 19.2635, c1 -> -0.00574937, g1 -> 0.97938}}}, {-1/2, {BestFitParameters -> {a1 -> 19.6093, c1 -> -0.00975918, g1 -> 0.98604}}}, {0, {BestFitParameters -> {a1 -> 19.9292, c1 -> -0.0131599, g1 -> 0.992069}}}, {1/2, {BestFitParameters -> {a1 -> 20.2349, c1 -> -0.0160729, g1 -> 0.997817}}}, {1, {BestFitParameters -> {a1 -> 20.5375, c1 -> -0.0185851, g1 -> 1.00359}}}, {1/2, {BestFitParameters -> {a1 -> 20.845, c1 -> -0.0207461, g1 -> 1.00958}}}, {2, {BestFitParameters -> {a1 -> 21.1619, c1 -> -0.0225848, g1 -> 1.01589}}}} Also für Gewichte konstant 1 (Weights -> Automatic, j = 0) ist das Ergebnis normalerweise am besten.Wenn die Gewichte 1/sigma[#]^2 (j = -2) sind, dann werden gerade bei den grossen Abweichungen die Gewichte klein, d.h. die Abweichungen um x = 0 werden unwichtiger, der Fit wird am Rand besser. Werden die Gewichte bei den grossen Abweichungen um x = 0 sehr gross genommen (j = 2), dann bemüht er sich übermässig, bei x = c = 0 richtig zu liegen. Man sieht ganz klar die Tendenz. Eure Überlegung wäre korrekt gewesen, wenn NonlinearRegress[] den Ausdruck Sum[(e_i/w_i)^2, {i, 1, N}] minimieren würde. Das macht es aber lt. Beschreibung und lt. numerischem Experiment nicht. Mit den besten Grüssen Udo. Martin Haas wrote: <snip> Unser Problem taucht auch erst auf, wenn man Weights->{Gewichte} bei Nonlinear Regress einschaltet. Etwa wie folgt: Wir generieren einen Lorentz, wie in Deinem Beispiel, nur fitten wir diesmal<snip>
|