Você está na página 1de 6

Relatório − VERSÃO 46

Alice Gamboa, nº 96147 Beatriz Correia, nº 96165 Daniel Marques, nº 96171


Manuel Gomes, nº 96171

22 de Dezembro de 2020

Percentagem da contribuição para a realização do trabalho de cada elemento do grupo:

• Alice Gamboa (XX%): Pergunta ..., alinea ...

• Beatriz Correia (XX%): Pergunta 1 Grupo I, Pergunta 1 Grupo III

• Daniel Marques (XX%): Grupo II

• Manuel Gomes (XX%): Pergunta ..., alinea ...

Grupo I
1. • Código da função newtonquasi:

function [z, fz, iterada] = newtonquasi(funcao, x0, delta, TolX, MaxIter)

iterada(1) = x0; % vetor iterada, que guardará os valores da função das aproximações
valor = feval(funcao, x0); % valor da função no ponto da aproximação inicial

for a = 1: MaxIter
% variante do método de Newton
fracao = delta / (feval(funcao, iterada(a) + delta) - feval(funcao, iterada(a)));
multiplicacao = fracao * valor;
iterada(a+1) = iterada(a) - multiplicacao;
valor = feval(funcao, iterada(a+1)); % valor será o valor da função para cada iterada

if (abs(iterada(a+1) - iterada(a)) / abs(iterada(a+1))) < TolX, % condição de paragem


break;
end

end

z = iterada(a+1);
fz = feval(funcao, z);

end

Código para obter os valores da tabela e o número de iteradas:


PARA x0 = -0.2:
>> [z, fz, iter] = newtonquasi( @(x) x^3 - x^2 - x +1, -0.2, 1e-5, 1e-2, 20)
z = 1.0071
fz = 1.0219e-04
iter =

-0.2000 2.1999 1.6947 1.3870 1.2080 1.1087 1.0557 1.0282 1.0142 1.0071

1
>> numeroIteradas = numel(iter)-1 % o 1º elemento do vetor iter não é uma iterada
numeroIteradas = 9

Para x0 = -0.3:
>> [z, fz, iter] = newtonquasi( @(x) x^3 - x^2 - x +1, -0.3, 1e-5, 1e-2, 20)
z = 1.0069
fz = 9.5653e-05
iter =

-0.3000 8.7987 6.0093 4.1641 2.9530 2.1700 1.6761 1.3760 1.2018 1.1053
1.0539 1.0273 1.0138 1.0069
>> numeroIteradas = numel(iter)-1 % o 1º elemento do vetor iter não é uma iterada
numeroIteradas = 13

xn xn
−0.2000000000000000 −0.3000000000000000
2.1999 8.7987
1.6947 6.0093
1.3870 4.1641
1.2080 2.9530
1.1087 2.1700
x0 −0.2 −0.3
1.0557 1.6761
Número de iteradas 9 13
1.0282 1.3760
1.0142 1.2018
1.0071 1.1053
− 1.0539
− 1.0273
− 1.0138
− 1.0069

2. (a) Código para obter os extremos dos intervalos:

-- código aqui --

Intervalos
[X.XXXXXXXXXXXXXXX × 10X , X.XXXXXXXXXXXXXXX × 10X ]
[X.XXXXXXXXXXXXXXX × 10X , X.XXXXXXXXXXXXXXX × 10X ]
(b) • Código para obter os vectores x e y, ajuste dos pontos e gráfico da Figura 1:

-- código aqui --

A recta obtida é y = Ax + B com A = XXX e B = XXX

grafico.jpg

Figura 1: Gráfico da ordem de convergência.

• A função iteradora é neste caso


− − f uncao aqui − −
donde
...
logo a ordem de convergência é XX e o factor assimptótico de convergência é

K∞ = ...

A estimativa do coeficiente assimptótico de convergência é XX


Comentário detalhado dos resultados: – comentário aqui –
(c) Código para obter os valores da tabela:

-- código aqui --

O valor mais apropriado é δ = 10X


δ |en | Número de iteradas
10−1
10−2
.. .. ..
. . .
10−14

Grupo II
Código para obter as funções aproximadores, os valores da tabela e o gráfico da Figura 2 em formato .jpg:

x = [4 4.25 4.5 4.75 5 5.25 5.5 5.75 6 6.25 6.5 6.75 7];
y = [0.981 0.421 0.211 0.0728 0.136 -0.00936 0.379 0.469 0.931 1.16 2.43 3.07 3.82];
n = 13; % numero de pontos
m = 1; % grau do polinómio
gl = n - m - 1; % calculo inicial do grau de liberdade
p = {[0 0], [0 0 0], [0 0 0 0], [0 0 0 0 0], [0 0 0 0 0 0], [0 0 0 0 0 0 0], [0 0 0 0 0 0 0 0],
[0 0 0 0 0 0 0 0 0], [0 0 0 0 0 0 0 0 0 0], [0 0 0 0 0 0 0 0 0 0 0], [0 0 0 0 0 0 0 0 0 0 0 0]};
% armazena cada polinómio de grau cada vez maior ^^
sse = zeros(11,1); % estrutura para armazenar as SSE
MSE = zeros(11,1); % estrutura para armazenar as MSE
MSE1 = zeros(11,1); % estrutura para armazenar as MSEm+1

z = 4:0.01:7; % valores para produzir os gráficos

while m < 12
[p{1,m} , e] = polyfit(x, y, m);
poly2sym(p{1,m}) % Symbolic Math Toolbox 8.3 para representar as funções aproximadoras
sse(m,1) = e.normr^2;
MSE(m,1) = sse(m,1) / gl;
gl = gl - 1; % gl para o MSE seguinte
m = m + 1;
end

m = 1; % reiniciar o m para calcular MSEm/MSEm+1

while m < 11
MSE1(m,1) = MSE(m,1)/MSE(m+1,1);
m = m + 1;
end

T = table([1;2;3;4;5;6;7;8;9;10;11],sse,MSE,MSE1,’VariableNames’,{’m’ ’SSEm’ ’MSEm’ ’MSEm1’}) % cria e preen

figure

% left plot
subplot(1, 2, 1)
plot(x,y,’o’, z, polyval(p{1,1},z), ’k’, z, polyval(p{1,2},z), ’r--’, z, polyval(p{1,3}, z),
’b--’, z, polyval(p{1,4},z), ’g’,z, polyval(p{1,5},z), ’r-.’, z, polyval(p{1,6},z), ’b-.’)
title(’Left Plot’)
xlabel(’x’)
ylabel(’y’)
legend(’Pontos’, ’grau 1’, ’grau 2’, ’grau 3’, ’grau 4’, ’grau 5’, ’grau 6’)

% right plot
subplot(1, 2, 2)
plot(x,y,’o’, z, polyval(p{1,7},z), ’k’, z, polyval(p{1,8},z), ’r--’, z, polyval(p{1,9}, z),
’b--’, z, polyval(p{1,10},z), ’g’, z, polyval(p{1,11},z), ’r-.’)
title(’Right Plot’)
xlabel(’x’)
ylabel(’y’)
legend(’Pontos’, ’grau 7’, ’grau 8’, ’grau 9’, ’grau 10’, ’grau 11’)

grau m do polinómio SSEm MSEm MSEm /MSEm+1


0 −1
1 7.6018 × 10 6.9108 × 10 2.6009 × 101
−1 −2
2 2.6571 × 10 2.6571 × 10 9.1827 × 10−1
−1 −2
3 2.6042 × 10 2.8936 × 10 8.8914 × 10−1
4 2.6035 × 10−1 3.2544 × 10−2 1.2867 × 100
−1 −2
5 1.7704 × 10 2.5292 × 10 9.2012 × 10−1
−1 −2
6 1.6493 × 10 2.7488 × 10 8.4804 × 10−1
7 1.6206 × 10−1 3.2413 × 10−2 9.1468 × 10−1
−1 −2
8 1.4175 × 10 3.5436 × 10 1.1992 × 100
9 8.8647 × 10−2 2.9549 × 10−2 1.0230 × 100
−2 −2
10 5.7768 × 10 2.8884 × 10 5.4000 × 10−1
−2 −2
11 5.3490 × 10 5.3490 × 10 0.0000 × 100

graficosidebysideG46.jpg

Figura 2: Pontos e funções aproximadoras.

Justificação da escolha do modelo: O modelo escolhido para aproximar os pontos da Tabela 1 foi o polinómio de grau 5 devido à
SSE e MSE associadas serem já próximas de 0, não diminuíndo muito mais para graus superiores
cujas representações gráficas,que para alguns, embora passem mais perto dos pontos no geral
começam a fazer menos sentido como polinómio não interpolador
Modelo escolhido:

(7896416770382521*x^5)/36028797018963968 + (6780489079264641*x^4)/1125899906842624
- (4612150818465515*x^3)/70368744177664 + (6228181797081533*x^2)/17592186044416
- (4181733181709233*x)/4398046511104 + 4473733286160251/4398046511104

Grupo III
1. Código da função integratrap:

function matriz = integratrap(funcao, alpha, beta, MaxK)

for k = 1: MaxK % k equivale ao nº linhas da matriz

h = (beta - alpha)/(2^k); % cálculo da distância entre pontos (h)


x = alpha : h : beta; % os pontos da iterada irão de alpha a beta com um espaçamento de h
y = feval(funcao, x);
t(k) = h*trapz(y); % cálculo do valor integral
matriz(k, 1) = 2^k; % 1ª coluna da matriz corresponde ao nº de subintervalos
matriz(k, 2) = abs(t(k)); % 2ª coluna da matriz corresponde ao valor absoluto do integral
aproximado

if k == 1 % para a 1ª iteração, a 3ª e 4ª colunas da matriz são zero

matriz(k, 3) = 0;
matriz(k, 4) = 0;

end

if k == 2 % para a 2ª iteração, a 4ª coluna da matriz é zero

matriz(k, 3) = abs(t(k)-t(k-1)); % 3ª coluna da matriz corresponde ao módulo da diferença entre


aproximações sucessivas (proporcional ao erro do método
dos trapézios)
matriz(k, 4) = 0;

end

if k >= 3

matriz(k, 3) = abs(t(k) - t(k-1));


matriz(k, 4) = abs((t(k-1) - t(k-2)) / (t(k) - t(k-1))); % 4ª coluna da matriz corresponde
ao quociente entre os erros

end

end

end

2. (a) Código para obter os gráficos da Figura 3

-- código aqui --

graficosidebyside3.jpg

Figura 3: Gráfico das funções integrandas.

(b) Código para calcular os valores dos integrais utilizando a função integratrap:

-- código aqui --

Tabela com os valores obtidos:


Primeiro integral
n Tn |T2n − Tn | |T2n − Tn |/|T4n − T2n |
2 X.XXXXXXXXXXXXXXX × 10X 0 0
4 X.XXXXXXXXXXXXXXX × 10X X.XXXX × 10X 0
X X
8 X.XXXXXXXXXXXXXXX × 10 X.XXXX × 10 X.XXXX × 10X
X X
16 X.XXXXXXXXXXXXXXX × 10 X.XXXX × 10 X.XXXX × 10X
.. .. .. ..
. . . .
Segundo integral
n Tn |T2n − Tn | |T2n − Tn |/|T4n − T2n |
X
2 X.XXXXXXXXXXXXXXX × 10 0 0
4 X.XXXXXXXXXXXXXXX × 10X X.XXXX × 10X 0
8 X.XXXXXXXXXXXXXXX × 10X X.XXXX × 10X X.XXXX × 10X
16 X.XXXXXXXXXXXXXXX × 10X X.XXXX × 10X X.XXXX × 10X
.. .. .. ..
. . . .

Terceiro integral
n Tn |T2n − Tn | |T2n − Tn |/|T4n − T2n |
2 X.XXXXXXXXXXXXXXX × 10X 0 0
4 X.XXXXXXXXXXXXXXX × 10X X.XXXX × 10X 0
X X
8 X.XXXXXXXXXXXXXXX × 10 X.XXXX × 10 X.XXXX × 10X
X X
16 X.XXXXXXXXXXXXXXX × 10 X.XXXX × 10 X.XXXX × 10X
.. .. .. ..
. . . .

Comentário detalhado: – Comentário aqui –


(c) Código para calcular o número mínimo de subintervalos para que o erro seja menor que 10−6 .

-- código aqui --

Teórico Experimental Teórico / Experimental


1º caso X X X.X
2º caso X X X.X
3º caso X X X.X

Comentário detalhado: – Comentário aqui –

Bibliografia
Silva, A., e P. Machado. 2016. Nome do livro. Editora.

Fonseca, A., e B. Sousa. 2019. “Nome do artigo”. Nome da revista X(X): p23-p30.

Duarte, J. 2011. Nome do artigo. Acedido em 31 de fevereiro de 2020. http://analisenumerica/coisas/

Você também pode gostar