Zeros de função - cálculo numérico
Resumo: O trabalho a seguir apresenta um programa que determina raízes a partir de uma função dada utilizando os métodos da Bisseção, de Newton e das Secantes.
1. Introdução
De acordo com o proposto, foi dada uma função de forma geral: a sen (bx) + c cos (dx) + e ln (fx) + g ehx + i x3 + j x2 + k x + l, e a partir dela, determinar a sua única raiz real. Para isso, utilizar os métodos da Bisseção, de Newton e das Secantas da seguinte maneira: primeiramente Bisseção; Bisseção até o intervalo de separação atingir 0,1 de amplitude e a partir daí utilizar Newton; idem ao anterior, mas se o valor de f' no método de Newton tornar-se, em módulo, menor que um valor ε, é dada ao usuário a opção de continuar pelo método das Secantes; Bisseção até atingir 0,1 de amplitude e a partir daí utilizar Secantes.
Ao final de tudo o programa imprime para cada iteração, o número da iteração k, o valor aproximado da raiz x(k), o valor |f(x(k)| e o nome do método utilizado na iteração.
2. Desenvolvimento
Usando o que foi pedido, foi feito o programa com o seguinte algoritmo:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/*Váriaveis globais*/ float cons[12],max_y,e,x1,x2,a,b,x; int aux,iter,max_iter,ibis,teste;
/*Calcula a imagem do dominio dado da função*/ float imagem_funcao(float x)
{
int i; float f=0;
f=f+(cons[0]*(sin(x*cons[1]))); f=f+(cons[2]*(cos(x*cons[3]))); if(cons[4]!=0) { f=f+(cons[4]*(log(x*cons[5]))); } f=f+(cons[6]*(exp(x*cons[7]))); f=f+(cons[8]*(pow(x,3))); f=f+(cons[9]*(pow(x,2))); f=f+(cons[10]*x); f=f+cons[11]; return f;
}
/*Calcula a imagem do dominio dado da derivada da função*/ float derivada_funcao(float x)
{
int i; float f_der=0;
f_der=cons[0]*cons[1]*cos(x); f_der=f_der+(cons[2]*cons[3]*sin(x)); f_der=f_der+(cons[4]*cons[5]*(1/(cons[5]*x)));