Ajuste de parâmetros lineares

simulando dados: função e geração de valores (pseudo)aleatórios

w[θ_,a_]:=a.Table[LegendreP[2i,Cos[θ]],{i,0,Length[a]-1}]

Plot[{w[q,{1,0.5,0.5}],w[q,{1,-0.5,0.5}]},{q,0,Pi},PlotLegends->{"1;0.5;0.5","1;-0.5;0.5"}]

Integrate[w[q,{1,0.5,0.5}]Sin[q],{q,0,Pi}]

Integrate[w[q,{a0,a2,a4,a6,a8}]Sin[q],{q,0,Pi}]

gerando os dados

a0={1,0.6,-0.5}

y0=Table[{q,w[q,a0]},{q,0,Pi,Pi/6}]

exato=Show[ {Plot[w[q,a0],{q,0,Pi},PlotStyle->Green ],ListPlot[y0,PlotStyle->Green ]}]

sy=Round[Table[Sqrt[0.07^2+(0.1Cos[q])^2],{q,0,Pi,Pi/6}],0.01]

Conjunto simulado na forma (θ,y,σ)

ys=Table[{y0[[i,1]],Round[ RandomVariate[NormalDistribution[y0[[i,2]],sy[[i]] ] ] ,0.01],sy[[i]]},{i,Length[y0]}];ys//TableForm

Needs["ErrorBarPlots`"]

graficoDosDados=ErrorListPlot[ys]

Show[exato,graficoDosDados]

TableForm[ys]

aju=LinearModelFit[ys[[All,{1,2}]](*somente as duas primeiras colunas*),{LegendreP[2,Cos[q]],LegendreP[4,Cos[q]]} (*somente as funcoes de q que multiplicam os parametros*),q]

aju["ParameterTable"]

aju=LinearModelFit[ys[[All,{1,2}]],{LegendreP[2,Cos[q]],LegendreP[4,Cos[q]]} ,q,Weights->1/sy^2,VarianceEstimatorFunction->(1&)]

aju["ParameterTable"]

Show[ Plot[aju[q],{q,0,Pi},PlotStyle->Red,PlotRange->{0.4,1.7}],graficoDosDados]

Testes obrigatorios

calcule qui-quadrado

chi2=Total[ (aju["FitResiduals"]/sy)^2 ]

Round[100(1-CDF[ChiSquareDistribution[Length[ys]-Length[a0]],chi2]),0.1](*integral de qui-quadrado para 4 g.l. desde chi2 ate infinito, em porcentagem*)

graficos dos residuos contra x e contra y

ListPlot[Transpose[{ys[[All,1]],aju["FitResiduals"]/sy}]]

ListPlot[Transpose[{ys[[All,1]],aju["StandardizedResiduals"]}]]

ListPlot[Transpose[{ys[[All,2]],aju["FitResiduals"]/sy}]]

ListPlot[Transpose[{ys[[All,2]],aju["StandardizedResiduals"]}]]

Forçando ajustar um parametro inexistente

aju=LinearModelFit[ys[[All,{1,2}]],{LegendreP[2,Cos[q]],LegendreP[4,Cos[q]],LegendreP[6,Cos[q]]} ,q,Weights->1/sy^2,VarianceEstimatorFunction->(1&)]

aju["ParameterTable"]

outras informacoes uteis

aju["BasisFunctions"]

aju["BestFit"]

D[aju["BestFit"],q]

aju["BestFitParameters"]

aju["Data"]

aju["Response"]

aju[Pi/2]  (* um valor de variavel independente so *)

meusXinterpolados=Table[q,{q,0.1,0.8,0.12}]

aju/@meusXinterpolados (* toda uma lista de valores de variavel independente *)

aju["CovarianceMatrix"]//MatrixForm

Sqrt[Diagonal[aju["CovarianceMatrix"]] ]

aju["ParameterTableEntries"]//TableForm

aju["ParameterTableEntries"][[All,2]]

aju["ParameterTableEntries"][[All,{1,2}]]//TableForm (* so os parametros ajustados e seus desvios padroes*)