Baixe o app para aproveitar ainda mais
Prévia do material em texto
Bisseção: Define-se o intervalo (a,b) que satisfaça a relação f(a).f(b)<0, o que significa dizer que nesse intervalo há uma raiz. Então se faz a média dos valores extremos do intervalo, obtendo xm e, com ele, testa-se a relação anterior (f(a).f(b)<0) porém substituindo a ou b por xm (no exemplo do algoritmo substituiu-se b por xm). Verificando a validade da relação temos 2 opções: Verdadeira: significa que a raiz está entre a e xm, então muda-se o intervalo de (a,b) para (a,xm); Falsa: significa que a raiz está entre xm e b, então muda-se o intervalo de (a,b) para (xm,b). Núcleo do Algoritmo: %Início do núcleo do método da bisseção xm=(a+b)*0.5 if(f(a)*f(xm)<0) %a=a b=xm; else a=xm; %b=b end %if %Final do núcleo Falsa Posição: A base é a mesma que o método da Bisseção, porém não se usa o valor médio do intervalo, mas sim um valor qualquer escolhido, o que implica numa mudança no algoritmo. Adiciona-se a fórmula para calcula o xf(valor intermediário do intervalo que funcionará como se fosse o xm do método da bisseção). Núcleo do Algoritmo: %Início do núcleo do método da falsa posição xf=(a*f(b)-b*f(a))/(f(b)-f(a)) if(f(a)*f(xf)<0) %a=a b=xf; else a=xf; %b=b end %if %Final do núcleo Método da Interação Linear: Isola-se uma das incógnitas da função trabalhada, não há restrições com qual incógnita isolar, porém para facilitar os cálculos isola-se a mais fácil. No exemplo do algoritmo a função é f(x)=x.cos(x)+1,8 e isolando x e fazendo f(x)=0, tem-se x= . Só que ao isolar um dos x fazemos o outro depender dele, ou seja, dentro do algoritmo o x é a raiz da função e xi é o valor inicial de chute. Núcleo do Algoritmo: %Início do núcleo do método da interação linear x=(-1.9)/(cos(xi)) xi=x; %final do núcleo Newton-Raphson Nada mais é que o truncamento da Série de Taylor no segundo termo, já que os valores depois do segundo termo são desprezíveis com relação aos 2 primeiros. Truncando a Série de Taylor, substituindo x por xi + dx, igualando a zero e isolando dx, tem-se: x=xi+dx f(x) = f(xi+dx) = f(xi) + f’(xi).dx => dx = Núcleo do Algorismo: %Início do núcleo do método de newton-raphson dx=-f(xi)/df(xi) x=xi+dx xi=x; %final do núcleo do método Observação: Caso tenha-se uma função cuja derivada não seja tão simples de se achar usa-se a fórmula geral de derivação para achar o dx, mudando alguns detalhes no algoritmo. Núcleo do Algorismo: %Início do núcleo do método de newton raphson der=(f(xi+dxi)-f(xi))/dxi; dx=-f(xi)/der x=xi+dx xi=x; dxi=dx; %final do núcleo do método Aplicação: Aplica-se esse método juntamente com o briot-ruffini para achar as raízes de polinômios complicados. Então f(x) torna-se Pn(x) e no algoritmo existem alguns detalhes adicionados, como um vetor para os coeficientes do polinômio e uma variável para o grau. No exemplo do algoritmos também criou-se um vetor para as prováveis raízes e também um looping para calcular as raízes, refiná-las e diminuir o grau do polinômio original para poder achar todas raízes distintas. Algoritmos: Calcular e refinar todas raízes n=5 a=[1 2 3 0 2 1] no=n;ao=a; xi=[-1 complex(1,1) complex(1,-1) complex(-1,1) complex(-1,-1)] for ir=1:no %A raiz número ir [x(ir) erro cont]=fnrp(n,a,xi(ir)); printf("\n A raiz com redução de grau %d eh (%.20f + %.20fi) com erro=|Pn(x)|=%.20f em %d iteracoes\n",ir,real(x(ir)),imag(x(ir)),erro,cont); %Refinamento das raízes obtidas por redução de grau, aplicadas no polinômio original [x(ir) erro cont]=fnrp(no,ao,x(ir)); printf("\n A raiz refinada %d eh (%.20f + %.20fi) com erro=|Pn(x)|=%.20f em %d iteracoes\n",ir,real(x(ir)),imag(x(ir)),erro,cont); %reduzindo o grau do polinômio b(1)=a(1); for i=2:n+1 b(i)=a(i)+x(ir)*b(i-1); end %for r1=b(n+1); %Redefinindo o polinômio quociente n=n-1; a=b; end Calcular raiz function [x erro cont]=fnrp(n,a,xi) erro=1.e2; cont=0; while(erro>1.e1 & cont<200) cont=cont+1; %nucleo do metodo de newton raphson para polinomios b(1)=a(1); for i=2:n+1 b(i)=a(i)+xi*b(i-1); end %for r1=b(n+1); c(1)=b(1); for i=2:n c(i)=b(i)+xi*c(i-1); end %for r2=c(n); dx=-r1/r2; x=xi+dx; xi=x; %final do nucleo do metodo erro=abs(r1); end %while end Observação final: só copiei e colei o algoritmo inteiro do polinômio porque nos outros é só usar o looping do while sempre usado
Compartilhar