TF1 *f; // aqui a gente define a funcao de integral // como nao da para definir como uma formula // simples, precisamos defini-la como funcao // o vetor X contem as variaveis x,y,z, caso a // funcao tenha mais de uma dimensao. o vetor // par contem os parametros da funcao // par[0] = I0 // par[1] = pi*d/lambda // par[2] = theta0 // par[3] = largura do colimador // par[4] = luz de fundo double funcao(double *X, double *par) { double x = X[0]; f->SetParameters(par); // tranfere parametros para a funcao f double valor = f->Integral(x-par[3]/2,x+par[3]/2)/par[3]+par[4]; return valor; } void fit() { // primeiro le o arquivo de dados e faz o grafico experimental // o arquivo so contem x e y. Temos que calcular os erros na mao TGraphErrors* g = new TGraphErrors("difracao-dados.txt"); // pega os vetores de dados do grafico para manipular os dados double *e = g->GetEY(); // pega o vetor de erros em y do grafico double *y = g->GetY(); // pega o vetor de y do grafico double *x = g->GetX(); // pega o vetor de x do grafico int np = g->GetN(); // pega o numero de pontos no grafico // loop sobre todos os pontos do grafico for(int i =0; iSetParameters(12,400,0,0.002,0); // mando fazer o fit. Ver site do root para saber o que siginifcam as letras g->Fit(f_int,"R0"); // desenhar o grafico e ajuste g->Draw("AP"); g->SetMarkerStyle(20); g->SetMarkerColor(2); g->SetMarkerSize(1); g->SetLineColor(2); f_int->Draw("same L"); f_int->SetLineColor(4); f_int->SetLineWidth(2); f_int->SetNpx(5000); // desenha a funcao com 5000 pontos gPad->SetLogy(); // escreve o chiquadrado reduzido na tela cout <<"Chi2_red = "<GetChisquare()/f_int->GetNDF()<