Resolução de Sistemas Lineares em Matlab
Resolução de Sistemas Lineares em Matlab
Brasil
Maio de 2017
Alexandre Marcondes
Brasil
Maio de 2017
Sumário
1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 SISTEMAS LINEARES . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1 Exercício L1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Exercício L2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3 Exercício L3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4 Exercício L4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3 SISTEMAS NÃO-LINEARES . . . . . . . . . . . . . . . . . . . . . . 20
3.1 Exercício NL1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2 Exercício NL2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3 Exercício NL3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3
1 Introdução
• Métodos diretos:
• Métodos iterativos:
interrompido. O número máximo de iterações foi definido como 50 para os códigos, porém
podem ser modificados sempre que necessário.
Os seguintes métodos foram implementados para a solução de sistemas não-lineares:
Para digitar um vetor linha ou coluna utiliza-se dos mesmos conceitos. Digitando-se [1 2
3] e [1;2;3], os seguintes vetores serão obtidos respectivamente:
h i
1
1 2 3 , 2
3
2 Sistemas Lineares
Entradas: Matriz
Resolução do Saída: Vetor
A, Vetor b, erro e
sistema solução (x)
estimativa inicial
2.1 Exercício L1
Descrição do exercício: Hoje é dia de S. Valentim. Dois rapazes pretendem
comprar um ramo de flores com rosas e tulipas, para oferecer as respecticas namoradas.
Considere x1 o número de rosas e x2 o número de tulipas de cada ramo. O primeiro dos
rapazes vai comprar o ramo na floricultura "Mil Pétalas"que cobra por cada rosa 2 reais e
por cada tulipa 2 reais, gastando 10 reais. O segundo decide comprar o ramo na floricultura
"Tudo em Flor"cobrando-lhe por cada rosa 2 reais e 3 reais por cada tulipa, ficando o
ramo por 13 reais. Quantas rosas e quantas tulipas foram compradas? Utilize os métodos
iterativos de Gauss-Seidel e Gauss Jacobi para identificar quantas rosas e quantas tulipas
foram compradas. Condicione o erro a 1. Inicie com nenhuma rosa e nenhuma tulipa.
Resolução:
Primeiramente, escreve-se o sistema de equações. Sabe-se que a soma dos valores
das rosas e tulipas no ramo deverá ser igual ao preço total do ramo. Assim, têm-se o
seguinte sistema de equações:
2x2 + 2x2 = 10
2x2 + 3x2 = 13
Reescreve-se o sistema de equações acima no formato Ax = b da seguinte forma:
2 2 x1 10
× =
2 3 x2 13
| {z } | {z } | {z }
A x b
>> jacobi
Resolução de um sistema linear do tipo Ax=b
Método iterativo de Gauss-Jacobi
Entre a matriz de coeficientes A do sistema: [2 2;2 3]
Entre com o vetor coluna b: [10;13]
Entre com o vetor coluna x0 (estimativa inicial): [0;0]
Entre com o erro que deseja-se obter: 1
A =
2 2
2 3
Capítulo 2. Sistemas Lineares 7
alpha =
1.000000000000000 0.666666666666667
Critério das linhas não obedecido. Possível divergência.
i = 1.000000, erro = 5.000000, x =5.000000 4.333333
i = 2.000000, erro = 4.333333, x =0.666667 1.000000
i = 3.000000, erro = 3.333333, x =4.000000 3.888889
i = 4.000000, erro = 2.888889, x =1.111111 1.666667
i = 5.000000, erro = 2.222222, x =3.333333 3.592593
i = 6.000000, erro = 1.925926, x =1.407407 2.111111
i = 7.000000, erro = 1.481481, x =2.888889 3.395062
i = 8.000000, erro = 1.283951, x =1.604938 2.407407
i = 9.000000, erro = 0.987654, x =2.592593 3.263374
Solução:
x =
2.592592592592593
3.263374485596708
Observa-se no código acima que ao atingir um erro menor àquele estipulado pelo
exercício, o que ocorre na nona iteração, o programa é interrompido e os valores de
x1 = 2, 596 e x2 = 3, 2634 são obtidos.
Utiliza-se também o método de Gauss-Seidel na resolução. Executa-se o programa,
os dados de entrada são inseridos, e por fim a seguinte tela é exibida:
>> seidel
Método iterativo de Gauss-Seidel
Resolução de um sistema linear do tipo Ax=b
Entre a matriz de coeficientes A do sistema: [2 2;2 3]
Entre com o vetor coluna b: [10;13]
Entre com o vetor coluna x0 (estimativa inicial): [0;0]
Entre com o erro que deseja-se obter: 1
A =
2 2
2 3
beta =
1.000000000000000 0.666666666666667
Critério de sassenfeld não obedecido. Possível divergência.
i = 1.000000, erro = 5.000000, x = 5.000000 1.000000
i = 2.000000, erro = 1.000000, x = 4.000000 1.666667
i = 3.000000, erro = 0.666667, x = 3.333333 2.111111
Capítulo 2. Sistemas Lineares 8
Solução:
x =
3.333333333333333
2.111111111111111
No método de Seidel, observa-se que o erro estipulado foi atingido de maneira mais rápida.
Após 3 iterações o erro já era menor que 1, e os valores de x obtidos foram: x1 = 3, 3333 e
x2 = 2, 11.
Observa-se que há uma tendência nos números de rosas e tulipas, porém não
pode-se afirmar o valor exato da quantidade de flores. Para se obter um valor exato neste
caso, utiliza-se o método direto da decomposição de Gauss com pivoteamento parcial. Ao
executar o programa deste método e inserir os dados de entrada, a seguinte tela é exibida:
>> gauss
Resolução de um sistema linear do tipo Ax=b
Decomposição de Gauss
Entre a matriz de coeficientes A do sistema: [2 2;2 3]
Entre com o vetor coluna b : [10;13]
A =
2 2
0 1
Solução:
x =
2 3
2.2 Exercício L2
Descrição do exercício: Um engenheiro de produção supervisiona a produção de
quatro tipos de computadores. Existem quatro espécies de recursos necessários à produção:
mão-de-obra, metais, plásticos e componentes eletrônicos. As quantidades destes recursos
necessárias para produzir estão apresentadas na Tabela 2. Considere um consumo diário
de 504 h de mão-de-obra, 1970 kg de metais, 970 kg de plásticos e 61 componentes.
Resolução:
Sabe-se que a quantidade total de recursos disponíveis por dia será igual a soma
de cada tipo de recurso necessário para a produção de cada tipo de computador. Assim,
pode-se escrever o seguinte sistema de equações que representa o sistema
Com o sistema Ax=b pode se resolver o sistema através dos diferentes métodos, utilizando
os códigos implementados computacionamente.
a) Método LU
O primeiro método utilizado é o método direto de fatoração LU com permutação
parcial de linhas, o qual encontra-se implementado no arquivo solverLU.m. Ao executar o
programa e entrar com os dados de entrada requisitados, o usuário obtém a seguinte tela:
análise e comparação. Pode-se concluir assim que poderão ser fabricados diariamente 10
computadores do tipo 1, 12 computadores do tipo 2, 18 computadores do tipo 3 e 15
computadores do tipo 4.
b) Métodos iterativos
Aqui são apresentados o método de Gauss-Seidel e também o método de Gauss-
Jacobi. O programa é executado, os dados de entrada são inseridos, e a tela a seguir é
exibida:
Observa-se nas linhas obtidas após a execução do programa que a matriz A é apresentada,
apresentando as permutações nas linhas realizadas antes das iterações, as quais buscam
reorganizar as linhas a fim de se obter o maior pivô de cada coluna. Observa-se também
que, após a exibição da matriz A, exibiu-se na tela também os valores de β do Critério de
Sassenfeld, os quais não foram satisfatórios. Como todos os valores β são maiores que 1, a
convergência da solução não é garantida.
Após isso, as iterações iniciam. Observa-se que após a sétima iteração o erro é
bastante alto e os valores de x afastam-se dos valores satisfatórios, que seriam aqueles
obtidos no método direto. Ao observar a divergência do método, optou-se por limitar o
programa a 7 iterações. Assim, conclui-se que o método de Gauss-Seidel diverge para este
sistema de equações e estas estimativas iniciais.
No método de Gauss-Jacobi, após a execução do programa e inserção dos dados de
entrada, a seguinte tela é exibida:
Observa-se que neste método também são exibidas a matriz A e os valores de α do critério
das linhas para o método de Gauss-Jacobi. Nota-se que três dos 4 valores de α estão acima
de 1, portanto não é garantida a convergência também para este método. Observa-se
também que após a quinta iteração o erro absoluto está crescendo acentuadamente e os
valores de x divergindo do esperado. Assim, conclui-se que nenhum dos dois métodos
iterativos apresentados convergem para esse sistema de equações.
2.3 Exercício L3
Descrição do exercício: Encontre a corrente elétrica que percorre cada ramo do
circuito apresentado na Figura 3.
10
3
I3
8 5
15V 1 3 2 2
I1 I2
Resolução:
Aplica-se a lei das malhas em cada uma das malhas do circuito, obtendo-se o
seguinte sistema de equações:
>> L*Lt
ans =
11.0000 -3.0000 -8.0000
-3.0000 10.0000 -5.0000
-8.0000 -5.0000 23.0000
Capítulo 2. Sistemas Lineares 15
>> seidel
Método iterativo de Gauss-Seidel
Resolução de um sistema linear do tipo Ax=b
Entre a matriz de coeficientes A do sistema: [11 -3 -8;-3 10 -5;-8 -5 23]
Entre com o vetor coluna b: [15;0;0]
Entre com o vetor coluna x0 (estimativa inicial): [1;1;1]
Entre com o erro que deseja-se obter: [0.01]
A =
11 -3 -8
-3 10 -5
-8 -5 23
beta =
1.000000000000000 0.800000000000000 0.521739130434783
Critério de sassenfeld não obedecido. Possível divergência.
i = 1.000000, erro = 1.363636, x = 2.363636 1.209091 1.084980
i = 2.000000, erro = 0.118829, x = 2.482465 1.287230 1.143299
i = 3.000000, erro = 0.063724, x = 2.546189 1.335506 1.175958
i = 4.000000, erro = 0.036919, x = 2.583108 1.362911 1.194757
i = 5.000000, erro = 0.021146, x = 2.604254 1.378655 1.205535
i = 6.000000, erro = 0.012132, x = 2.616386 1.387683 1.211718
i = 7.000000, erro = 0.006959, x = 2.623345 1.392862 1.215264
Solução:
x =
2.623344556259136
1.392862135844042
1.215263788230143
2.4 Exercício L4
Descrição do exercício: Uma fábrica de automóveis produz 3 modelos: A, B e
C, cada um deles passa por 3 setores diferentes de montagem: setor de motores, lataria e
Capítulo 2. Sistemas Lineares 16
Tabela 3 – Quantidade de horas em cada setor que cada carro precisa para ser produzido.
Resolução:
Sabe-se que a quantidade de horas que cada automóvel gasta em cada setor deve
ser igual a quantidade de horas que cada setor pode trabalhar semanalmente, aproveitando
assim todas as horas disponíveis de cada setor. Assim, sendo x1 , x2 e x3 os modelos de
automóveis A, B e C respectivamente, pode se escrever o seguinte sistema de equações
para o problema:
3x1 + 2x2 + 4x3 = 80
A =
3.0000 2.0000 4.0000
0 1.0000 1.0000
0 0 -0.3333
Solução:
xr =
10.0000 5.0000 10.0000
Observa-se que os mesmos valores foram obtidos na fatoração LU. Opta-se também
por resolver o sistema utilizando os dois métodos iterativos para fins de comparação.
Estipulam-se valores iniciais de 7 unidades para cada tipo de automóvel e erro de 0,01.
Abaixo é apresentada a tela de execução do programa do método de Gauss-Jacobi para
este problema:
Observa-se que os valores de β estão todos acima de 1, então o critério de Sassenfeld não
garante a convergência do método para este sistema. Observa-se nas iterações que, após 50
iterações, o erro somente aumenta e os valores divergem totalmente dos valores esperados.
Conclui-se assim que os métodos iterativos de Gauss-Jacobi e Gauss-Seidel não
convergem para este sistema e as condições iniciais dadas. Por isso, recomendam-se os
métodos diretos para este problema.
20
3 Sistemas Não-Lineares
Entradas: Funções
Resolução do Saída: Vetor
F, matriz J, erro e
sistema solução (x)
estimativa inicial
(T14 + 0, 06823T1 ) − (T24 + 0, 05848T2 ) = 0, 01509
(T14 + 0, 05848T1 ) − (2T24 + 0, 11696T2 ) = 0
Usando como aproximação inicial a solução T (0) = (0, 3; 0, 3) para um erro de 0,0001,
determine suas respectivas temperaturas utilizando o Método de Newton e o Método de
Newton modificado.
Resolução:
Verifica-se que o sistema possui duas equações. O programa desenvolvido para a a
resolução através do método de Newton exige a entrada da matriz Jacobiana, das funções
F, das aproximações iniciais e do erro estimado que deseja-se obter. As funções F podem
Capítulo 3. Sistemas Não-Lineares 21
>> newtonnl
Primeiramente, digite o número de equações que compõem o sistema: 2
Digite a equação de cada linha.\n
Por favor, digitar x1 como x(1), x2 como x(2) e assim por diante.
Digite a função F1: (x(1)^4+0.06823*x(1))-(x(2)^4+0.05848*x(2))-0.01509
Digite a função F2: (x(1)^4+0.05848*x(1))-(2*x(2)^4+0.11696*x(2))
Entrada da matriz Jacobiana
Derivada parcial de F1 em relação a x1: 4*x(1)^3+0.06823
Derivada parcial de F1 em relação a x2: -4*x(2)^3-0.05848
Derivada parcial de F2 em relação a x1: 4*x(1)^3+0.05848
Derivada parcial de F2 em relação a x2: -8*x(2)^3-0.11696
Digite o vetor coluna x (estimativa inicial): [0.3;0.3]
Digite o erro que deseja-se obter: 0.0001
i = 1.000000, erro = 0.080551, x =0.292935 0.219449
i = 2.000000, erro = 0.028954, x =0.292786 0.190495
i = 3.000000, erro = 0.002573, x =0.292786 0.187922
i = 4.000000, erro = 0.000017, x =0.292786 0.187905
Solução:
x =
0.292786027791104
0.187904724941656
Observa-se que após a quarta iteração, o método de Newton já atinge um erro menor a
0,0001. Assim, conclui-se que com o método de Newtom o valor de T1 é igual a 0,29279 e
o valor de T2 é 0,1879.
O mesmo será realizado para o método de Newton modificado, sendo que nele
a matriz Jacobiana será calculada em x(0) e será mantida nas demais iterações. Assim,
ao executar o programa do método de Newton modificado e inserir os dados de entrada,
novamente considerando que T1 = x1 e T2 = x2 , a seguinte tela é exibida:
Capítulo 3. Sistemas Não-Lineares 22
>> newtonmod
Primeiramente, digite o número de equações que compõem o sistema: 2
Digite a equação de cada linha.\n
Por favor, digitar x1 como x(1), x2 como x(2) e assim por diante.
Digite a função F1: (x(1)^4+0.06823*x(1))-(x(2)^4+0.05848*x(2))-0.01509
Digite a função F2: (x(1)^4+0.05848*x(1))-(2*x(2)^4+0.11696*x(2))
Entrada da matriz Jacobiana
Derivada parcial de F1 em relação a x1: 4*x(1)^3+0.06823
Derivada parcial de F1 em relação a x2: -4*x(2)^3-0.05848
Derivada parcial de F2 em relação a x1: 4*x(1)^3+0.05848
Derivada parcial de F2 em relação a x2: -8*x(2)^3-0.11696
Digite o vetor coluna x (estimativa inicial): [0.3;0.3]
Digite o erro que deseja-se obter: 0.0001
i = 1.000000, erro = 0.080551, x =0.292935 0.219449
i = 2.000000, erro = 0.017523, x =0.292792 0.201926
i = 3.000000, erro = 0.007423, x =0.292786 0.194503
i = 4.000000, erro = 0.003426, x =0.292786 0.191076
i = 5.000000, erro = 0.001633, x =0.292786 0.189444
i = 6.000000, erro = 0.000789, x =0.292786 0.188655
i = 7.000000, erro = 0.000384, x =0.292786 0.188271
i = 8.000000, erro = 0.000187, x =0.292786 0.188084
i = 9.000000, erro = 0.000091, x =0.292786 0.187992
Solução:
x =
0.292786027791105
0.187992303451877
de erro relativo.
t 1 2
C(t) 27,5702 17,6567
Fonte: Exercício exposto em aula.
Resolução:
Para a resolução deste exercício não serão realizadas somente as duas primeiras
iterações, mas serão realizadas iterações até atingir um erro de 0,0001. Para a resolução
deste exercício primeiramente deve-se escrever um sistema de equações a partir da equação
dada e dados da Tabela 4. Substituindo os valores de concentração no tempo 1 e no tempo
2 na equação, além de substituir o próprio tempo na equação, as duas equações abaixo
são obtidas:
70eβ + 20eω = 27, 5702
70e2β + 20e2ω = 17, 6567
A partir das funções acima a matriz Jacobiana pode ser calculada. A matriz Jacobiana é
dada por:
β ω
70e 20e
J =
140e2β 40e2ω
Com as funções F e a matriz J, o sistema pode ser escrito no formato J(x(k) )∆x = −F (x(k) )
e pode ser solucionado. Ao executar o programa do método de Newton e inserir os dados
de entrada requisitados,considerando que T1 = x1 e T2 = x2 , a seguinte tela é exibida:
>> newtonnl
Primeiramente, digite o número de equações que compõem o sistema: 2
Digite a equação de cada linha.\n
Por favor, digitar x1 como x(1), x2 como x(2) e assim por diante.
Digite a função F1: 70*exp(x(1))+20*exp(x(2))-27.5702
Digite a função F2: 70*exp(2*x(1))+20*exp(2*x(2))-17.6567
Entrada da matriz Jacobiana
Derivada parcial de F1 em relação a x1: 70*exp(x(1))
Derivada parcial de F1 em relação a x2: 20*exp(x(2))
Derivada parcial de F2 em relação a x1: 140*exp(2*x(1))
Derivada parcial de F2 em relação a x2: 40*exp(2*x(2))
Capítulo 3. Sistemas Não-Lineares 24
Após as três primeiras iterações o método de Newton já alcança o erro desejado. Observa-se
que o valor de β aproxima-se com várias casas decimais de -2 e o valor de ω aproxima-se
de -0,1.
Para o método de Newton modificado a jacobiana é calculada nos pontos x(0) e
é mantida nas demais iterações. Após a execução do programa e inserção dos dados de
entrada, a seguinte tela é exibida:
>> newtonmod
Primeiramente, digite o número de equações que compõem o sistema: 2
Digite a equação de cada linha.\n
Por favor, digitar x1 como x(1), x2 como x(2) e assim por diante.
Digite a função F1: 70*exp(x(1))+20*exp(x(2))-27.5702
Digite a função F2: 70*exp(2*x(1))+20*exp(2*x(2))-17.6567
Entrada da matriz Jacobiana
Derivada parcial de F1 em relação a x1: 70*exp(x(1))
Derivada parcial de F1 em relação a x2: 20*exp(x(2))
Derivada parcial de F2 em relação a x1: 140*exp(2*x(1))
Derivada parcial de F2 em relação a x2: 40*exp(2*x(2))
Digite o vetor coluna x (estimativa inicial): [-1.9;-0.15]
Digite o erro que deseja-se obter: 0.0001
i = 1.000000, erro = 0.098732, x =-1.998732 -0.096559
i = 2.000000, erro = 0.003843, x =-1.999522 -0.100402
i = 3.000000, erro = 0.000486, x =-2.000008 -0.099948
i = 4.000000, erro = 0.000058, x =-1.999996 -0.100006
Solução:
x =
-1.999996481586924
-0.100006286300118
No método de Newton modificado o erro foi atingido após a terceira iteração. Observa-se
Capítulo 3. Sistemas Não-Lineares 25
que o valor de β obtido foi de -1,99999 que pode ser aproximado a -2, já o valor de α
obtido foi de -0,1, valores que são praticamente identicos àqueles obtidos pelo método de
Newton.
A partir das funções acima a matriz Jacobiana pode ser calculada. A matriz Jacobiana é
dada por:
16 − 2sen(x 2 − 2x 1 ) sen(x 2 − 2x 1 )
J =
−2, 25cos(−x2 − 3x1 ) 16 − 0, 75cos(−x2 − 3x1 )
Com as funções F e a matriz J, o sistema pode ser escrito no formato J(x(k) )∆x = −F (x(k) )
e pode ser solucionado. Ao executar o programa do método de Newton e inserir os dados
de entrada requisitados a seguinte tela é exibida:
>> newtonnl
Primeiramente, digite o número de equações que compõem o sistema: 2
Digite a equação de cada linha.\n
Por favor, digitar x1 como x(1), x2 como x(2) e assim por diante.
Digite a função F1: 16*x(1)-cos(x(2)-2*x(1))
Digite a função F2: 16*x(2)+0.75*sin(-x(2)-3*x(1))
Capítulo 3. Sistemas Não-Lineares 26
Após a execução do programa verifica-se que após a terceira iteração o erro já é inferior a
0,0001 no método de Newton para sistemas não-lineares. Os valores encontrados para as
substâncias x1 e x2 são 0,0620866 e 0,009099 respectivamente.
Para o método de Newton modificado a jacobiana é calculada nos pontos x(0) e
é mantida nas demais iterações. Após a execução do programa e inserção dos dados de
entrada, a seguinte tela é exibida:
>> newtonmod
Primeiramente, digite o número de equações que compõem o sistema: 2
Digite a equação de cada linha.\n
Por favor, digitar x1 como x(1), x2 como x(2) e assim por diante.
Digite a função F1: 16*x(1)-cos(x(2)-2*x(1))
Digite a função F2: 16*x(2)+0.75*sin(-x(2)-3*x(1))
Entrada da matriz Jacobiana
Derivada parcial de F1 em relação a x1: 16-2*sin(x(2)-2*x(1))
Derivada parcial de F1 em relação a x2: sin(x(2)-2*x(1))
Derivada parcial de F2 em relação a x1: -2.25*cos(-x(2)-3*x(1))
Derivada parcial de F2 em relação a x2: 16-0.75*cos(-x(2)-3*x(1))
Digite o vetor coluna x (estimativa inicial): [0.1;0.01]
Digite o erro que deseja-se obter: 0.0001
i = 1.000000, erro = 0.037743, x =0.062257 0.009210
i = 2.000000, erro = 0.000169, x =0.062088 0.009100
i = 3.000000, erro = 0.000001, x =0.062087 0.009099
Solução:
Capítulo 3. Sistemas Não-Lineares 27
x =
0.062086648404250
0.009099333313048