Escolar Documentos
Profissional Documentos
Cultura Documentos
2 Trabalho
Mtodo de Bisseco
Universidade Federal de Pernambuco Centro Acadmico do Agreste CAA Ncleo de Tecnologia Curso de Engenharia Civil
2 Trabalho
Mtodo de Bisseco
Este relatrio atende solicitao do Professor de Clculo Numrico, Alessandro Antunes, relacionado ao segundo trabalho sobre o mtodo de bisseco.
Programa
/********************************************************************* Universidade Federal de Pernambuco Ncleo de Tecnologia Curso de Engenharia Civil Disciplina: Clculo Numrico Prof: Alessandro Antunes Perodo: 2012-2 Segundo Trabalho Data: 17/01/2013 Nome Do Arquivo: bisseccaocn Autores: Manoel Digenes Yago Santos Descrio: Este programa encontra uma raiz de uma equao atravs do mtodo de bisseco. *********************************************************************/ f=input('Escreva a funcao f(x)que voce deseja analisar:'); a=input('Escreva um valor para a:'); b=input('Escreva um valor para b:'); tol=input('Informe agora a precisao desejada:'); g=subs(f,'a'); fa=eval(g); h=subs(f,'b'); fb=eval(h); format long if fa*fb > 0 error('A funcao deve ter sinais opostos em a e b para que seja possvel executar o mtodo de bisseccao'); end m = (a+b)/2; while abs(a-b) > tol i=subs(f,'m'); fm = eval(i); if fa*fm <=0 b = m; fb = fm; m = (a+b)/2; elseif fm*fb <=0 a = m; fa = fm; m = (a+b)/2; end end raiz = (a+b)/2; raiz
Programa Comentado
% % % % % Este programa calcula a raiz da funo f no intervalo [a,b] com tolerancia(precisao) tol. Admite-se que a funo tenha uma nica raiz no intervalo [a,b]. Primeiro so declaradas pelo usurio a funo e as variveis necessrias para se executar o programa.
f=input('Escreva a funcao f(x)que voce deseja analisar:'); a=input('Escreva um valor para a:'); b=input('Escreva um valor para b:'); tol=input('Informe agora a precisao desejada:'); % % As funes 'subs' e 'eval' associam as variveis g e fa, h e fb ao que seria f(a) e f(b), respectivamente.
g=subs(f,'a'); fa=eval(g); h=subs(f,'b'); fb=eval(h); format long % % Agora verifica-se se a funo assume valores de sinais opostos em a e b. Se no, o programa informar o erro e ser encerrado.
if fa*fb > 0 error('A funcao deve ter sinais opostos em a e b'); end % % Se sim, isso mostra que no intervalo dado a funo tem pelo menos uma raiz.
m = (a+b)/2; % % % Aps encontrar o valor mdio do intervalo, o programa ir verificar a funo nesse valor mdio e continuar enquanto a condio |a-b|>tol for verdadeira.
while abs(a-b) > tol i=subs(f,'m'); fm = eval(i); if fa*fm <=0 b = m; fb = fm; m = (a+b)/2; elseif fm*fb <=0 a = m; fa = fm; m = (a+b)/2; end end
% Por fim, aps atingir a preciso desejada, o valor do ponto mdio % agora o valor aproximado da raiz. raiz = (a+b)/2; raiz
Testes
Supondo que o usurio, ao executar o programa, digite a funo y = x.sen(x) para o intervalo [2 , 4] e uma preciso 0,0001. Ir aparecer no programa:
Escreva Escreva Escreva Informe raiz = 3.14157104492 >> a funcao f(x) que voc deseja analisar:'x*sin(x)' um valor para a:2 um valor para b:4 agora a precisao desejada:0.0001
b
4,00000000000 4,00000000000 3,50000000000 3,25000000000 3,25000000000 3,18750000000 3,15625000000 3,15625000000 3,14843750000 3,14453125000 3,14257812500 3,14160156250 3,14160156250 3,14160156250 3,14160156250 3,14160156250
m
3,00000000000 3,50000000000 3,25000000000 3,12500000000 3,18750000000 3,15625000000 3,14062500000 3,14843750000 3,14453125000 3,14257812500 3,14160156250 3,14111328125 3,14147949219 3,14154052734 3,14157104492
raiz
3,14157104492
Ir aparecer no programa
Caso o usurio, ao executar o programa, digite a funo y = x.sen(x) para o intervalo [4 , 7] e uma preciso 0,0001. Escreva a funcao f(x) que voc deseja analisar:'x*sin(x)' Escreva um valor para a:4 Escreva um valor para b:7 Informe a precisao desejada:0.0001 ??? Error using ==> bicessao_ultima_tentativa at 12 A funcao deve ter sinai opostos em a e b >>