Q7) A altura crítica
de um vertedouro é dada implicitamente por:
com:
- Escreva a equação na forma de ponto fixo.
- Analise a convergência do método.
- Determine
numericamente.
- Programe o método em MATLAB.
Passo 1
O enunciado dá a equação implícita para a altura crítica
e os valores dos parâmetros. O que é pedido:
- Reescrever a equação na forma de ponto fixo.
- Analisar a convergência do método de iteração de ponto fixo.
- Determinar numericamente
. - Programar o método em MATLAB.
Informações fornecidas:
e a relação implícita
Passo 2
Colocar a equação na forma de ponto fixo significa escrevê‑la como
com
explícito. Defino a constante
Assim a forma de ponto fixo é
(escrevi a forma genérica e a dependência explícita de
em
).
Observação algébrica útil: como a incógnita aparece linear no lado direito, pode-se também isolar explicitamente (quando
):
Observação algébrica útil: como a incógnita aparece linear no lado direito, pode-se também isolar
esta é a solução fechada (se
) — vamos calcular
e usar ambos (iteração e fórmula fechada) para confirmar.
Passo 3
Explicando didaticamente o método de ponto fixo e a condição de convergência (passo a passo, sem pular etapas):
- Ideia do método: escolhe‑se uma função
tal que . Para aproximar a solução, aplica‑se a iteração
Se a sequência
converge a algum ponto
, então
, ou seja, é uma solução.
- Critério de convergência local (teorema do ponto fixo / contração): se existe um intervalo
contendo a solução tal que é contínua em e existe com
então
é uma contração em
e a iteração converge a um único ponto fixo para qualquer
. Além disso, a convergência é (pelo menos) linear e o erro satisfaz
- Aplicação ao nosso
:
Derivando:
Aqui a derivada é constante (não depende de
). Assim a constante de contração possível é
.
- Calcular numericamenete
usando os dados do enunciado:
Logo
Portanto
- Conclusão sobre convergência: como
a função
é uma contração local (na verdade global aqui, porque
é constante). Logo a iteração de ponto fixo converge para a solução única a partir de qualquer
. A razão de contração é cerca de
; isso implica convergência linear com cada iteração reduzindo o erro aproximadamente pela metade.
Passo 4
Determinar
numericamente — usando a solução fechada (cálculo passo a passo) e confirmar pela iteração:
- Solução fechada (recapitulando):
Substituindo
:
Então
- Confirmação pela iteração de ponto fixo (mostro algumas iterações para ver a convergência; escolho
para simplicidade):
Cálculos (arredondados a 9 casas decimais nas iterações mostradas):
-
. -
. -
. -
. -
. -
. -
. -
. -
. -
. -
.
Vê‑se que a sequência tende rapidamente para
. Os valores residuais caem aproximadamente por um fator
a cada iteração, compatível com a análise.
Passo 5
Observações práticas e controle de erro (útil na prova):
- Como
, a convergência é garantida e linear; para uma tolerância no erro, o número de iterações necessário satisfaz intimamente (mais precisamente, usar a desigualdade do passo 3 para estimar ). - A solução exata (fechada) existe porque
. Quando a equação do enunciado permite isolar linearmente, prefira a solução fechada (mais rápida e exata). A iteração serve para confirmar ou quando não for possível isolar.
Passo 6
Código MATLAB para implementar a iteração de ponto fixo (comentado e pronto para rodar). O código calcula
, executa a iteração até convergir e imprime o resultado; também mostra a solução fechada para comparação.
% arquivo: iter_ponto_fixo_vertedouro.m
% Iteracao de ponto fixo para h = A*(1 + 0.4*h)
% dados
Q = 14; % m^3/s
B = 3.2; % m
g = 9.81; % m/s^2
% constante A
A = (Q^2/(g*B^2))^(1/3);
% parametro de iteracao
h0 = 0; % chute inicial
tol = 1e-8; % tolerancia
maxit = 1000; % iteracoes maximas
% iteração
h_old = h0;
for iter = 1:maxit
h_new = A*(1 + 0.4*h_old); % h_{n+1} = g(h_n)
if abs(h_new - h_old) < tol
break
end
h_old = h_new;
end
% solução pela iteração
h_iter = h_new;
% solução fechada (quando possivel)
if abs(1 - 0.4*A) > eps
h_closed = A/(1 - 0.4*A);
else
h_closed = NaN;
end
% mostrar resultados
fprintf('A = %.12f\n', A);
fprintf('Iteracoes = %d\n', iter);
fprintf('h (iterativa) = %.12f m\n', h_iter);
fprintf('h (fechada) = %.12f m\n', h_closed);
Resposta
Convergência: