Você está na página 1de 31

Aplicacionais para Ciências e

Engenharia

Aula 10

TP10 Aplicacionais para Ciências e Engenharia 1


Sumário

• Resolução de sistemas de equações


– Equações lineares
– Equações não lineares
• Máximos e Mínimos de Funções

TP10 Aplicacionais para Ciências e Engenharia 2


Resolução de Sistemas de Equações
Algébricas Lineares

TP10 Aplicacionais para Ciências e Engenharia 3


Definição
• Sistemas de equações lineares são um conjunto de
equações lineares, com m equações e n incógnitas
• A solução de um sistema linear é a solução de todas
as equações lineares
• Exemplo de um sistema de equações lineares:
+ +…+ =
+ +…+ =

+ +…+ =
- coeficientes; - variáveis; - constantes
TP10 Aplicacionais para Ciências e Engenharia 4
Métodos de resolução
• No Matlab podemos resolver sistemas de
equações lineares usando:
– Álgebra matricial
 Formas simples
o Mínimos quadrados
Métodos diretos (eliminação Gaussiana, fatorização)
o Métodos indiretos
− Funções específicas do Matlab

TP10 Aplicacionais para Ciências e Engenharia 5


Representação matricial
• Sistema com m equações e n variáveis

Nota: O sistema pode não ter solução, ter uma solução


ou ter um nº infinito de soluções
TP10 Aplicacionais para Ciências e Engenharia 6
Como determinar as soluções?
• Um método simples é usar a inversa de uma
matriz
– Condições de aplicabilidade:
• m=n;
• A tem de ter inversa (A-1)
– Solução:

– Em Matlab:
x=inv(A)*b

TP10 Aplicacionais para Ciências e Engenharia 7


Como determinar as soluções?

• Outro método simples é a divisão à esquerda


(operador \ )
– Se m=n e A-1 existe, x tem o mesmo valor de x=A-1b
– Se m=n e A-1 não existe, é mostrado um erro e a
solução apresentada no Matlab não é confiável
– Se m≠n, x é a solução obtida por minimização do
erro quadrático médio

– Em Matlab:
x=A\b
TP10 Aplicacionais para Ciências e Engenharia 8
Utilização da matriz inversa
O sistema de equações lineares

pode ser escrito na forma matricial AX=B, onde:

Nota: A criação de A, X e B é geralmente feita ordenando as equações, como


no exemplo acima, de forma a evitar erros (soluções erradas). Mesmo assim
não está isenta desses erros se a ordenação for mal feita.
Podemos sempre definir equações simbólicas, tal como nos aparecem, e obter
A e B usando a função equationsToMatrix
TP10 Aplicacionais para Ciências e Engenharia 9
Criação de A, X e B
Exemplo:
syms x y z
eqn1 = 0.2*y + 0.125*x + 0.4*z == 2.3;
eqn2 = 0.375*x -4.8 +0.5*y == -0.6*z;
eqn3 = 0.5*x + 0.3*y - 2.9 == 0;
[A,B] = equationsToMatrix([eqn1, eqn2, eqn3], [x, y, z])
double(A)
double(B)
% simplificando
A = ans =
[1/8, 1/5, 2/5] 0.1250 0.2000 0.4000
[3/8, 1/2, 3/5] 0.3750 0.5000 0.6000
[1/2, 3/10, 0] 0.5000 0.3000 0

B = ans =
23/10 2.3000
24/5 4.8000
29/10 2.9000
TP10 Aplicacionais para Ciências e Engenharia 10
Utilização da matriz inversa
• O que temos de fazer?
– Calcular o determinante de A.
– Se det(A)=0, A-1 não existe, logo X não pode ser calculado
A=[0.125 0.2 0.4;0.375 0.5 0.6;0.5 0.3 0]
A =
0.1250 0.2000 0.4000 B
0.3750 0.5000 0.6000 B =
0.5000 0.3000 0 2.3000
det(A) 4.8000
ans = 2.9000
-0.0175 % não é zero
inv(A) X=inv(A)*B
ans = X =
10.2857 -6.8571 4.5714 4.0000
-17.1429 11.4286 -4.2857 3.0000
7.8571 -3.5714 0.7143 3.0000

Soluções: x=4, y=3, z=3


TP10 Aplicacionais para Ciências e Engenharia 11
Utilização da matriz inversa
• O que acontece se uma linha (ou coluna) for
linearmente dependente de outra?
A=[0.125 0.2 0.4;0.375 0.5 0.6;0.5 rank(A) % 3 linhas lin. indep.
0.3 0] ans =
A1=A; 3
A1(:,1)=-2*A(:,2) % primeira coluna rank(A1) % 2 linhas lin. indep.
linearmente dependente da segunda ans =
A = 2
0.1250 0.2000 0.4000 det(A1)
0.3750 0.5000 0.6000 ans =
0.5000 0.3000 0 0
inv(A1)
A1 = Warning: Matrix is singular to
-0.4000 0.2000 0.4000 working precision.
-1.0000 0.5000 0.6000 ans =
Uma matriz
-0.6000 0.3000 0 Inf Inf Inf
singular é uma
Inf Inf Inf
matriz quadrada
Inf Inf Inf
não invertível
TP10 Aplicacionais para Ciências e Engenharia 12
Utilização da divisão à esquerda
• Com det(A)≠0 o resultado obtido é o mesmo
de x=A-1b
A=[0.125 0.2 0.4;0.375 0.5 0.6;0.5 0.3 0]
B=[2.3;4.8;2.9]
X=A\B

A =
0.1250 0.2000 0.4000
0.3750 0.5000 0.6000
0.5000 0.3000 0
B =
2.3000
4.8000
2.9000
X =
4.0000
3.0000
3.0000

TP10 Aplicacionais para Ciências e Engenharia 13


Utilização da divisão à esquerda
• Com det(A)=0, o que acontece?
A=[0.125 0.2 0.4;0.375 0.5 0.6;0.5 A1=A;
0.3 0] A1(:,1)=-2*A(:,2)
B=[2.3;4.8;2.9] A1 =
-0.4000 0.2000 0.4000
A = -1.0000 0.5000 0.6000
-0.6000 0.3000 0
0.1250 0.2000 0.4000
0.3750 0.5000 0.6000 det(A1)
0.5000 0.3000 0 ans =
0

B = X1=A1\B
Warning: Matrix is singular to
2.3000 working precision.
4.8000 X1 =
2.9000 Inf
Inf
-0.0556 % o valor de z calculado
(fará sentido?)
TP10 Aplicacionais para Ciências e Engenharia 14
Utilização da divisão à esquerda
• Com m≠n, a solução é obtida por minimização
do erro quadrático médio
% m=2 e n=3 (sem linha 3)
A23=[0.125 0.2 0.4;0.375 0.5 0.6]
B23=[2.3;4.8]
X23=A23\B23

X23 = % m=3 e n=2 (sem coluna 3)


A32=[0.125 0.2;0.375 0.5;0.5 0.3]
0 B32=[2.3;4.8;2.9]
6.7500 X32=A32\B32
2.3750
X32 =

-0.3429
10.1429

TP10 Aplicacionais para Ciências e Engenharia 15


Fatorização (ou decomposição) LU
• Se for possível efetuar a decomposição LU* da matriz A, então
o sistema Ax = b pode ser resolvido através de dois sistemas
triangulares, um superior e um inferior, da seguinte forma:

• A decomposição LU pode ser feita no Matlab usando a função


lu:

• Podemos em seguida resolver o sistema Ax = b fazendo:

*A utilização deste método é computacionalmente vantajosa em problemas para


os quais a matriz A é constante e apenas a matriz b se vai alterando (a
factorização e a resolução ficam independentizadas)
TP10 Aplicacionais para Ciências e Engenharia 16
Fatorização (ou decomposição) LU
• Exemplo (pág.11):
A=[0.125 0.2 0.4;0.375 0.5 0.6;0.5 U =
0.3 0] 0.5000 0.3000 0
B=[2.3;4.8;2.9] 0 0.2750 0.6000
A = 0 0 0.1273
0.1250 0.2000 0.4000 Y=L\B
0.3750 0.5000 0.6000
0.5000 0.3000 0 Y =
B = 2.9000
2.3000 2.6250
4.8000 0.3818
2.9000
X=U\Y
[L U]=lu(A)
L = X =
4.0000
0.2500 0.4545 1.0000 3.0000
0.7500 1.0000 0 3.0000
1.0000 0 0

TP10 Aplicacionais para Ciências e Engenharia 17


A função linsolve
linsolve: resolve o sistema linear AX=B usando
diferentes métodos consoante m=n (usa LU) ou m≠n
Nota: Pode ser usada em todos os exemplos anteriores
com resultados idênticos.
A=[0.125 0.2 0.4;0.375 0.5 0.6;0.5
0.3 0]
B=[2.3;4.8;2.9] linsolve(A,B)

A = ans =
0.1250 0.2000 0.4000
0.3750 0.5000 0.6000 4.0000
0.5000 0.3000 0 3.0000
3.0000
B =
2.3000
4.8000
2.9000

TP10 Aplicacionais para Ciências e Engenharia 18


Resolução de Sistemas de Equações
Algébricas não Lineares

TP10 Aplicacionais para Ciências e Engenharia 19


Equação não linear (uma variável)
• Neste caso o objetivo é encontrar a raiz de:

• O cálculo da raiz pode ser feito usando a função fzero


através de uma aproximação inicial x0

– A função fzero fornece apenas um zero: aquele que está


mais próximo da aproximação inicial
– Se houver mais do que um zero é necessário usar a função
fzero para cada um deles, com as correspondentes
aproximações iniciais
• Um gráfico ajuda a verificar a posição dos zeros, caso
estas sejam valores reais
TP10 Aplicacionais para Ciências e Engenharia 20
Equação não linear (uma variável)
Exemplo com uma função quadrática utilizando um
function handle:
5
2
y=x -4
4
r1=fzero(@(x)x^2-4,-3) raízes

r1 = 2

-2 1

0
r2=fzero(@(x)x^2-4,3)
-1

r2 = -2

-3
2
-4
-3 -2 -1 0 1 2 3

TP10 Aplicacionais para Ciências e Engenharia 21


Equação não linear (uma variável)
A função humps (uma função de teste disponível no
Matlab) apresenta um zero próximo de x=-0.2 e outro
próximo de x=1.3.
• Testando com estes valores iniciais:
Função Humps
100
z1=fzero('humps',-0.2)
z1 = 80
-0.131618018099606
60
humps(z1)
ans =
40
8.881784197001252e-16
20
[z2,valor]=fzero('humps',1.3)
X -0.1281 X 1.299
z2 = Y 0.0847 Y 0.01223
0
1.299549682584822
valor =
0 -20
-0.5 0 0.5 1 1.5

TP10 Aplicacionais para Ciências e Engenharia 22


A função solve
– solve: Resolve equações (que não estejam na
forma AX=B) e sistemas de equações lineares e
não lineares, utilizando símbolos
– Exemplo1:
syms a b c x
eqn=a*x^2+b*x+c==0 % Define Eq.

eqn =

a*x^2 + b*x + c == 0

S=solve(eqn) % ou solve(eqn,x)

S =

-(b + (b^2 - 4*a*c)^(1/2))/(2*a)


-(b - (b^2 - 4*a*c)^(1/2))/(2*a)

TP10 Aplicacionais para Ciências e Engenharia 23


A função solve
– Exemplo 2:
syms x
eqn = 0.25*x.^3+0.75*x.^2-1.5*x-2==0

eqn =

x^3/4 + (3*x^2)/4 - (3*x)/2 - 2 == 0

S = solve(eqn,x)
S =

-4
-1
2

Nota: Este exemplo não é mais do que o cálculo das raízes de um polinómio.
Como vimos na TP5, as raízes de um polinómio podem ser calculadas com a
função roots.

TP10 Aplicacionais para Ciências e Engenharia 24


A função solve
– A função solve usa métodos numéricos em casos
especiais
syms x
eqn = sin(x) == x^2 - 1;

S = solve(eqn,x)
Warning: Unable to solve symbolically. Returning a numeric solution
using vpasolve.
> In solve (line 304)

S =

-0.63673265080528201088799090383828

TP10 Aplicacionais para Ciências e Engenharia 25


Resolução de sistemas não lineares
A figura representa o seguinte sistema de equações não
linear:
syms x y
eqn1=x^2+2*y^2==16;
eqn2=x^2-y^2==1;
fimplicit([eqn1 eqn2])
4
axis square
hold on 3
S=solve([eqn1 eqn2],[x y]);
2
plot(S.x,S.y,'*k')
Sx=S.x 1
Sy=S.y
0

Sx = Sy = -1

-2
-6^(1/2) 5^(1/2)
6^(1/2) -5^(1/2) -3
-6^(1/2) -5^(1/2) -4
6^(1/2) 5^(1/2)
-5 0 5

TP10 Aplicacionais para Ciências e Engenharia 26


Resolução de sistemas não lineares
– O exercício anterior também pode ser resolvido usando
a função fsolve
• Esta função está disponível na Optimization Toolbox
(Não é preciso instalar. Trata-se apenas de uma ilustração de uma nova função)
• Exige a parametrização das equações numa função e uma aproximação
inicial das soluções
fun=@funcsolv;
x0=[-2 2; -2 -2; 2 2;2 -2];
% Coordenadas de partida estimadas gráfico
for i=1:4
raizes(i,:)=fsolve(fun,x0(i,:));
end

disp(raizes) function f=funcsolv(x)


-2.4495 2.2361 % Função para teste do fsolve
-2.4495 -2.2361 % Ficheiro funcsolv.m
2.4495 2.2361 f(1)=x(1)^2+2*x(2)^2-16;
2.4495 -2.2361 f(2)=x(1)^2-x(2)^2-1;

TP10 Aplicacionais para Ciências e Engenharia 27


Máximos e Mínimos de Funções

TP10 Aplicacionais para Ciências e Engenharia 28


Máximos e mínimos de funções
• Analiticamente determinam-se os pontos onde a
derivada da função é nula e verifica-se que não
estamos num ponto de estacionaridade
– Em muitos casos não é possível (viável) determinar os
pontos de derivada nula
Nota: Nestes casos é necessário recorrer a métodos numéricos
para determinar os extremos da função
• O Matlab tem recursos para calcular um mínimo local
– O máximo é calculado usando os mesmos recursos através
do valor mínimo de -f(x)

TP10 Aplicacionais para Ciências e Engenharia 29


A função fminbnd
Função Humps

– A função fminbnd permite determinar o


100

80

mínimo em funções unidimensionais (a 60

uma variável apenas) 40

• A função humps apresenta: 20


X -0.1281 X 1.299

– Um máximo próximo de x=0.3


Y 0.0847 Y 0.01223
0

– Um mínimo local próximo de x=0.6 -20


-0.5 0 0.5 1 1.5

[xmin,valor]=fminbnd('humps',0.5,0.8) % Procura mínimo entre 0.5 e 0.8


xmin =
0.637008211963619
valor = [xmin, valor]=fminbnd('-humps(x)',0.2, 0.4)
11.252754125877694 xmin =
0.300364137900245
valor =
-96.501407243870503
Cálculo do máximo maximo=-valor
maximo =
96.501407243870503

TP10 Aplicacionais para Ciências e Engenharia 30


A função fminsearch
– A função fminsearch permite encontrar o mínimo de
funções multi-dimensionais
• Exemplo ilustrativo com a função de Rosenbrock (banana)

format long
f=@(x)100*(x(2)-x(1).^2).^2+(1-x(1)).^2
fmin=fminsearch(f,[0,0])
fxmin=f(fmin)
f =
function_handle with value:
@(x)100*(x(2)-x(1).^2).^2+(1-x(1)).^2
fmin =
1.000004385898617 1.000010640991648
fxmin =
3.686176915175907e-10

% mesmo resultado com:


[xmin,fxmin]=fminsearch(f,[0,0])

TP10 Aplicacionais para Ciências e Engenharia 31

Você também pode gostar