Você está na página 1de 8

Mtodos Numricos e Estatsticos

Exerccios para o Matlab

Equaes no Lineares em MatLab


1. Escreva em Matlab a funo r=bisec(f,a,b,n,eps) que determina uma aproximao da raiz da equao no linear f(x)=0 usando o mtodo da bisseco, tomando como intervalo inicial [a,b], n iteraes e com um erro inferior a eps.
Nota: o parmetro f indica o nome da funo como string, o nmero mximo de iteraes 10

2. Escreva em Matlab a funo r=cordafalsa(f,a,b,n,eps) que determina uma aproximao da raiz da equao no linear f(x)=0 usando o mtodo da corda falsa, tomando como intervalo inicial [a,b], n iteraes e com um erro inferior a eps.

Nota: o parmetro f indica o nome da funo como string, o nmero mximo de iteraes 5

3. Escreva um programa em Matlab que dada a equao 1 x tg(x) =0, x 0: a. separa graficamente as razes no intervalo (-pi/2, pi/2) b. usa o mtodo da bisseco para aproximar a menor raiz positiva com um erro inferior a 0.5 x 10-1 Nota: utilizar a funo bisec do ex. 1. Este exerccio corresponde ao ex 1. FP4

4. Escreva um programa em Matlab que dada a equao x -1=0 e tomando como intervalo inicial [0, 1.3]: a. usa o mtodo da bisseco e da corda falsa, para em 5 iteraes aproximar a nica raiz real desta equao. b. usa a funo do Matlab fzero para procurar uma raiz no intervalo [0,1.3]. c. calcula o erro absoluto para cada aproximao e indica qual a melhor aproximao.
10

Nota: utilizar a funo bisec e cordafalsa do ex. 1. Este exerccio corresponde ao ex 2. FP4

5. Escreva um programa em Matlab que dada a equao

Nota: utilizar a funo cordafalsa do ex. 1. Este exerccio corresponde ao ex 3. FP4 6. Escreva um programa em Matlab que dada a equao 2

a. separa graficamente as duas razes positivas no intervalo ]0, 4] b. usa o mtodo da bisseco e da corda falsa para aproximar a maior raiz positiva com um erro inferior a 0.5 x 10-2 tomando como intervalo inicial [2,3]

ln (x) - 2x + 4 = 0, x 0:

ln (1+ e 2x ) +x - 3 = 0

Nota: utilizar a funo bisec e cordafalsa do ex. 1. Este exerccio corresponde ao ex 5. FP4

a. separa graficamente duas razes no intervalo [-10,10] b. usa o mtodo da bisseco e da corda falsa, para aproximar a raiz positiva deste equao tomando como intervalo inicial [2,3] com um erro inferior a 0.005 c. calcula o erro absoluto para cada aproximao

Departamento de Matemtica. Universidade de Aveiro

Mtodos Numricos e Estatsticos

Exerccios para o Matlab

Notas sobre as funes do Matlab:


Integrao Numrica
!"

funo FZERO: procura um zero de uma funo de uma varivel.


(Esta funo encontram-se no Function and ODE Solver toolbox)

r=FZERO(F,X) procura um zero de F. F indica o nome da funo como string. FZERO devolve um valor prximo daquele onde a funo muda de sinal ou NaN se no consegue determinar um zero. O parmetro X pode ser um escalar ou um vector:

#" se X um vector com duas componentes, X =[a,b], X representa um intervalo onde F(a).F(b)<0, o zero procurado nesse intervalo #" se X um valor, X usado como valor inicial, ento FZERO procurado num intervalo onde a funo F muda de sinal e que contenha X

Para utilizar a funo fzero a funo f(x) externo.

dever ser definida num ficheiro

Por exemplo, para definir a funo do exerccio 3 pode ser criado o seguinte ficheiro f3.m : function y=f3(x) y=1-(x.*tan(x));

Para procurar um zero desta funo no intervalo [-1.5,0] dever ser introduzido o seguinte comando do Matlab:
r1=fzero('f3',[-1.5,0]) r1 = -0.8603335890193 % o nome da funo passado como string

Para procurar um zero desta funo tomando como aproximao inicial o valor 1 dever ser introduzido o seguinte comando do Matlab:
r1=fzero('f3', -1) r1 = -0.8603335890193 % o nome da funo passado como string

Para procurar um zero desta funo no intervalo [0,1.5] dever ser introduzido o seguinte comando do Matlab:
r2=fzero('f3',[0,1.5]) r2 = 0.8603335890193 % o nome da funo passado como string

Departamento de Matemtica. Universidade de Aveiro

Mtodos Numricos e Estatsticos

Exerccios para o Matlab

Resolues dos exerccios:


1.
function r=bisec(fun,a,b,n,eps) %--------------------------------------------------------------------% Esta funo implementa o mtodo da bisseco para determinar um valor % aproximado da raiz da equao no linear fun(x)=0 num intervalo dado % Para executar chamar: % r = bisec(fun,a,b,n,e) % Parmetros de entrada % f - o nome da funo como string % a,b - intervalo [a,b], f(a).f(b)<0 % n - numero mximo de iteraes % eps - continuar o processo at que e(k)=abs(b(k)-a(k))/2 <= eps % Parmetros de sada % r - valor aproximado da raiz %--------------------------------------------------------------------echo off; a(1)=a; % os intervalos [a(k),b(k)] so armazenados nos vectores a,b b(1)=b; fa(1)= feval(fun,a(1)); % os vectores fa,fb armazenam os valores % fa(k)=f(a(k)),fb(k)=f(b(k)) fb(1)= feval(fun,b(1)); if fa(1)*fb(1) > 0; error('f(a) e f(b) tem o mesmo sinal. O mtodo de bisseco requer f(a)*f(b)<0'); end; for k=1:n; x(k)=(a(k)+ b(k))/2; % os pontos mdios so armazenados em x(k) y(k)=feval(fun,x(k)); % o vector y armazena os valores f(x(k)) if y(k)==0; r=x(k); % a raiz foi encontrada e(k)=0; break; end; e(k)=abs(b(k)-a(k))/2; % calcula o erro if e(k)<= eps; % se e(k) <= eps parar o processo r=x(k); % uma aproximao da raiz foi encontrada break; end; if fa(k)*y(k)<0; % se f(ak).f(bk)<0 ento novo intervalo [a(k+1),b(k+1)]=[a(k),x(k)] a(k+1)=a(k); b(k+1)=x(k); fa(k+1)=fa(k); fb(k+1)=y(k); else % caso contrrio ento novo intervalo: [a(k+1),b(k+1)]=[x(k),b(k)] a(k+1)=x(k); b(k+1)=b(k); fa(k+1)=y(k); fb(k+1)=fb(k); end; end; if k>n and r=~0; disp (['No foi possvel encontrar um zero com erro <=,num2str(eps)]); else echo off; m=length(x); k=1:m; % # de iteraes r=x(m); % o valor aproximado da raiz encontra-se em x(m)

a=a(1:m); b=b(1:m);
continua na pgina seguinte......

Departamento de Matemtica. Universidade de Aveiro

Mtodos Numricos e Estatsticos


(continuao)

Exerccios para o Matlab

% construir a tabela disp(''); disp('---------------------Mtodo da biseco --------------------'); disp(' Iterao a(k) b(k) x(k) y(k) Erro '); disp('--------------------------------------------------------------'); disp([k',a',b',x',y',e']) % os vectores transpostos disp('--------------------------------------------------------------'); format long;

end

2.

function r=cordafalsa(fun,a,b,n,eps) %-------------------------------------------------------------------------% Esta funo implementa o mtodo da corda falsa para determinar um valor % aproximado da raiz da equao no linear fun(x)=0 num intervalo dado % Para executar chamar: % r = cordafalsa(fun,a,b,n,e) % Parmetros de entrada % f - o nome da funo como string % a,b - intervalo [a,b] que contm o zero % n - numero mximo de iteraes % eps - continuar o processo at que e(k)=|b(k)-a(k)|/2 <= eps % Parmetros de sada % r - valor aproximado da raiz %-------------------------------------------------------------------------echo off; format long; a(1)=a; % os intervalos [a(k),b(k)] so armazenados nos vectores a,b b(1)=b; fa(1)= feval(fun,a(1)); fb(1)= feval(fun,b(1)); if fa(1)*fb(1) > 0; error('f(a) e f(b) tem o mesmo sinal. O mtodo da corda false requer f(a)*f(b)<0'); end; for k=1:n; % determino o ponto que intersecta a secante com o eixo x x(k)= b(k) - (fb(k)* (b(k)-a(k))/(fb(k)-fa(k))); y(k)=feval(fun,x(k)); % o vector y armazena os valores f(x(k)) if y(k)==0; r=x(k); % a raiz foi encontrada e(k)=0; break; end; e(k)=abs(b(k)-a(k))/2; % calcula o erro if e(k)<= eps; % se e(k) <= eps parar o processo r=x(k); % uma aproximao da raiz foi encontrada break; end; if fa(k)*y(k)<0; % se f(ak).f(bk)<0 ento novo intervalo [a(k+1),b(k+1)]=[a(k),x(k)] a(k+1)=a(k); b(k+1)=x(k); fa(k+1)=fa(k); fb(k+1)=y(k); else % caso contrrio ento novo intervalo: [a(k+1),b(k+1)]=[x(k),b(k)] a(k+1)=x(k); b(k+1)=b(k); fa(k+1)=y(k); fb(k+1)=fb(k); end; end; continua na pgina seguinte...

Departamento de Matemtica. Universidade de Aveiro

Mtodos Numricos e Estatsticos


(continuao)

Exerccios para o Matlab

if k>n and r=~0; disp (['No foi possvel encontrar um zero no intervalo dado com erro <= ',num2str(eps)]); else echo off; m=length(x); k=1:m; % # de iteraes r=x(m); % a raiz est na ultima componente de x a=a(1:m); b=b(1:m); format short; disp('------------------Mtodo da corda falsa-----------------------'); disp(' Iterao a(k) b(k) x(k) y(k) Erro '); disp('--------------------------------------------------------------'); disp([k',a',b',x',y',e']) % os vectores transpostos disp('--------------------------------------------------------------'); format long end

3.

% -------------------------------------------------------------------% Este programa dada a equao 1-xtg(x)=0, x <>0 % 1. separa graficamente as razes no intervalo (-pi/2, pi/2) % 2. usa o mtodo da bisseco para aproximar a menor raiz positiva % % com um erro inferior a 0.5 x 10-1 % -------------------------------------------------------------------% 1. separa graficamente as razes no intervalo (-pi/2, pi/2) echo off; format long; disp('Determinar as razes de 1-x.tg(x)=0 equivalente a determinar os pontos que intersectam'); disp('tg(x) e 1/x. Prima uma tecla para mostrar o grfico das funes e os seus pontos de interseco') disp('no intervalo (-pi/2, pi/2)'); pause; % determina os pontos (x,y1), (x,y2) para construir as funes x=-1.5:0.025:1.5; y1= feval('f1',x); % avalia a funo definida em f1.m, f1(x)=tg(x) y2 =feval('f2',x); % avalia a funo definida em f2.m, f2(x)=1/x % determina os zeros da funo 1-x.tg(x)=0 r1=fzero('f3',[-1.5,0]);% determina uma raiz no intervalo [-1.5,0] r2=fzero('f3',[0,1.5]); % determina outra raiz no intervalo [0,1.5] fr1=feval('f2',r1); % avalia f1(x)=tg(x) na raiz r1 fr2=feval('f2',r2); % avalia f1(x)=tg(x) na raiz r2 X=[r1 r2]; % as abcissas das razes Y=[fr1 fr2]; % as ordenadas das razes % constri o grfico das funes f1=tg(x) e f2=1/x e os seus pontos de % interseco (r1,fr1) e (r2,fr2), onde r1 e r2 correspondem aos zeros % da funo 1-x tg(x) no intervalo (-pi/2, pi/2) % inicia grfico figure(1); clf; % limpa a figura 1 hold on; whitebg('w'); title('Razes da equao 1- xtg(x)no intervalo (-pi/2,pi/2)'); xlabel('x'); ylabel('y'); grid; a=-pi/2; % define os eixos de coordenadas b=pi/2; continua na pgina seguinte...

Departamento de Matemtica. Universidade de Aveiro

Mtodos Numricos e Estatsticos


(continuao)

Exerccios para o Matlab

c=min(y1); d=max(y1); axis([a b c d]); % define os eixos de coordenadas % desenha os eixos de coordenadas plot([a b],[0 0],'b',[0 0],[c d],'b' ); % desenha as funes e os pontos onde se intersectam plot(X,Y,'or',x,y1,'r',x,y2,'g'); hold off; % fim do grfico % 2. usa o mtodo da bisseco para aproximar a menor raiz positiva % com um erro inferior a 0.5 x 10-1. O intervalo inicial [0.5,1] disp(' '); disp('Prima uma tecla para determinar a aproximao da menor raiz ') disp(' positiva usando o mtodo da biseco no intervalo (0.5,1) com disp('um erro inferior a 0.05'); pause; r= bisec('f3',0.5,1,10,0.05); % o nmero mximo de iteraes 10 disp(['A raiz no intervalo (-1.5,0): r1= ',num2str(r1,8)]); %num2str(r1,8) - converte r1 a um string com 8 dgitos disp(['A raiz no intervalo (0,1.5) : r2= ',num2str(r2,8)]); disp(['Uma aproximao de r2 no intervalo (0.5,1) com um erro inferior a 0.05 :',num2str(r,8)]);

4.

% ----------------------------------------------------------------------% Este programa dada a equao x10-1=0 e o intervalo inicial [0,1.3]: % 1.usa o mtodo da bisseco e da corda falsa, para em 5 iteraes % aproximar a nica raiz real deste equao % 2.usa a funo do Matlab fzero para procurar uma raiz no intervalo dado % 3.calcula o erro absoluto para cada aproximao % ------------------------------------------------------------------------% 1.usa o mtodo da bisseco e da corda falsa para, em 5 iteraes, % aproximar a nica raiz real deste equao rb= bisec('f4',0,1.3,5,0.0000005); rcf= cordafalsa('f4',0,1.3,5,0.00000005); format long; disp('A aproximao da raiz no intervalo [2,3]'); disp([' pelo mtodo da bisseco: ',num2str(rb,8)]); disp([' pelo mtodo da corda falsa: ',num2str(rcf,8)]); % 2.usa a funo do Matlab fzero para procurar uma raiz no intervalo % [0,1.3] r=fzero('f4',[0,1.3]); disp(['A raiz no intervalo [0,1.3] ',num2str(r,8)]); % 3.calcula o erro absoluto para cada aproximao eab=abs(r-rb); eacf=abs(r-rcf); disp('O erro absoluto da aproximao da raiz:'); disp([' pelo mtodo da bisseco: erro=',num2str(eab,8)]); disp([' pelo mtodo da corda falsa: erro=',num2str(eacf,8)]);

Departamento de Matemtica. Universidade de Aveiro

Mtodos Numricos e Estatsticos


5.

Exerccios para o Matlab

% --------------------------------------------------------------------------% Este programa dada a equao ln(x)-2x+4=0 % 1. separa graficamente as duas razes positivas no intervalo (0, 4] % 2. usa o mtodo da corda falsa para aproximar a maior raiz positiva com % um erro inferior a 0.5 x 10-2, tomando como intervalo inicial [2,3] % ----------------------------------------------------------------------------echo off; format long; disp('Determinar as razes de ln(x)-2x+4=0 equivalente a determinar os pontos que intersectam'); disp('y=ln(x) e a recta y=2x-4.'); disp('Prima uma tecla para mostrar o grfico das funes e os seus pontos de interesco') disp('no intervalo (0, 4]'); pause; % determina os pontos (x,y1), (x,y2) para construir as funes x=0.01:0.025:4; y1= eval('log(x)'); % a funo eval avalia uma funo definida como string em x y2 = eval('2*x-4'); % determina os zeros da funo ln(x)-2x+4=0 no intervalo (0,4] r1=fzero('f5',[0.001,1]);% determina uma raiz no intervalo [0.001,1] r2=fzero('f5',[2,3]);% determina uma raiz no intervalo [2,3] fr1=feval('log',r1); % avalia f1(x)=log(x) na raiz r1, a funo log definida pelo Matlab, fr2=feval('log',r2); % avalia f1(x)=log(x) na raiz r2 X=[r1 r2]; % as abcissas das razes Y=[fr1 fr2]; % as ordenadas das razes % constri o grfico das funes f1=log(x) e f2=2x-4 e os seus pontos de % interseco (r1,fr1) e (r2,fr2), onde r1 e r2 correspondem aos zeros da % funo ln(x)-2x +4 no intervalo (0, 4) figure(1); % visualiza a janela de grficos que corresponde figura 1 clf; % limpa a figura 1 hold on; whitebg('w'); title('Razes da equao ln(x)-2x +4=0 no intervalo (0,4)'); xlabel('x'); ylabel('y'); grid; a=-1; % define os eixos de coordenadas b=4; c=min(y2); d=max(y2); axis([a b c d]); % define os eixos de coordenadas plot([a b],[0 0],'b',[0 0],[c d],'b' ); % desenha os eixos de coordenadas % desenha as funes e os pontos onde se intersectam plot(X,Y,'or',x,y1,'r',x,y2,'g'); hold off; % fim do desenho do grfico

% 2. usa o mtodo da corda falsa para aproximar a maior raiz positiva com um % erro inferior a 0.005 disp(' '); disp('Prima uma tecla para determinar a aproximao da maior raiz positiva usando o mtodo') disp('da corda falsa no intervalo (0,4) com um erro inferior a 0.005'); pause; rcf= cordafalsa('f5',2,3,10,0.005); format long; disp(['A raiz no intervalo (0,1): r1= ',num2str(r1,8)]); %num2str(r1,8) converte r1 a um string com 8 dgitos disp(['A raiz no intervalo (2,3) : r2= ',num2str(r2,8)]); disp(['Uma aproximao de r2 no intervalo (2,3) com um erro inferior a 0.005 :',num2str(rcf,8)]);

Departamento de Matemtica. Universidade de Aveiro

Mtodos Numricos e Estatsticos

Exerccios para o Matlab

6. % --------------------------------------------------------------------------% Este programa dada a equao 2ln(1+ exp(-2x))+x-3 = 0 % 1. separa graficamente duas razes no intervalo [-10,10] % 2. usa o mtodo da bisseco e da corda falsa, para aproximar a raiz positiva % desta equao tomando como intervalo inicial [2,3] com um erro < 0.005 % 3. calcula o erro absoluto para cada aproximao da raiz % ----------------------------------------------------------------------------echo off; format long; disp('Prima uma tecla para mostrar o grfico da funo y=2ln(1+ exp(-2x))+x-3 e as suas razes') disp('no intervalo (-10, 10]'); pause; % determinar os pontos (x,y) para construir a funo x=-10:0.025:10; y= feval('f6',x); % determinar os zeros da funo y=2ln(1+ exp(-2x))+x-3 no intervalo (0,4] r1=fzero('f6',[-10,0]);% determina uma raiz no intervalo [-10,0] r2=fzero('f6',[0,10]); % determina uma raiz no intervalo [0,10] X=[r1 r2]; % as abcissas das razes Y=[0 0]; % so zeros da funo % construir o grfico da funes f(x)=2ln(1+ exp(-2x))+x-3 indicando os seus % zeros no intervalo (-10, 10) figure(1); clf; % limpa a figura 1 hold on; whitebg('w'); title('Razes da equao 2ln(1+ exp(-2x))+x-3 no intervalo (-10,10)'); a=-10; b=10; c=min(y); d=max(y); plot([a b],[0 0],'b',[0 0],[c d],'b' ); % desenha os eixos de coordenadas axis([a b c d]); % define os eixos de coordenadas xlabel('x'); ylabel('y'); grid; plot(X,Y,'or',x,y,'r'); % desenha a funo e os seus zeros hold off; % fim do desenho do grfico % 2. usa o mtodo da biseco e da corda falsa, para aproximar a raiz positiva % desta equao tomando como intervalo inicial [2,3] com erro < 0.005 disp(' '); disp('Prima uma tecla para determinar a aproximao da raiz positiva usando o) disp(' mtodo da bisseco e da corda falsa no intervalo (2,3) com um erro inferior a 0.005'); pause; rb= bisec('f6',2,3,10,0.005); rcf= cordafalsa('f6',2,3,10,0.005); disp(['A menor raiz positiva no intervalo [0,10], r1= ',num2str(r1,8)]); disp(['A maior raiz positiva no intervalo [0,10], r2= ',num2str(r2,8)]); disp('A aproximao da raiz r2 no intervalo [2,3]'); disp([' pelo mtodo da biseco : ',num2str(rb,8)]); disp([' pelo mtodo da corda falsa : ',num2str(rcf,8)]); % 3.calcula o erro absoluto para cada aproximao eab=abs(r2-rb); eacf=abs(r2-rcf); disp('O erro absoluto da aproximao da raiz r2:'); disp([' pelo mtodo da bisseco: erroabs=',num2str(eab,8)]); disp([' pelo mtodo da corda falsa: erroabs=',num2str(eacf,8)]);

Departamento de Matemtica. Universidade de Aveiro

Você também pode gostar