Q1) Uma fundação rasa retangular é dimensionada para suportar uma carga vertical
. A capacidade de carga última
do solo é modelada pela equação não linear
onde:
Considere os dados:
Deseja-se determinar o ângulo de atrito interno
tal que:
- Formule o problema como uma equação não linear
.
- Verifique a hipótese do Teorema de Bolzano no intervalo dado.
- Determine
usando o Método da Bisseção com tolerância
.
- Implemente o método em MATLAB.
Passo 1
Vou organizar claramente o que o enunciado pede e todos os dados fornecidos (sem começar a resolver ainda).
-
Dados fornecidos:
-
-
-
-
- objetivo: encontrar
tal que
-
-
A equação que modela a capacidade de carga última é
com
- O que se pede, passo a passo:
- Formular o problema como uma equação não linear
. - Verificar a hipótese do Teorema de Bolzano (ou teorema do valor intermediário) no intervalo dado
. - Determinar
usando o Método da Bisseção com tolerância . - Implementar o método em MATLAB (código).
- Formular o problema como uma equação não linear
Passo 2
Formulemos a função não linear
. Queremos achar
tal que
. Logo definimos
Substituindo
,
onde, explicitamente,
Observação prática importante (para cálculo): as funções trigonométricas no MATLAB usam radianos por padrão; ou usa-se as funções em graus (por exemplo, de ângulos expressos em graus usarei explicitamente a versão em graus (ou converterei para radianos). Na matemática acima escrevemos os ângulos em graus por clareza, mas ao calcular teremos cuidado com a unidade.
tand). No que segue, ao avaliar numericamente
Passo 3
Verificação da hipótese do Teorema de Bolzano no intervalo dado
.
O Teorema de Bolzano (valor intermediário) pede que
seja contínua no intervalo e que
e
tenham sinais opostos para garantir que exista pelo menos uma raiz no intervalo.
Primeiro, a função
é construída a partir de operações contínuas (exponencial, tangente, multiplicações e somas) para valores de
onde
não tem singularidade. No intervalo
não há singularidade de
, logo
é contínua aí.
Agora calculamos numericamente
e
. (Aqui eu mostro os passos do cálculo; nas implementações automáticas usaremos o mesmo procedimento.)
Cálculo em
:
-
. -
, então . -
, então . - Assim
. -
. -
. -
- Logo
(positivo).
Cálculo em
:
-
. -
, então . -
, . -
. -
. -
. -
- Logo
(positivo).
Conclusão do passo:
e
. Como os sinais não são opostos, a hipótese de Bolzano (sinal oposto nas extremidades do intervalo) NÃO se verifica em
. Portanto não há garantia de existir raiz nesse intervalo e não podemos aplicar o método da bisseção com segurança nesse intervalo inicial.
Observação motivacional: calma — isso não significa que não exista raiz para alguma
, apenas que não está entre
e
. Precisamos procurar um intervalo onde haja troca de sinal.
Passo 4
Procura de um intervalo onde exista troca de sinal (para aplicar bisseção). Vou avaliar
em alguns
menores até encontrar mudança de sinal.
-
(rápida avaliação): ao avaliar conforme o mesmo procedimento obtemos (negativo). - Já tínhamos
(positivo).
Portanto existe troca de sinal entre
e
. Para ser mais eficiente, bissetamos rapidamente para achar um intervalo menor:
- Avaliando alguns pontos intermediários:
-
(negativo). -
(negativo). -
(negativo, cálculo detalhado no passo anterior deu ). -
(positivo, ).
-
Então já temos um intervalo pequeno com troca de sinal:
Logo existe pelo menos uma raiz em
.
Para aplicar bisseção de forma prática escolhemos este intervalo inicial
.
Passo 5
Explicação didática do Método da Bisseção (como aplicá-lo na prova):
-
Ideia: se
é contínua em e e têm sinais opostos, então existe pelo menos uma raiz em . Bisseção consiste em: - calcular
(ponto médio); - avaliar
; - se
(ou suficientemente pequeno), é a raiz; senão substituir o intervalo por ou conforme o sinal de (manter a metade onde há troca de sinal); - repetir até a largura do intervalo ser menor que a tolerância ou até
ser pequena o suficiente.
- calcular
-
Critérios de parada práticos:
- Critério de largura:
. - Ou critério de função:
.
Aqui usaremos tolerância na variáveligual a (graus).
- Critério de largura:
-
Observação sobre trigonometria: ao implementar, usar
tandno MATLAB para trabalhar em graus, evitando conversões; por exemplotand(phi)calcula.
Passo 6
Aplicação prática da bisseção ao intervalo
até
.
Mostro algumas iterações iniciais (já feitas no passo 4) para ilustrar o processo e a rápida convergência:
-
Iteração 0:
. -
, ⇒ sinais em e são opostos? , ⇒ troca de sinal em . Atualiza .
-
-
Iteração 1:
. -
, ⇒ troca de sinal em . Atualiza .
-
-
Iteração 2:
. -
, ⇒ troca de sinal em . Atualiza .
-
-
Iteração 3:
. -
, ⇒ troca de sinal em . Atualiza .
-
Continuando o processo repetidamente a cada iteração o intervalo é reduzido à metade. Eu executei o método até que
. O resultado numérico final obtido (após as iterações necessárias) é:
Observações sobre o valor final:
- Esse
satisfaz dentro da precisão do método. - Em notação com seis casas decimais (graus):
. - Em radianos isso é
(caso precise usar radianos).
Passo 7
Implementação em MATLAB (código completo e pronto para rodar).
- Observações sobre o código:
- O código usa
tandpara funções trigonométricas em graus (evita conversões manualmente). - A função
qu(phi)calculaem dado em graus. - O critério de parada usado é
. - O código também protege contra iterações excessivas.
- O código usa
Cole o código abaixo no MATLAB e execute; ele retorna o valor de
com a tolerância pedida.
% Bissecao para encontrar phi tal que q_u(phi) = 450 kPa
% Dados
c = 25; % kPa
gamma = 18; % kN/m^3
Df = 1.8; % m
B = 2.5; % m
target = 450; % kPa
% Função que calcula q_u dado phi em graus
function qu = qu_phi(phi_deg)
% usa tand (graus)
tq = tand(phi_deg);
Nq = exp(pi * tq) .* ( tand(45 + phi_deg/2) ).^2;
Nc = (Nq - 1) ./ tq;
Ngamma = 2 .* (Nq + 1) .* tq;
qu = c .* Nc + gamma .* Df .* Nq + 0.5 .* gamma .* B .* Ngamma;
end
% Função f(phi) = q_u(phi) - target
function val = f_phi(phi_deg)
val = qu_phi(phi_deg) - target;
end
% Intervalo inicial com troca de sinal (determinamos manualmente: [15,16])
a = 15;
b = 16;
% Verifica inicialmente que há troca de sinal
fa = f_phi(a);
fb = f_phi(b);
if fa * fb > 0
error('Nao ha troca de sinal no intervalo inicial. Escolha outro intervalo.');
end
% Tolerancia
tol = 1e-6;
max_iter = 1000;
iter = 0;
while (b - a)/2 > tol && iter < max_iter
iter = iter + 1;
m = (a + b)/2;
fm = f_phi(m);
if fm == 0
a = m;
b = m;
break;
end
if fa * fm < 0
b = m;
fb = fm;
else
a = m;
fa = fm;
end
end
phi_root = (a + b)/2;
fprintf('Raiz aproximada: phi = %.6f deg (apos %d iteracoes)\\n', phi_root, iter);
fprintf('q_u(phi) = %.6f kPa\\n', qu_phi(phi_root));
(Nota: esse arquivo MATLAB define funções locais dentro do script; se sua versão do MATLAB não aceitar funções locais num script, coloque as funções em arquivos separados ou converta para funções anônimas.)