Buscar

APS 1 Numérico Galvão


Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
using namespace std;
int main()
{
long double ii, is, xi; //Valores Iniciais; intervalo inferior, intervalo superior e x inicial.
long double FA, FB, FH; //resultados das funções para as variáveis; a, b e h.
long double a, b, h, xp, xn; //termos que variam na função.
long double E; //erro.
int iteracoes;
//
//Metodo da bissecção.
//
//Determinação das raízes.
//
cout << "Metodo da bisseccao" << endl;
printf("Digite o intervalo inferior de busca da raiz: ");
fflush(stdin);
cin >> ii;
printf("Digite o intervalo superior de busca da raiz: ");
fflush(stdin);
cin >> sup;
if (ii == 0) ii = 0.1; //Ao colocar zero, a função tende ao infinito.
a = ii;
b = is;
E = (b-a)/2;
h = a + E;
iteracoes = 0;
while (E >= 0.000000001){
FA = a*sinh(3/(2*a))-1.6;
FB = b*sinh(3/(2*b))-1.6;
FH = h*sinh(3/(2*h))-1.6;
if (FA > 0){
if (FH < 0){
b = h;
}
else{
a = h;
}
}
E = (b-a)/2;
h = a + E;
iteracoes++;
}
cout << "x = " << h << "\t iteracoes = " << iteracoes << endl << endl;
//
//Newton-Raphson.
//
cout << "Metodo de Newton-Raphson" << endl;
printf("Digite o valor de xi de busca da raiz: ");
fflush(stdin);
cin >> xi;
xn = xi;
iteracoes = 0;
E = xi;
if (E < 0.000000001) E = 1; //Ao digitar o valor menor que o erro, o erro é alterado.
while (E >= 0.000000001){
xp = xn - (xn*sinh(3/(2*xn)) - 1.6) / (sinh(3/(2*xn)) -(3/(2*xn))*cosh(3/(2*xn)));
E = xn - xp;
if (E < 0) E = -E; //valor positivo do erro.
xn = xp;
iteracoes++;
}
cout << "x = " << xn << "\t iteracoes = " << iteracoes << endl << endl;
//
//Método hibrido.
//
//Bisseccao para e<10^-3.
//
a = inf;
b = sup;
E = (b-a)/2;
h = a + E;
iteracoes = 0;
while (E >= 0.001){
FA = a*sinh(3/(2*a))-1.6;
FB = b*sinh(3/(2*b))-1.6;
FH = h*sinh(3/(2*h))-1.6;
if (FA > 0){
if (FH < 0){
b = h;
}
else{
a = h;
}
}
E = (b-a)/2;
h = a + E;
iteracoes++;
}
//
// Newton-Raphson para e<10^-9.
//
xn = h;
while (E >= 0.000000001){
xp = xn - (xn*sinh(3/(2*xn)) - 1.6) / (sinh(3/(2*xn)) -(3/(2*xn))*cosh(3/(2*xn)));
E = xn - xp;
if (E < 0) E = -E;
xn = xp;
iteracoes++;
}
cout << "Metodo hibrido:" << endl;
cout << "x = " << xn << "\t iteracoes = " << iteracoes << endl;
fflush(stdin);
getchar();
return 0;
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando