<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>
Boa tarde colegas,<div><br></div><div>Estou tentando reproduzir o algoritmo de GAUSS-NEWTOM em linguagem r, entretanto não estou conseguindo automatizar os comandos. </div><div><br></div><div>Na parte da automatização eu estou seguindo o script que o Walmes postou no site <http://ridiculas.wordpress.com/?s=newton> sobre o metodo de NEWTON-RAPHSON.</div><div><br></div><div>A titilo de exemplo estou utilizando um ajuste para o modelo y=a*exp(b*x)  conforme segue a baixo:</div><div><br></div><div>CMR:</div><div><br></div><div>x<-c(2,5,7,10,14,19,26,31,34,38,45,52,53,60,65)</div><div><br></div><div>y<-c(54,50,45,37,35,25,20,16,18,13,8,11,8,4,6)</div><div><br></div><div>a<-56.6646 #parâmetro obtido obtido pela linearização da função<span style="font-size: 10pt;"> </span><span style="font-size: 10pt;">y=a*exp(b*x)</span><span style="font-size: 10pt;"> </span></div><div><br></div><div>b<-(-0.03797) <span style="font-size: 10pt;">#parâmetro obtido obtido pela linearização da função</span><span style="font-size: 10pt;"> </span><span style="font-size: 10pt;">y=a*exp(b*x)</span><span style="font-size: 10pt;"> </span></div><div><br></div><div># a função fx fornece as estimativas de (y~x) dados os coeficientes a e b. </div><div><br></div><div>fx<-function(xi,yi,a,b,i,n){</div><div>resp<-numeric(0)</div><div>for(i in i:n){</div><div>t<-(a*exp(b*xi[i]))</div><div>resp<-c(resp,t)</div><div>      }</div><div>resp</div><div>}</div><div><br></div><div># a função dfa fornece as estimativas da primeira derivada (dfx/da ~ x) dado o coeficientes b. </div><div><br></div><div>dfa<-function(xi,yi,b,i,n){</div><div>resp<-numeric(0)</div><div>for(i in i:n){</div><div>     t<-exp(b*xi[i])</div><div>     resp<-c(resp,t)</div><div>     }</div><div> resp </div><div>}</div><div><br></div><div># a função dfb fornece as estimativas da primeira derivada (dfx/db~x) dados os coeficientes a e b. </div><div><br></div><div>dfb<-function(xi,yi,a,b,i,n){</div><div>resp1<-numeric(0)</div><div>for(i in i:n){</div><div>     t1<-a*xi[i]*exp(b*xi[i])</div><div>     resp1<-c(resp1,t1)</div><div>     }</div><div> resp1 </div><div>}</div><div><br></div><div># A matrix betas contem os chutes para a e b</div><div><br></div><div>betas<-matrix(c(a,b),nc=1)</div><div><br></div><div># bcor fornece os parâmetros a e b corrigidos para a primeira interação. Estes parâmetros serão substituídos no lugar dos valores de a e b iniciais e o processo sera repetido.    </div><div><br></div><div>bcor<-(betas)+((solve((t(matrix(c((dfa(dia,diag,b,1,15)),(dfb(dia,diag,a,b,1,15))),nc=2))%*%(matrix(c((dfa(dia,diag,b,1,15)),(dfb(dia,diag,a,b,1,15))),nc=2)))))%*%((t(matrix(c((dfa(dia,diag,b,1,15)),(dfb(dia,diag,a,b,1,15))),nc=2))%*%(matrix(c(diag-(fx(dia,diag,a,b,1,15))),nc=1)))))</div><div><br></div><div># a função Sqerro fornece a soma de quadrados dos desvios </div><div><br></div><div>Sqerro<-sum((diag-fx(dia,diag,a,b,1,15))^2)</div><div><br></div><div><br></div><div>O problema é que eu não estou conseguindo usar os parâmetros corrigidos para fazer a nova interação:</div><div><br></div><div>Ex:</div><div><br></div><div>bcor[i+1]<-bcor[i]+betas[i]  # este comando aproximaria mais vezes os parâmetros.  </div><div><br></div><div>dif(Sqerro[i+1]-Sqerro[i]) #Este seria o critério de parada quando a variação no Sqerro fosse insignificante (10^(-6) por exemplo)</div><div><br></div><div><br></div><div><br></div><div>Agradeço desde já pela ajuda e peço desculpas se não fui muito claro.</div><div><br></div><div><br></div><div>Att.</div><div><br></div><div><br></div><div>Tiago. </div><div>  </div><div><br></div><div><br></div><div>  </div>                                    </div></body>
</html>