O sistema abaixo foi gerado em um sistema de duas equações algébricas não lineares.
Considerando a estimativa inicial como:
e
, pede-se
a) a solução do problema e
b) escreva um programa para a solução em Octave.
a) a solução do problema e
b) escreva um programa para a solução em Octave.
Passo 1
Beleza, então o enunciado diz que a gente tem um sistema não-linear
com chute inicial
. O conteúdo aqui é Método de Newton para sistemas de equações não-lineares, e a gente vai precisar:
- definir o vetor de funções
; - montar a matriz Jacobiana
(derivadas parciais); - aplicar a iteração de Newton até convergir;
- finalmente, escrever o código em Octave.
Passo 2
Teoria rápida do Método de Newton em 2D:
Definimos
$$
F(x,y)=
,
J(x,y)=
.
ç ã é
- J(x_k,y_k)^{-1},F(x_k,y_k).
$$
Passo 3
Vamos calcular a primeira iteração, partindo de
(x0,y0)=(1,0) :
- Avalia
.F(1,0)=(2cdot1^2+1cdot0-8,;5cdot1+7cdot0+3)^T =(-6,;8)^T - Avalia
.J(1,0)=4cdot1+0 & 15&7=4&15&7 - Resolve
, ou seja$$J(1,0),De 4&15&7De =De .(x1,y1)=(1,0) - (-1.0616,,1.7397) approx (2.0616,,-1.7397) \Delta = J^{-1}F\approxç ã .$$ - Atualiza
Passo 4
Repetindo esse processo mais algumas vezes (até a norma de
De ficar abaixo de uma tolerância, tipo
10^-6 ), a sequência converge para
que é exatamente
(tfrac83,-tfrac73) .
Passo 5
Agora, o programinha em Octave (chama de
newton2d.m
):function [x,y] = newton2d(x0,y0,tol,maxit)
for k = 1:maxit
% vetor F
F = [2*x0^2 + x0*y0 - 8;
5*x0 + 7*y0 + 3];
% Jacobiana J
J = [4*x0 + y0, x0;
5, 7 ];
% passo de Newton
delta = J \ F; % resolve J * delta = F
x0 = x0 - delta(1);
y0 = y0 - delta(2);
if norm(delta) < tol
break;
end
end
x = x0;
y = y0;
end
% Para usar:
% [x,y] = newton2d(1,0,1e-6,20);
% fprintf('x=%.7f, y=%.7f\n', x, y);
Resposta
A solução numérica é
e o programa em Octave está acima para você rodar e conferir.