Q2) Considere um canal de concreto de seção trapezoidal variável, utilizado no sistema de dissipação de energia de uma barragem. A seção transversal do canal é definida por:
onde
é a base inferior e
representa o alargamento lateral progressivo do canal.
O escoamento permanente é uniforme a montante, mas torna-se gradualmente variado ao longo do trecho analisado. A profundidade crítica
ocorre no ponto em que o número de Froude é unitário:
onde
é a profundidade hidráulica definida por:
A vazão é dada por:
com:
Dados do problema:
(a) Derive a equação não linear que define a profundidade crítica
.
(b) Mostre que essa equação pode ser escrita na forma:
(c) Determine um intervalo
no qual
muda de sinal e justifique rigorosamente, usando o Teorema de Bolzano, a existência de uma raiz.
(d) Determine numericamente a profundidade crítica
usando o Método da Bisseção, com tolerância
.
(e) Implemente todo o procedimento em MATLAB, exibindo:
- a tabela de iterações,
- o erro absoluto a cada passo,
- e o gráfico da função
no intervalo considerado.
O escoamento permanente é uniforme a montante, mas torna-se gradualmente variado ao longo do trecho analisado. A profundidade crítica
(b) Mostre que essa equação pode ser escrita na forma:
(d) Determine numericamente a profundidade crítica
(e) Implemente todo o procedimento em MATLAB, exibindo:
Passo 1
O que o problema pede e quais são os dados concretos.
- O enunciado pede encontrar a profundidade crítica
num canal trapezoidal cuja largura no topo varia linearmente com a profundidade: . - A profundidade crítica é o valor de
que torna o número de Froude unitário:
-
Informações fornecidas (peguei todos estes números do enunciado):
-
, -
, -
, -
, -
.
-
-
Funções geométricas fornecidas:
-
, -
, -
.
-
-
O enunciado tem itens:
(a) derivar a equação não linear para;
(b) mostrar que pode ser escrita como;
(c) encontrar um intervalocom mudança de sinal e justificar por Bolzano;
(d) determinar numericamenteusando o método da bisseção com tolerância ;
(e) implementar tudo em MATLAB exibindo tabela de iterações, erro absoluto e gráfico.
A partir daqui começamos a resolver passo a passo e a explicar a teoria necessária.
Passo 2
Derivando a equação não linear que define
(item (a)), explicando cada passo.
- Começamos com a definição do número de Froude:
A condição para profundidade crítica é
, logo
- A velocidade média
relaciona-se com a vazão por , então . A profundidade hidráulica é . Substituindo na condição :
- Multiplicando ambos os lados por
:
- Esta é a equação não linear procurada: a profundidade crítica
é a raiz da equação
onde
e
.
(Observação didática curta: isso faz sentido fisicamente — condição
equilibra velocidade com capacidade da seção de suportar ondas/gravidade; ao substituir
e
obtemos uma equação apenas em termos da geometria
.)
Passo 3
Mostrar a forma
(item (b)).
- Partimos de
. Dividindo ambos os lados por obtemos
- Colocando tudo no lado esquerdo:
- Definindo
temos exatamente a forma pedida. Portanto as raízes de
são os valores críticos
.
Passo 4
Escolha de um intervalo
e justificativa rigorosa (item (c)) usando o Teorema de Bolzano.
-
Observação sobre domínio e continuidade: para
temos (já que ) e . Além disso para . Logo e são positivas para e é bem definida e contínua para todo . (Explicando para a prova: é combinação de polinômios e quocientes com denominador não-nulo, então é contínua.) -
Precisamos de um intervalo
com . Vamos testar alguns valores positivos (faça isso na prova: escolha alguns fisicamente plausíveis, por exemplo entre poucos décimos e alguns metros): - Calculei (pegando números do enunciado)
e . Usei as fórmulas: com , e . - Resultado (cálculos numéricos):
- Calculei (pegando números do enunciado)
-
Como
é contínua em e , pelo Teorema de Bolzano (Teorema do Valor Intermediário) existe pelo menos uma raiz . -
Conclusão prática: um intervalo válido e simples é
. (Na prova, qualquer outro intervalo contendo a raiz e para o qual se consiga demonstrar mudança de sinal serve.)
Passo 5
Explicando o Método da Bisseção (didática para usar na prova) e a métrica de erro.
-
Ideia do método: se
é contínua e , então existe raiz em . A bisseção corta o intervalo ao meio repetidamente: em cada iteração calcula-se . Se para, senão escolhe-se o subintervalo ou onde a mudança de sinal persiste. Repetir até que o intervalo seja suficientemente pequeno. -
Erro e critério de parada:
- Após
iterações o comprimento do intervalo é . Uma estimativa de erro absoluto para a raiz é (ou seja, a distância do ponto médio ao extremo). - Para tolerância
e intervalo inicial de comprimento , o número mínimo de iterações necessário é
- No nosso caso
, logo
Assim a bisseção precisa de cerca de 26 iterações para garantir erro menor que. - Após
-
Observação prática: a bisseção é robusta (sempre converge) e fácil de explicar na prova. Em implementação é comum relatar a cada iteração:
e o erro absoluto ou .
Passo 6
Execução ilustrativa de algumas iterações da bisseção (vou mostrar as primeiras iterações para você entender como progredimos; o MATLAB que vou fornecer depois faz todas até a tolerância e produz a tabela completa):
Usando o intervalo inicial
.
- Iteração 1:
. Encontrei → sinal negativo ⇒ novo intervalo . - Iteração 2:
. → sinal positivo ⇒ . - Iteração 3:
. ⇒ . - Iteração 4:
. ⇒ . - Iteração 5:
. ⇒ . - Iteração 6:
. ⇒ . - Iteração 7:
. ⇒ . - Iteração 8:
. ⇒ .
Comentário: depois de poucas iterações já reduzimos bastante o intervalo para perto da raiz (entre
e
). A cada iteração o comprimento do intervalo é dividido por 2; portanto em cerca de 26 iterações (conforme cálculo acima) o erro será
.
Passo 7
Resultado numérico obtido pela bisseção até a tolerância
(item (d)) e observações.
- Executei a bisseção até que
. O procedimento converge de forma monotônica ao valor:
-
Para que você tenha uma ideia prática: o número de iterações necessárias foi
(pela fórmula de logaritmo acima), e o valor final obtido (com erro absoluto menor que ) foi o dado acima. -
Observação empática: a bisseção é estável (se a sua implementação no MATLAB começar com os mesmos
e a mesma função , ela deverá chegar exatamente ao mesmo valor numérico quando a tolerância for ).
Passo 8
Como implementar tudo em MATLAB (item (e)). Código comentado para você copiar/colar, rodar e obter a tabela de iterações, o erro absoluto em cada passo e o gráfico de
no intervalo.
- Explicação rápida: o script abaixo define
de acordo com a fórmula , executa a bisseção guardando a cada iteração e o erro absoluto , imprime uma tabela e plota a função no intervalo inicial.
Cole e execute isto no MATLAB:
% Bissecao_critica.m
% Implementa bissecao para achar y_c tal que f(y)=0 com f dada no enunciado.
clear; close all; clc;
% Dados
Q = 42; % m^3/s
g = 9.81; % m/s^2
b0 = 3.2; % m
alpha = 0.45;
z = 1.75;
% Funcoes geométricas
s = alpha + z; % = alpha+z
tcoef = alpha + 2*z; % = alpha+2z
A = @(y) y .* (b0 + s .* y); % area
T = @(y) b0 + tcoef .* y; % largura superior (borda molhada)
% Função f
f = @(y) (Q^2 .* T(y)) ./ (g .* (A(y).^3)) - 1;
% Intervalo inicial (escolhido conforme passo 4)
a = 0.5;
b = 5;
% Verificacao inicial
fa = f(a);
fb = f(b);
if fa * fb > 0
error('f(a) e f(b) tem mesmo sinal! Escolha outro intervalo.');
end
% Parâmetros do método
tol = 1e-7;
maxit = 1000;
% Arrays para guardar histórico
iter = 0;
c_prev = NaN;
history = []; % cada linha: [iter a b c f\text{(c)} erro_abs]
while ( (b-a)/2 > tol ) && (iter < maxit)
iter = iter + 1;
c = (a + b)/2;
fc = f\text{(c)};
if iter == 1
err = NaN;
else
err = abs(c - c_prev);
end
history = [history; iter a b c fc err];
% atualização do intervalo
if fa * fc <= 0
b = c;
fb = fc;
else
a = c;
fa = fc;
end
c_prev = c;
end
% Resultado
yc = (a + b)/2;
fprintf('Número de iterações: %d\n', iter);
fprintf('Profundidade crítica y_c = %.9f m\n\n', yc);
% Exibir tabela
fprintf('it a b c f\text{(c)} erro_abs\n');
for k = 1:size(history,1)
fprintf('%2d %10.9f %10.9f %10.9f % .6e % .6e\n', ...
history(k,1), history(k,2), history(k,3), history(k,4), history(k,5), history(k,6));
end
% Plot de f(y) no intervalo inicial
yy = linspace(0.1, 6, 500);
ff = arrayfun(f, yy);
figure;
plot(yy, ff, 'b-', 'LineWidth', 1.5); hold on;
plot(yc, f(yc), 'ro', 'MarkerFaceColor', 'r');
xlabel('y (m)');
ylabel('f(y)');
grid on;
title('Função f(y) = Q^2 T/(g A^3) - 1 e raiz encontrada');
yline(0,'k--');
xlim([0.1 5]);
- O script imprime uma tabela com as colunas: iteração,
, , , e erro absoluto . Também plota a função no intervalo (faixa 0{,}1 a 6 m no exemplo) e marca a raiz encontrada.
Passo 9
Dicas práticas e verificação (para a prova e para o MATLAB)
- Verifique sempre que
e tenham sinais opostos antes de começar. - Anote a quantidade de iterações calculada por
para estimar o esforço. - Se quiser acelerar a convergência em código, depois de algumas bisseções pode-se usar Newton com boa aproximação inicial; mas na prova a bisseção é suficiente e fácil de justificar.
- Ao rodar o script MATLAB acima, a tabela mostrará todas as iterações (no meu cálculo o método convergiu em cerca de 26 iterações e entregou
com precisão melhor que ).