Documente Academic
Documente Profesional
Documente Cultură
Por
Instituto Politécnico
Nova Friburgo RJ
2008
1- RESUMO
Este trabalho tem como objetivo principal a utilização dos métodos da Bisseção e de
Newton no cálculo de autovalores. Julgou-se não mais ser necessário a apresentação da
descrição teórica dos dois Métodos, uma vez que o mesmo foi realizado no trabalho
anterior. Novamente as velocidades de convergência dos Métodos foram comparadas. Os
dados obtidos a partir do algoritmo desenvolvido (anexo) são dispostos em tabelas e
gráficos. O desenvolvimento do trabalho seguiu os itens sugeridos na Lista de Exercícios
3. Em sua parte final algumas conclusões são apresentadas em função dos resultados
encontrados na execução do algoritmo.
2-INTRODUÇÃO
Dando prosseguimento à utilização dos Métodos para encontrar raízes (zeros) de uma
equação, os resultados aqui obtidos foram feitos a partir de cálculos das funções propostas
na Lista de Exercícios 3 (três), cujos itens sugeridos foram utilizados na organização do
desenvolvimento desse trabalho. Todas as tabelas e gráficos, bem como a listagem gerada
pela execução do algoritmo proposto encontram-se em forma de anexo.
3- DESENVOLVIMENTO
Critério de parada
while ((erro >= (1/(pow(10,precisao))) || fabs(fxa(xa)) >= (1/(pow(10,precisao))))
&& k<= maxiter && fabs(fxa(xa))!=0 ) {
(iii)
H2 Β1 Β2 Β3
Bisseção Newton Bisseção Newton Bisseção Newton
0 0 0 3.141593 3.141593 6.283185 6.283185
0.5 0.653271 0.653271 3.292310 3.292310 6.361620 6.361620
1.0 0.860334 0.860334 3.425619 3.425619 6.437298 6.437298
10.0 1.428870 1.428870 4.305801 4.305801 7.228110 7.228110
100.0 1.555245 1.555245 4.665765 4.665765 7.776374 7.776374
H2 Β4 Β5 Β6
Bisseção Newton Bisseção Newton Bisseção Newton
0 9.424778 9.424778 12.56637 12.56637 15.70796 15.707963
1 1 3
0.5 9.477486 9.477486 12.60601 12.60601 15.73971 15.739719
3 3 9
1.0 9.529334 9.529334 12.64528 12.64528 15.77128 15.771285
7 7 5
10.0 10.20026 10.20026 13.21418 13.21418 16.25936 16.259361
3 3 6 6 1
100.0 10.88713 10.88713 13.99809 13.99809 17.10930 17.109307
0 0 0 0 7
Tabela 1
(iv)
As assíntotas no intervalo
[0,18] são respectivamente:
π 3π 5π 7π 9π 11π
≅ 1.5708 , ≅ 4.7124 , ≅ 7.8540 , ≅ 10.9956 , ≅ 14.1372 , ≅ 17.2787
2 2 2 2 2 2
(vi)
4- CONCLUSÃO
5- BIBLIOGRAFIA
Algoritmo
#include <stdio.h>
#include <math.h>
int k,maxiter,precisao,precisaodemudanca;
float a,b,c,delta;
double xinicial,xfinal,raiz,raiz2,derivada,xini,erro,comp;
double fxa (double xi);
double funcaoderivada (double xd);
double funcaoerro(double x0,double x1);
double fnovo,fantigo,dnovo,dantigo,ftemp,limite;
double fl,fn,flantigo,passo;
int funcaonewton(double xa);
int funcaobissecao(double xa,double xb);
int main() {
maxiter=150; // número máximo de iterações
char ch;
switch(ch) {
case '1' :
printf ("\nDigite estimativa inicial para a raiz:");
scanf ("%lf",&xinicial);
//xinicial=-5.0;
//printf ("\nDigite a precisao:");
//scanf ("%d",&precisao);
precisao=6;
erro=2;
funcaonewton(xinicial);
printf ("\n**********************************************************\n");
break;
case '2' :
printf ("\nDigite limite inferior:");
scanf ("%lf",&xinicial);
//xinicial=-5.0;
printf ("\nDigite limite superior:");
scanf ("%lf",&xfinal);
//xinicial=-5.0;
//printf ("\nDigite a precisao:");
//scanf ("%d",&precisao);
precisao=6;
erro=2;
funcaobissecao(xinicial,xfinal);
printf ("\n**********************************************************\n");
break;
default :
printf ("\nNenhuma opção selecionada.");
}
return(0);
}
int funcaonewton(double xa) {
double xt;
printf("\n****************Método Newton****************\n");
printf("\n**************************************");
printf("\nf(x)=xtan(x)-100******ntol=10^-6");
printf("\n**************************************");
printf("\nValor de xinicial= %02.12f",xa);
k=1;
while ((erro >= (1/(pow(10,precisao))) || fabs(fxa(xa)) >= (1/(pow(10,precisao)))) &&
k<= maxiter && fabs(fxa(xa))!=0 ) {
xt=xa;
if (funcaoderivada(xt) !=0) {
xa=xt-(fxa(xt)/funcaoderivada(xt));
erro=funcaoerro(xt,xa);
printf("\nIter=%d***x%d=%.12f***Erro=%.12f***fx%d=%.12f",k,k,xa,erro,k,fxa(xa));
//printf("\nIter=%d***x%d=%.4f***Diferença=%.4f",k,k,xa,fabs(xa-16.2594));
++k;
}
else {
printf("\nErro- Derivada nula em x=%f",xt);
k=1000;
}
}
if (k<=maxiter) printf("\nraiz em x= %f",xa);
else printf("\nRaiz não encontrada");
return (0);
}
int funcaobissecao(double xa,double xb) {
double xc;
printf("\n****************Método Bisseção****************\n");
printf("\n**************************************");
printf("\nf(x)=xtan(x)-100******ntol=10^-6");
printf("\n**************************************");
printf("\nValor de limite intervalo= %02.12f",xa);
printf("\nValor de limite intervalo= %02.12f",xb);
xc=(xa+xb)/2;
k=1;
while ((erro >= (1/(pow(10,precisao))) || fabs(fxa(xc)) >= (1/(pow(10,precisao)))) &&
k<= maxiter && fabs(fxa(xc))!=0 ) {
if (fxa(xc)*fxa(xb) <0) {
xa=xc;
}
else xb=xc;
erro=funcaoerro(xa,xb);
printf("\nIter=%d***x%d=%.12f***Erro=%.12f***fx%d=%.12f",k,k,xc,erro,k,fxa(xc));
//printf("\nIter=%d***x%d=%.4f***Diferença=%.4f",k,k,xc,fabs(xc-16.2594));
++k;
xc=(xa+xb)/2;
}
if (k<=maxiter) printf("\nraiz em x= %f",xc);
else printf("\nRaiz não encontrada");
return (0);
}
****************Método Newton****************
f(x)=xtan(x)******ntol=10^-6
Valor de xinicial= 0.000000000000
raiz em x= 0.000000
**********************************************************
Valor de xinicial= 2.000000000000
Iter=1***x1=2.466701453866***Erro=0.233350726933***fx1=-1.973969086419
Iter=2***x2=3.074803143556***Erro=0.246524235325***fx2=-0.205670507377
Iter=3***x3=3.142868293987***Erro=0.022136425408***fx3=0.004009171934
Iter=4***x4=3.141593172525***Erro=0.000405719026***fx4=0.000001630282
Iter=5***x5=3.141592653590***Erro=0.000000165182***fx5=0.000000000000
raiz em x= 3.141593
**********************************************************
Valor de xinicial= 6.000000000000
Iter=1***x1=6.280844243608***Erro=0.046807373935***fx1=-0.014703882518
Iter=2***x2=6.283186171531***Erro=0.000372868333***fx2=0.000005430883
Iter=3***x3=6.283185307180***Erro=0.000000137566***fx3=0.000000000001
raiz em x= 6.283185
**********************************************************
Valor de xinicial= 8.000000000000
Iter=1***x1=8.146589381401***Erro=0.018323672675***fx1=-27.042173980725
Iter=2***x2=8.432470989587***Erro=0.035092183342***fx2=-12.913204423834
Iter=3***x3=8.916547557614***Erro=0.057406253591***fx3=-4.966853486426
Iter=4***x4=9.362956755473***Erro=0.050065251710***fx4=-0.579567802561
Iter=5***x5=9.425029372536***Erro=0.006629595616***fx5=0.002369563338
Iter=6***x6=9.424777967486***Erro=0.000026674193***fx6=0.000000063304
Iter=7***x7=9.424777960769***Erro=0.000000000713***fx7=-0.000000000000
raiz em x= 9.424778
**********************************************************
Valor de xinicial= 11.000000000000
Iter=1***x1=11.004427435945***Erro=0.000402494177***fx1=-1242.963458664774
Iter=2***x2=11.013287249155***Erro=0.000805113511***fx2=-621.699277459558
Iter=3***x3=11.031025028201***Erro=0.001610579897***fx3=-311.034504334984
Iter=4***x4=11.066560179110***Erro=0.003221382493***fx4=-155.636078813651
Iter=5***x5=11.137763040151***Erro=0.006434055378***fx5=-77.802229140601
Iter=6***x6=11.279832408547***Erro=0.012755646523***fx6=-38.607057263822
Iter=7***x7=11.555604805319***Erro=0.024448270753***fx7=-18.430225426042
Iter=8***x8=12.023907609865***Erro=0.040526031518***fx8=-7.247802066954
Iter=9***x9=12.482920533367***Erro=0.038175020833***fx9=-1.044125589825
Iter=10***x10=12.566540144589***Erro=0.006698721745***fx10=0.002130408458
Iter=11***x11=12.566370616649***Erro=0.000013490423***fx11=0.000000028781
Iter=12***x12=12.566370614359***Erro=0.000000000182***fx12=-0.000000000000
raiz em x= 12.566371
*****************
Valor de xinicial= 15.000000000000
Iter=1***x1=15.510840015037***Erro=0.034056001002***fx1=-3.097775584398
Iter=2***x2=15.705304187542***Erro=0.012537307607***fx2=-0.041761765072
Iter=3***x3=15.707963705698***Erro=0.000169338850***fx3=0.000006876147
Iter=4***x4=15.707963267949***Erro=0.000000027868***fx4=0.000000000000
raiz em x= 15.707963
**********************************************************
**************************************
f(x)=xtan(x)-0.5******ntol=10^-6
**************************************
Valor de xinicial= 1.000000000000
Iter=1***x1=0.787793836613***Erro=0.212206163387***fx1=0.291577501463
Iter=2***x2=0.675127607371***Erro=0.143014865065***fx2=0.040530337628
Iter=3***x3=0.653891180793***Erro=0.031455426124***fx3=0.001117734060
Iter=4***x4=0.653271694435***Erro=0.000947384483***fx4=0.000000913893
Iter=5***x5=0.653271187095***Erro=0.000000776614***fx5=0.000000000001
raiz em x= 0.653271
**********************************************************
Valor de xinicial= 1.570800000000
Iter=1***x1=1.570803673218***Erro=0.000002338438***fx1=-213819.341326132417
Iter=2***x2=1.570811019693***Erro=0.000004676889***fx2=-106910.045660130825
Iter=3***x3=1.570825712796***Erro=0.000009353833***fx3=-53455.397824832202
Iter=4***x4=1.570855099623***Erro=0.000018707885***fx4=-26728.073902304634
Iter=5***x5=1.570913875749***Erro=0.000037416644***fx5=-13364.411930907811
Iter=6***x6=1.571031437897***Erro=0.000074836787***fx6=-6682.580924932075
Iter=7***x7=1.571266601776***Erro=0.000149687570***fx7=-3341.665381367985
Iter=8***x8=1.571737087878***Erro=0.000299431110***fx8=-1671.207528291024
Iter=9***x9=1.572678693548***Erro=0.000599085991***fx9=-835.978438565730
Iter=10***x10=1.574564439450***Erro=0.001199066223***fx10=-418.363564941374
Iter=11***x11=1.578346074978***Erro=0.002401702613***fx11=-209.555461005623
Iter=12***x12=1.585949962916***Erro=0.004817630340***fx12=-105.150036010004
Iter=13***x13=1.601320511688***Erro=0.009691698434***fx13=-52.944419263776
Iter=14***x14=1.632714633323***Erro=0.019605145507***fx14=-26.835144629754
Iter=15***x15=1.698121508622***Erro=0.040060200334***fx15=-13.764737355023
Iter=16***x16=1.839293792022***Erro=0.083134382718***fx16=-7.184909016824
Iter=17***x17=2.158607720316***Erro=0.173606810222***fx17=-3.739253394519
Iter=18***x18=2.836146199064***Erro=0.313877538920***fx18=-1.394276602040
Iter=19***x19=3.333602871683***Erro=0.175398811522***fx19=0.148069787830
Iter=20***x20=3.293080173167***Erro=0.012155826616***fx20=0.002711932963
Iter=21***x21=3.292310280037***Erro=0.000233791189***fx21=0.000000910848
Iter=22***x22=3.292310021282***Erro=0.000000078594***fx22=0.000000000000
raiz em x= 3.292310
**********************************************************
Valor de xinicial= 1.600000000000
Iter=1***x1=1.630000784909***Erro=0.018750490568***fx1=-27.999548448551
Iter=2***x2=1.692402175103***Erro=0.038283043034***fx2=-14.348441978353
Iter=3***x3=1.826716272126***Erro=0.079362990074***fx3=-7.481326812643
Iter=4***x4=2.129774618050***Erro=0.165903348291***fx4=-3.904767735537
Iter=5***x5=2.783384057814***Erro=0.306891365042***fx5=-1.541984924873
Iter=6***x6=3.334269736192***Erro=0.197919391265***fx6=0.150507269287
Iter=7***x7=3.293105685512***Erro=0.012345747026***fx7=0.002801800683
Iter=8***x8=3.292310297471***Erro=0.000241531283***fx8=0.000000972216
Iter=9***x9=3.292310021282***Erro=0.000000083889***fx9=0.000000000000
raiz em x= 3.292310
**********************************************************