Exercícios para o Matlab Integração Numérica em MatLab Notas sobre as funções do Matlab: função TRAPZ: numericamente avalia um integral usando a regra dos Trapézios (Esta função encontram-se no Data Analysis and Fourier Transformation toolbox) T=TRAPZ (X,Y) – aproxima o integral duma função que passa pelos pontos com abcissas X e ordenadas Y usando a regra dos trapézios Exemplo: » X= [-1,-0.5,0,0.5,1] X= -1.0000 -0.5000 0 0.5000 1.0000 » Y=[-2,12,-6,10,11] Y= -2 12 -6 10 11 » i=trapz(X,Y) i= 10.2500 !!! resultado função QUAD: numericamente avalia um integral usando a regra de Simpson (Esta função encontram-se no Function and ODE Solvers toolbox) Q=QUAD (‘f’ , A, B ) - aproxima a integral de F(x) no intervalo [A,B] usando a regra de Simpson com um erro relativo no ordem de 10-3 Para utilizar a função quad primeiramente a função f(x) deverá ser definida num ficheiro externo ou devemos usar a função inline para definir esta função on-line. Exemplo: Para obter o valor aproximado do integral da função f(x)=cos(x)-exp(-x) em [0, 0.5] podemos primeiramente definir a função f(x) num ficheiro externo e logo executar o seguinte comando do matlab: function y=f2(x) y=cos(x)-exp(-x); » quad(' f2 ', 0, 0.5) ans = 0.0860 ou usar a função inline para definir a função f(x) direitamente na função quad: » quad(inline ('cos(x)-exp(-x)'), 0, 0.5) ans = 0.0860 Gladys Castillo. U.A. Exercícios para o Matlab Computação simbólica função INT: Determina o valor exacto do integral duma função INT(f) – determina o integral indefinido referente à variável simbólica INT(f,a,b) - determina o valor do integral num intervalo [a,b] referente à variável simbólica. Exemplo 1: Determinar o integral » syms x I = ∫ 1 − x 2 dx » i=int(sqrt(1-x^2)) i= 1/2*x*(1-x^2)^(1/2)+1/2*asin(x) % uma expressão simbólica » pretty(i) 1/2 1/2 x (1 - x 2) + 1/2 asin(x) 1 Exemplo 2: Determinar o valor do integral I = ∫ 1 − x 2 dx 0 » syms » double(int(sqrt(1-x^2),0,1)) ans = 0.7854 % devolve o valor do integral no intervalo dado Exercícios: 1. Dada a função a função f(x) definida pontualmente através da seguinte tabela: e I= xi -1.0 0.5 0.0 0.5 1.0 f(xi) -2 12 -6 10 11 1 ∫ f ( x)dx o valor do seu integral: −1 a) Escreva um programa em Matlab para determinar um valor aproximado de I usando a regra dos trapézios. Sug: Utilize a função do Matlab trapz 2. Escreva em Matlab a função trapézio(f,a,b,n) que aproxima o valor da integral duma função f(x) no intervalo [a,b] usando a regra dos trapézios composta com n subintervalos. Gladys Castillo. U.A. Exercícios para o Matlab 3. Escreva um programa em Matlab que dada uma função f(x), um intervalo [a,b] e um número n de subintervalos: (a) usando a regra dos trapézios composta com n subintervalos determina um valor aproximado para: b I = ∫ f ( x ) dx a (b) determine o valor exacto deste integral, o erro absoluto e erro relativo desta aproximação. Sug: Utilize a função trapezio(f,a,b,n) do exercício 2 para determinar o valor aproximado do integral e a função int(f,a,b) de computação simbólica para determinar o valor exacto. 4. Escreva em Matlab um programa para determinar um valor aproximado do seguinte integral: 0 .5 I = ∫ cos( x ) − e − x dx 0 usando a regra de Simpson Sug: Utilize a função quad(f,a,b) do Matlab para determinar o valor aproximado do integral e a função int(f,a,b) de computação simbólica para determinar o valor exacto. 5. Escreva em Matlab a função simpson(f,a,b,n) que aproxima o valor do integral duma função f(x) no intervalo [a,b] usando a regra de Simpson com n subintervalos. 6. Escreva um programa em Matlab que dada uma função f(x), um intervalo [a,b] e um número de subintervalos n: (a) usando a regra de Simpson com n subintervalos determina um valor aproximado para: b I = ∫ f ( x ) dx a (b) determina o valor exacto deste integral, o erro absoluto e erro relativo desta aproximação. Sug: Utilize a função simpson(f,a,b,n) do exercício 5 para determinar o valor aproximado do integral e a função int(f,a,b) de computação simbólica para determinar o valor exacto. 7. Utilize as funções trapezio(f,a,b,n) e simpson(f,a,b,n) para determinar um valor aproximado para as seguintes integrais usando a regra dos trapézios e a regra de Simpson, respectivamente: 1 (a) I = ∫ 1 − x 2 dx 0 1 (b) I = ∫ x sin( x ) dx 0 Gladys Castillo. U.A. Exercícios para o Matlab 1 (c) I = ∫ e − x dx 2 0 Compare ambos os resultados e identifique a melhor aproximação em cada caso. Resoluções dos exercícios: 1. format long; X= [-1,-0.5,0,0.5,1]; Y=[-2,12,-6,10,11]; i=trapz(X,Y); disp('O valor que aproxima o integral pelo método dos trapezios é:'), disp(i) 2. function s = trapezio(f,a,b,n) %-----------------------------------------------------------------% Esta função implementa a Regra do Trapézio Composta que aproxima o % valor da integral duma função num intervalo dado % I ≈ h/2 [f(x0)+ 2f(x1) + 2f(x2) + ... + 2f(xn-1) + f(xn-1) ] % % Para executar chamar: % s = trapezio(f,a,b,n) % Parâmetros de entrada % f - a função deve ser introduzida como string % a,b - intervalo [a,b] % n - número de subintervalos % Parâmetros de saída % s - o valor aproximado do integral %---------------------------------------------------------------------h =(b-a)/n; x=a; y=eval(f); s = h/2 * y; for k=1:(n-1); x = a + h*k; y = eval(f); s = s + h*y; end x=b; y=eval(f); s =s + h/2 * y; % determina o incremento para n subintervalos % define o primeiro ponto % avalia a função para o primeiro ponto % inicializa a soma para o primeiro ponto % para os restantes pontos até n-1: % calcula o ponto seguinte % avalia a função neste ponto % incrementa a soma % define o último ponto % avalia a função para o último ponto % adiciona o último termo à soma Como executar: » s=trapezio('sqrt(1-x^2)', 0, 1, 5) s= 0.75926220722089 Gladys Castillo. U.A. Exercícios para o Matlab 3. %-------------------------------------------------------------% Este programa dada uma função f(x), um intervalo [a,b] e um % número n de subintervalos determina um valor aproximado para % a integral da função usando a regra dos trapézios %-------------------------------------------------------------echo off; format long; fun=input('Introduza a função (como string): '); disp('Introduza o intervalo para x:'); a=input('a='); b=input('b='); n=input('Introduza o número de subintervalos: '); s=trapezio(fun,a,b,n); disp('O valor aproximado da integral: '), disp(s); syms x; i=int(fun,a,b); i=double(i); % converte de simbólico a double erroabs=i-s; errorel=erroabs/abs(i); disp('O valor exacto da integral: '), disp(i); format short e; disp('O erro absoluto:' ), disp(erroabs); disp('O erro relativo:' ), disp(errorel); format short; Como executar: » exerc3 Introduza a função (como string): 'sqrt(1-x^2)' Introduza o intervalo para x: a=0 b=1 Introduza o número de subintervalos: 5 O valor aproximado da integral: 0.75926220722089 O valor exacto da integral: 0.78539816339745 O erro absoluto: 2.6136e-002 O erro relativo: 3.3277e-002 Gladys Castillo. U.A. Exercícios para o Matlab 4. %----------------------------------------------------------------% Este programa determina um valor aproximado para o integral de % f(x)=cos(x)-exp(-x) em [0, 0.5] usando a Regra de Simpson, % e determina o valor exacto do integral usando computação % simbolica %-----------------------------------------------------------------fun = 'cos(x)-exp(-x)'; format long; Is = quad(inline(fun), 0, 0.5); disp('O valor aproximado do integral usando a regra de Simpson é'), disp(Is); syms x; f= sym(fun); % converte fun a uma variável simbólica I = double(int(f, 0, 0.5)); disp('O valor exacto da integral: '), disp(I); erroabs = I-Is; errorel = erroabs/abs(Is); format short e; disp('O erro absoluto da aproximação: ), disp(erroabs); disp('O erro relativo da aproximação: ), disp(errorel); format short; Executar: » exerc4 O valor aproximado da integral usando a regra de Simpson é 0.08595619828600 O valor exacto da integral: 0.08595619831684 O erro absoluto da aproximaçao: 3.0832e-011 O erro relativo da aproximaçao: 3.5869e-010 Gladys Castillo. U.A. Exercícios para o Matlab 5. function s = simpson(f,a,b,n) %-------------------------------------------------------------% Esta função implementa a Regra de Simpson % Is=(h/3)[f(a)+4f(x1)+2f(x2)+...+4f(xN-1)+f(b)] % que aproxima o valor do integral duma função % num intervalo dado % Para executar chamar: % s = sympson(f,a,b,n) % Parâmetros de entrada % f - a funçao como string (ex: f='exp(x^2)') % a,b - intervalo [a,b] % n - número de subintervalos % Parâmetros de saída % Is - o valor aproximado da integral %-------------------------------------------------------------if mod(n,2)~=0 disp ('O número de intervalos tem de ser par'); else format long; h=(b-a)/n; % determina o incremento para n subintervalos Is=0; for k=1:2:(n-1) x = a+h*k; Is = Is+4*eval(f); % para os impares multiplico por 4 end for k=2:2:(n-2) x=a+h*k; Is=Is+2*eval(f); para os pares multiplico por 2 end x=a; fa= eval(f); x=b; fb=eval(f); Is=h*(fa + Is + fb)/3; end Como executar: » s= simpson('cos(x)-exp(-x)',0,0.5,4) s= 0.08595631710502 Gladys Castillo. U.A. Exercícios para o Matlab 6. %-----------------------------------------------------------------% Este programa usa a regra de Simpson composta para determinar um % valor aproximado para o integral duma função dada num intervalo % dado %-----------------------------------------------------------------echo off; format long fun=input('Introduza a função (como string): '); disp('Introduza o intervalo para x:'); a=input('a= '); b=input('b= '); disp('Introduza o numero de subintervalos:'); n=input('n= '); s=simpson(fun,a,b,n); disp('O valor aproximado do integral usando a regra de Simpson é'), disp(s); syms x; f= sym(fun); % converte fun a uma variável simbólica i=double(int(f,a,b)); disp('O valor exacto do integral: '), disp(i); erroabs = i-s; errorel = erroabs/abs(i); format short e; disp('O erro absoluto da aproximação:' ), disp(erroabs); disp('O erro relativo da aproximação:' ), disp(errorel); format short; Executar: » exerc6 Introduza a função (como string): 'cos(x)-exp(-x)' Introduza o intervalo para x: a= 0 b= 0.5 Introduza o número de subintervalos: n= 4 O valor aproximado da integral usando a regra de Simpson é 0.08595631710502 O valor exacto da integral: 0.08595619831684 O erro absoluto da aproximaçao: -1.1879e-007 O erro relativo da aproximaçao: -1.3820e-006 Gladys Castillo. U.A.