Escolar Documentos
Profissional Documentos
Cultura Documentos
1. Usando aço reciclado, uma fábrica produz peças de aço tipo A que devem conter 4
quilos de cromo, 8 quilos de tungstênio e 7 quilos de carbono por tonelada de aço produzido.
O fabricante tem três fontes de aço reciclado:
Fonte 1: Cada tonelada contém 2 quilos de cromo, 8 quilos de tungstênio e 6 quilos de
carbono.
Fonte 2: Cada tonelada contém 3 quilos de cromo, 9 quilos de tungstênio e 6 quilos de
carbono.
Fonte 3: Cada tonelada contém 12 quilos de cromo, 6 quilos de tungstênio e 12 quilos de
carbono.
a) Sejam x, y e z a percentagem de aço reciclado utilizado das fontes 1, 2 e 3,
respectivamente, para cada tonelada de aço produzido. Encontre um sistema linear em x, y
e z cuja solução diz qual a percentagem que deve ser utilizada de cada fonte para atender às
exigências do produto final.
A = np.array([[2,3,12,4],[8,9,6,8],[6,6,12,7]],dtype = 'double')
n = len(A)
k=0
for k in range (0,n,1):
pivo = max(min(A[k:n,k]), max(A[k:n,k]), key=abs) #encontra o pivo da coluna k
loc = np.where(A[k:n,k]==pivo) #encontra a linha do pivô
loc = loc[0]
aux = np.copy(A[k,:])
if abs(A[k,k])<abs(pivo):
A[k,:]=A[loc[0]+k,:]
A[loc[0]+k,:]=aux
#esse for executa a eliminação
for j in range (k+1,n,1):
m = -A[j,k]/A[k,k]
A[j,:]=m*A[k,:]+A[j,:]
# print (A)
U = A[:,0:n]
b = A[:,-1]
n = len(U)-1
x = np.zeros(n+1)
x[n] = b[n]/U[n,n]
print("Resultado em porcentagem:")
print(x * 100)
Resultado em porcentagem:
[50%. 33.33333333% 16.66666667%]
A = np.array([[2,3,12],
[8,9,6],
[6,6,12]])
b = np.transpose(np.array([[4,8,7]]))
x = np.transpose(np.array([[0,0,0]]))
erro = 0.001
nmax = 20 #numero maximo de interações
#processamento
#montar matriz
linha,coluna = np.shape(A)
H = np.zeros((linha,coluna))
g = np.zeros((linha,1))
for i in range(linha):
H[i,:]=(-A[i,:])/(A[i,i])
H[i,i]=0
g[i,:]=b[i,:]/A[i,i]
er = abs(maxd)/abs(maxx1)
x = x1
k=k+1
errogeral = np.dot(A,x)-b
#saída
A solução é:
[[ -inf]
[-1.14048621e+308]
[-7.58552467e+307]]
o numero de interações é: 796
Os erros são
[[-inf]
[-inf]
[-inf]]
d) Ele converge? Quantas iterações são necessárias? Qual o vetor diferença da solução
dos dois métodos?
Não, ele não converge, logo, não é possível definir o número de interações necessárias.
e) Para esse sistema, qual método é o mais indicado para a solução. Baseie sua resposta
em exatidão do resultado e número de operações.
Pivotamento Parcial
f) Imagine que outra peça de aço (tipo B) necessite de 9,7 quilos de cromo, 12,9 de
tungstênio e 13,8 de carbono. Qual a porcentagem de material de cada uma das fontes seria
necessária?
%reset -f
import numpy as np
A = np.array([[2,3,12,9.7],[8,9,6,12.9],[6,6,12,13.8]],dtype = 'double')
n = len(A)
k=0
for k in range (0,n,1):
pivo = max(min(A[k:n,k]), max(A[k:n,k]), key=abs) #encontra o pivo da coluna k
loc = np.where(A[k:n,k]==pivo) #encontra a linha do pivô
loc = loc[0]
aux = np.copy(A[k,:])
if abs(A[k,k])<abs(pivo):
A[k,:]=A[loc[0]+k,:]
A[loc[0]+k,:]=aux
# print (A)
U = A[:,0:n]
b = A[:,-1]
n = len(U)-1
x = np.zeros(n+1)
x[n] = b[n]/U[n,n]
print("Resultado em porcentagem:")
print(x * 100)
Resultado em porcentagem:
[73.33333333% 38.88888889% 58.88888889%]
g) Para esse novo sistema, existe garantia de convergência para o método de Gauss-
Seidel?
Não, pois a diagonal principal irá ser a mesma da anterior que não funcionou, logo, não
será possível pelo método indicado.
A = np.array([[2,3,12,9.7],[8,9,6,12.9],[6,6,12,13.8]],dtype = 'double')
n = len(A)
k=0
for k in range (0,n,1):
pivo = max(min(A[k:n,k]), max(A[k:n,k]), key=abs) #encontra o pivo da coluna k
loc = np.where(A[k:n,k]==pivo) #encontra a linha do pivô
loc = loc[0]
aux = np.copy(A[k,:])
if abs(A[k,k])<abs(pivo):
A[k,:]=A[loc[0]+k,:]
A[loc[0]+k,:]=aux
# print (A)
U = A[:,0:n]
b = A[:,-1]
n = len(U)-1
x = np.zeros(n+1)
x[n] = b[n]/U[n,n]
import numpy as np
#métodos de Gauss - Jacobi
##entradas
A = np.array([[-1,0,-0.7071,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,-1,-0.7071,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0.7071,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,-1,0,-0.7071,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,-1,0,0,0.7071,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,-1,-0.7071,0,0,1,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0.7071,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,-1,0,-0.7071,0,0,0.9806,0.7071,0,0,0,0,0,0],
[0,0,0,0,0,0,0,-1,0,0,0.7071,0,1,0.1961,0.7071,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,-1,-0.7071,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0.7071,1,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,1,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,-0.9806,0,0,0,0.9806,0.7433,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,-0.1961,0,0,1,0.1961,0.669,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.7071,-1,0,0,0,1,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.7071,0,-1,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.7433,-1,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.669,0,-1],
[0,0,0,0,0,0,0,0,0,0,0.9806,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.1961,0,0,1],], dtype='double') # Define a matriz A
b = np.transpose(np.array([[0,0,0,0,0,0,0,0,0,0,0,0,0,0,8000,0,0,-5000,0,5000,866.25]]))
x = np.transpose(np.array([[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]))
erro = 0.0001
nmax = 200 #numero maximo de interações
#processamento
#montar matriz
linha,coluna = np.shape(A)
H = np.zeros((linha,coluna))
g = np.zeros((linha,1))
for i in range(linha):
H[i,:]=(-A[i,:])/(A[i,i])
H[i,i]=0
g[i,:]=b[i,:]/A[i,i]
er = abs(maxd)/abs(maxx1)
x = x1
k=k+1
errogeral = np.dot(A,x)-b
#saída
A solução é:
[[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]]
o numero de interações é: 2
Os erros são
[[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]
[nan]]
A = np.array([[-1,0,-0.7071,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,-1,-0.7071,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0.7071,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,-1,0,-0.7071,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,-1,0,0,0.7071,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,-1,-0.7071,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0.7071,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,-1,0,-0.7071,0,0,0.9806,0.7071,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,-1,0,0,0.7071,0,1,0.1961,0.7071,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,-1,-0.7071,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0.7071,1,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,1,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,-0.9806,0,0,0,0.9806,0.7433,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,-0.1961,0,0,1,0.1961,0.669,0,0,8000],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.7071,-1,0,0,0,1,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.7071,0,-1,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.7433,-1,0,-5000],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.669,0,-1,0],
[0,0,0,0,0,0,0,0,0,0,0.9806,0,0,0,0,0,0,0,0,0,0,5000],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.1961,0,0,1,866.25],], dtype='double') # Define a
matriz A
n = len(A)
k=0
for k in range (0,n,1):
pivo = max(min(A[k:n,k]), max(A[k:n,k]), key=abs) #encontra o pivo da coluna k
loc = np.where(A[k:n,k]==pivo) #encontra a linha do pivô
loc = loc[0]
aux = np.copy(A[k,:])
if abs(A[k,k])<abs(pivo):
A[k,:]=A[loc[0]+k,:]
A[loc[0]+k,:]=aux
# print (A)
U = A[:,0:n]
b = A[:,-1]
n = len(U)-1
x = np.zeros(n+1)
x[n] = b[n]/U[n,n]
Pivotamento parcial, umas vezes que a diagonal principal possui um número zero, não
sendo possível a aplicação do método de Gauss Jacobi e não tendo resultado real.