0% encontró este documento útil (0 votos)
169 vistas19 páginas

Práctica de Métodos Numéricos en Metalurgia

El documento presenta una práctica de metalurgia para estudiantes de la Universidad Nacional de Trujillo. La práctica involucra resolver un sistema de ecuaciones lineales utilizando el método de Gauss para determinar las proporciones de tres lingotes que se usarán para formar un nuevo lingote con cantidades específicas de oro, plata y cobre. También incluye un programa en Octave que implementa el método de Gauss para resolver el sistema. Finalmente, deduce las proporciones de cada lingote original y las cantidades que se usarán a partir de ellas.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
169 vistas19 páginas

Práctica de Métodos Numéricos en Metalurgia

El documento presenta una práctica de metalurgia para estudiantes de la Universidad Nacional de Trujillo. La práctica involucra resolver un sistema de ecuaciones lineales utilizando el método de Gauss para determinar las proporciones de tres lingotes que se usarán para formar un nuevo lingote con cantidades específicas de oro, plata y cobre. También incluye un programa en Octave que implementa el método de Gauss para resolver el sistema. Finalmente, deduce las proporciones de cada lingote original y las cantidades que se usarán a partir de ellas.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

UNIVERSIDAD NACIONAL

DE TRUJILLO

TEMA:
PRACTICA CALIFICADA
FINAL DE LA IIUNIDAD

2020
INTEGRANTES:

 Rosales Ventura Wiston Alexander


 Alfaro Aguilar Bruno Nicolás
 Díaz 𝑴𝒐𝒔𝒄𝒐𝒍 𝑵𝒊𝒄𝒐𝒍𝒂𝒔 Alejandro
 Victorio 𝑨𝒏𝒕𝒊𝒄𝒐𝒏𝒂 𝑨𝒎𝒆𝒓𝒊𝒄𝒐
 Rodríguez Castillo Santiago Manuel
 Polo Acosta Kevin Hugo

ING: METALÚRGICA
CURSO: MÉTODOS NUMÉRICOS
DOCENTE: GLORIA POÉMAPE ROJAS
CICLO: IV
PRACTICA METALURGICA
1) Resolver por Gauss:
Se tienen tres lingotes compuestos del siguiente modo:
El 1. ° de 20 g de oro, 30 g de plata y 40 g de cobre.
El 2. ° de 30 g de oro, 40 g de plata y 50 g de cobre.
El 3. ° de 40 g de oro, 50 g de plata y 90 g de cobre.

Se pide qué peso habrá de tomarse de cada uno de los lingotes anteriores para
formar un nuevo lingote de 34 g de oro, 46 de plata y 67 g de cobre.

Identificamos datos:
x es el % del primer lingote que usaremos para el nuevo lingote.
y es el % del segundo lingote que usaremos para el nuevo lingote.
z es el % del tercer lingote que usaremos para el nuevo lingote
Planteamos las ecuaciones:
Para el oro del nuevo lingote → 20 x+30 y+40 z=34
Para la plata del nuevo lingote → 30 x+40 y+50 z=46
Para el cobre del nuevo lingote → 40 x+50 y+90 z=67
Sistema de ecuaciones:
20𝑥 + 30𝑦 + 40𝑧 = 34
(30𝑥 + 40𝑦 + 50𝑧 = 46)
40𝑥 + 50𝑦 + 90𝑧 = 67
Matriz:
20 + 30 + 40 = 34
[30 + 40 + 50 = 46]
40 + 50 + 90 = 67

3
Si multiplicamos la primera por 3/2 y le restamos la segunda → F 2 = 2 F1−F2

𝑥 𝑦 𝑧
[20 + 30 + 40 = 34]
0 5 + 10 = 5
40 + 50 + 90 = 67

Si multiplicamos la primera por 2 y le restamos la tercera → F ' 3=2 F1−F3

𝑥 𝑦 𝑧
[20 + 30 + 40 = 34]
0 5 + 10 = 5
0 10 − 10 = 1
Si multiplicamos la segunda por 2 y le restamos la tercera → F ' 3=2 F2−F3

𝑥 𝑦 𝑧
[20 + 30 + 40 = 34]
0 5 + 10 = 5
0 0 30 = 9
Formando sistema ecuaciones:

20𝑥 + 30𝑦 + 40𝑧 = 34


( 0 + 5𝑦 + 10𝑧 = 5)
0 + 0 + 30𝑧 = 9

Fila 3:
9
z= 30 =0.3

Fila 2:
5 y+3=5
2
y= 5=0.4

Fila 1:
20 x+12+12=34
10
x= 20 =0.5

Tenemos:

Lingote N°1= 0.5 %


Lingote N°2= 0.4 %
Lingote N°3= 0.3 %

Deducimos el peso de lingote nuevo:


Primer lingote: Peso es 90g, pero utilizaremos el 50% de 90 g = 45 g
Segundo lingote: Peso es 120g, pero utilizaremos el 40% de 120 g = 48 g
Tercer lingote: Peso es de 180 g; pero utilizaremos 30% de 180G g , = 54g
PROGRAMA REALIZADO EN OCTAVE

%METODO DE GAUSS
A=[20 30 40;

30 40 50;

40 50 90];

b=[34 46 67]';

%permite obtener el tamaño de la matriz A

[n,m]=size(A);

C=[A,b];

% la matriz C, representa la forma de la matriz aumentada [Ab]

fprintf('\nLa Matriz C, que corresponte a la matriz aumentada [Ab] es = \n');

disp(C); % la funcion disp nos permite imprimir una variable en el espacio de trabajo

if n==m

for k=1:(n-1)%instruccion iterativa que permite repetir pasos un numero

%determinado de veces

fprintf('\n ETAPA %g=\n\n',k)

fprintf('\nLa matriz correspondiente a esta etapa antes del proceso:\n')

disp(C)

fprintf('\nLos Multiplicadores correpondientes a esta etapa son:\n')

for i=(k+1):n

m(i,k)=C(i,k)/C(k,k); %formula para hallar los multiplicadores

fprintf('\nm(%g,%g)=',i,k)

disp(m(i,k));

for j=k:(n+1)

C(i,j)= C(i,j) - m(i,k)*C(k,j); %formula de la nueva fila

end

end

fprintf('\nLa matriz correspondiente a esta etapa despues del proceso:\n')

disp(C)
end

for i=n:-1:1

suma=0;

for p=(i+1):n

suma = suma + C(i,p)*X(p);

end

X(i)=(C(i,n+1)-suma)/C(i,i);

%formula de la susticion regresiva y solucion de las variables

end

else %funcion asignada del if, en caso de que este sea falso

fprintf('\nERROR: La matriz NO es cuadrada\n');

end

fprintf('\n\n\nSOLUCIÓN:\n');

fprintf('\n\nLa matriz Ab final:\n');

disp(C)

fprintf('\n\nLa solucion de X1 hasta Xn es:\n');

%a continuacion de utiliza una instruccion for, para mostrar el usuario,

%los resultados de una manera mas ordena

for i=1:n

Xi=X(1,i);

fprintf('\nX%g=',i)

disp(Xi);

end

********************* FIN **********************


De ello calculamos el porcentaje en peso de cada uno de los lingotes para formar uno nuevo:
Lingote N°1= 0.5 %
Lingote N°2= 0.4 %
Lingote N°3= 0.3 %

Deducimos el peso de lingote nuevo:


Primer lingote: Peso es 90g, pero utilizaremos el 50% de 90 g = 45 g
Segundo lingote: Peso es 120g, pero utilizaremos el 40% de 120 g = 48 g
Tercer lingote: Peso es de 180 g ; pero utilizaremos 30% de 180G g , = 54%
PROGRAMA REALIZADO EN OCTAVE
%METODO DE GAUSS
A=[20 30 40;

30 40 50;

40 50 90];

b=[34 46 67]';

%permite obtener el tamaño de la matriz A

[n,m]=size(A);

C=[A,b];

% la matriz C, representa la forma de la matriz aumentada [Ab]

fprintf('\nLa Matriz C, que corresponte a la matriz aumentada [Ab] es = \n');

disp(C); % la funcion disp nos permite imprimir una variable en el espacio de trabajo

if n==m

for k=1:(n-1)%instruccion iterativa que permite repetir pasos un numero

%determinado de veces

fprintf('\n ETAPA %g=\n\n',k)

fprintf('\nLa matriz correspondiente a esta etapa antes del proceso:\n')

disp(C)

fprintf('\nLos Multiplicadores correpondientes a esta etapa son:\n')

for i=(k+1):n

m(i,k)=C(i,k)/C(k,k); %formula para hallar los multiplicadores

fprintf('\nm(%g,%g)=',i,k)

disp(m(i,k));

for j=k:(n+1)

C(i,j)= C(i,j) - m(i,k)*C(k,j); %formula de la nueva fila

end

end

fprintf('\nLa matriz correspondiente a esta etapa despues del proceso:\n')

disp(C)

end
for i=n:-1:1

suma=0;

for p=(i+1):n

suma = suma + C(i,p)*X(p);

end

X(i)=(C(i,n+1)-suma)/C(i,i);

%formula de la susticion regresiva y solucion de las variables

end

else %funcion asignada del if, en caso de que este sea falso

fprintf('\nERROR: La matriz NO es cuadrada\n');

end

fprintf('\n\n\nSOLUCIÓN:\n');

fprintf('\n\nLa matriz Ab final:\n');

disp(C)

fprintf('\n\nLa solucion de X1 hasta Xn es:\n');

%a continuacion de utiliza una instruccion for, para mostrar el usuario,

%los resultados de una manera mas ordena

for i=1:n

Xi=X(1,i);

fprintf('\nX%g=',i)

disp(Xi);

end

********************* FIN **********************

De ello calculamos el porcentaje en peso de cada uno de los lingotes para formar uno nuevo:
Lingote N°1= 0.5 %
Lingote N°2= 0.4 %
Lingote N°3= 0.3 %
Deducimos el peso de lingote nuevo:
Primer lingote: Peso es 90g, pero utilizaremos el 50% de 90 g = 45 g
Segundo lingote: Peso es 120g, pero utilizaremos el 40% de 120 g = 48 g
Tercer lingote: Peso es de 180 g ; pero utilizaremos 30% de 180G g , = 54%
2) En el estudio de la constante de velocidad k de una reacción química a diferentes
temperaturas se obtuvieron los datos:

𝑇(°𝐾) 293 300 320 340 360 380 400


−5 −5 −3
𝑘 8.53𝑥10 19.1𝑥10 1.56𝑥10 0.01 0.0522 0.2284 0.8631

Calcule el factor de frecuencia z y la energía de activación E, asumiendo que los


datos experimentales siguen la ley de Arrhenius:

𝐸
𝑘 = 𝑧𝑒 −1.98𝑇

Aplicando logaritmo neperiano:

−𝐸
ln(𝐾) = ln (𝑧𝑒 1.98𝑇 )

−𝐸
ln(𝐾) = ln 𝑧 + ln (𝑒 1.98𝑇 )

−𝐸 1
ln(𝐾) = ln 𝑧 + ( )
1.98 𝑇

Sea
 𝑦 = ln 𝐾
1
 𝑥=𝑇
−𝐸
 𝑚=( )
1.98
 𝑏 = ln(𝑧)

Por lo tanto, se tiene:


𝑦 = 𝑚𝑥 + 𝑏

Por mínimos cuadrados:

𝑛 ∑ 𝑥𝑦 − ∑ 𝑥 ∑ 𝑦 ∑𝑦 − 𝑚∑𝑥
𝒎= 2 2
, 𝒃=
𝑛 ∑ 𝑥 − (∑ 𝑥) 𝑛

Luego:

𝐸 = −1.98 𝒎

𝑧 = 𝑒𝒃
3) En el siguiente ejercicio Resolver usando Jacobi y encontrar una solución con 5
cifras signitivas:

Primero hacemos dominante a la matriz usando el método de Gauss, con el


siguiente programa en C++:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include<iostream>
using namespace std;

void allocMatrix(double ***matrix, int fil, int col);


void deallocMatrix(double **matrix, int fil );
void leerDatos( double **A, int fil, int col, double B[] );
void gaussEliminacion( double **A, int fil, int col, double v[] );
void intercambiarFilas( double **A, int col, int k, int max );
void imprimirMatriz( double **A, int fil, int col, double v[] );
void imprimirSolucion( double v[], int fil );

int main()
{
cout << "\n ";
cout << "\t\t\t\t\t UNIVERSIDAD NACIONAL DE TRUJILLO \n";
cout << "\t\t\t\t\t\tINGENIERIA METALURGICA \n";
cout << "\t\t\t METODO DE GAUSS \n";

cout << "\n ";

int fil, col;

printf( "\n\tNumero de variables: " );


scanf( "%d", &fil );

col = fil;

double** A = NULL;
allocMatrix(&A, fil, col);

double B[fil];
leerDatos( A, fil, col, B );
imprimirMatriz( A, fil, col, B );
gaussEliminacion( A, fil, col, B );

deallocMatrix( A, fil );

return 0;
}

void allocMatrix(double ***matrix, int fil, int col )


{
*matrix = (double **)malloc(sizeof(double *) * fil);
for( int i = 0; i < col; i++){
*(*matrix + i) = (double *)malloc(sizeof(double) * col);
}
}

void deallocMatrix(double **matrix, int fil )


{
int i = 0;
for(i = 0; i < fil; i++){
free(matrix[i]);
}
free(matrix);
}

void leerDatos( double **A, int fil, int col, double B[] )
{
printf( "\n\tIntroduzca coeficientes de la ecuacion:\n" );

for( int i = 0; i < fil; i++ ){


printf( "\n\tFila %d:\n", i + 1 );
for( int j = 0; j < col; j++ ) {
printf( "\tColumna %d: ", j + 1 );
scanf( "%lf", &A[i][j] );
}
}

printf( "\n\tIntroduzca igualdad de la ecuacion:\n" );


for( int i = 0; i < fil; i++ ){
printf( "\tFila %d: ", i + 1 );
scanf( "%lf", &B[i] );
}
}

void gaussEliminacion( double **A, int fil, int col, double B[] )
{
int max;
int N = fil;
double factor, temp;

for( int k = 0; k < N; k++ ){


max = k;
for( int i = k + 1; i < N; i++ )
if( abs( A[i][k] ) > abs( A[max][k] ) )
max = i;

intercambiarFilas( A, col, k, max );


temp = B[k];
B[k] = B[max];
B[max] = temp;

for( int i = k + 1; i < N; i++ ) {


factor = A[i][k] / A[k][k];
B[i] -= factor * B[k];

for( int j = k; j < N; j++ )


A[i][j] -= factor * A[k][j];

}
}
imprimirMatriz( A, fil, col, B );

double solucion[fil];
double suma;

for( int i = 0; i < fil; i++ )


solucion[i] = 0.00;

for( int i = N - 1; i >= 0; i-- ){

suma = 0.0;

for( int j = i + 1; j < N; j++ )


suma += A[i][j] * solucion[j];

solucion[i] = (B[i] - suma) / A[i][i];


}
imprimirSolucion( solucion, fil );

void intercambiarFilas( double **M, int col, int k, int max )


{
double temp[col];

for( int i = k; i < col; i++ ) {


temp[i] = M[k][i];
M[k][i] = M[max][i];
M[max][i] = temp[i];
}
}

void imprimirMatriz( double **M, int fil, int col, double v[] )
{
printf( "\n\tMatriz:\n" );

for( int i = 0; i < fil; i++ ){


for( int j = 0; j < col; j++ ){
printf( "\t%.3lf ", M[i][j] );
}
printf( "\t| %.3lf\n", v[i] );
}
printf( "\n\t" );
}

void imprimirSolucion( double v[], int fil )


{
printf( "\n\tSolucion: " );

for( int i = 0; i < fil; i++ )


printf( "\n\tX%d: %.3lf", i + 1, v[i] );

printf( "\n" );
}

MATRIZ DOMINANTE
Una vez obtenido la matriz dominante, la ingresamos en el programa de Jacobi
realizado en C++ con un tolerancia (error de parada) de 0.001:

#include <stdio.h>
#include <stdlib.h>

int dim;
float norma(float vector1[],float vector2[]);
float suma_jacobi(float Matriz[], float vector[], int componente);

int main(){
int i,j,iteraciones=0;
float error,epsilon;
printf("\n METODO DE JACOBI DE RESOLUCION DE SISTEMAS Ax=b
\n");

printf("Dimension de la matriz A: ");


scanf("%d",&dim);
float A[dim][dim],b[dim],x[dim],x_prev[dim],aux[dim];

printf("\n Elementos de la matriz A: \n");


for(i=0;i<dim;i++) for(j=0;j<dim;j++){
printf("A(%d,%d)=",i,j); scanf("%f",&A[i][j]);
}

printf("\n Elementos del vector b: \n");


for(i=0;i<dim;i++){
printf("b(%d)=",i); scanf("%f",&b[i]);
}

printf("\n Error de parada: \n");


printf("E=",i); scanf("%f",&epsilon);
error=epsilon+1;

//cominezo algoritmo de Jacobi


//Error se mide como la norma del vector diferenceia entre la iteracion i e i+1
printf("\n Valor inicail de la iteracion: \n");
for(i=0;i<dim;i++){
printf("x0(%d)=",i); scanf("%f",&x_prev[i]);
}
while (error>epsilon){
for(i=0;i<dim;i++){
for(j=0;j<dim;j++) aux[j]=A[i][j];
x[i]=(1/A[i][i])*(b[i]-suma_jacobi(aux,x_prev,i));
}
error=norma(x,x_prev);
printf("\n\n Iteracion %d: \n",iteraciones);
for(i=0;i<dim;i++){
x_prev[i]=x[i];
printf("X(%d)=%f \n",i,x[i]);
}

iteraciones++;
if (iteraciones==10) error=epsilon-1;
}

printf("Solucion del sistema\n");


printf("Numero de iteraciones: %d \n", iteraciones);
for(i=0;i<dim;i++){
printf("x(%d)=%f\n",i,x[i]);
}
return 1;
}

float norma(float vector1[],float vector2[]){


float aux=0;
int i;
for(i=0;i<dim;i++){
aux=aux+(vector1[i]-vector2[i])*(vector1[i]-vector2[i]);
}
return aux;
}

float suma_jacobi(float Matriz[], float vector[], int componente)


{
float aux=0;
int i;
for(i=0;i<dim;i++){
if (componente!=i){
aux=aux+Matriz[i]*vector[i];
}
}
return aux;
}
4) Resolver para una tol=0.001.
Para la obtención del butadieno a partir del etanol en fase vapor, se propone el siguiente
mecanismo de reacción.

Calcule las composiciones en el equilibrio a 400°C y 1 atm, si las constantes de


equilibrio son 5.97, 0.27 y 2.8, para las reacciones (1), (2) y (3), respectivamente.
Base de cálculo: 1 mol de etanol.
Si

Entonces, en el equilibrio se tendrá

De acuerdo con la ley de acción de masas, se tiene

donde ∆𝑛𝑖 = número de productos de moles de los reactantes (en la reacción i)


Considerar:
∆𝑛1 = 2 − 1 = 1
∆𝑛2 = 2 − 1 = 1
∆𝑛3 = 2 − 2 = 0
𝑃 = 1 𝑎𝑡𝑚
SOLUCIÓN:

(𝑥 + 𝑧)(𝑥 − 𝑧) = 5.47(1 − 𝑥 − 𝑦)(1 + 𝑥 + 𝑦) … … … … … … … 𝐹1


(𝑦 + 𝑧)(𝑦) = 0.27(1 − 𝑥 − 𝑦)(1 + 𝑥 + 𝑦) … … … … … … … … … 𝐹2
(𝑥 + 𝑧)(𝑧) = 2.8(𝑥 − 𝑧)(𝑦 − 𝑧) … … … … … … … … … … … … … … . 𝐹3
Encontramos las derivadas:

𝑑𝐹1
= 13.94𝑥 + 11.94𝑦
𝑑(𝑥)

𝑑𝐹2
= 2.54𝑦 + 2 + 0.54𝑥
𝑑(𝑦)

𝑑𝐹3
= 3.8𝑥 − 3.62 + 2.8𝑦
𝑑(𝑧)

-------------------I

---------------------------II

----------------------------- III

Considerando: x1= X, x2=Y, x3=Z


Dividiendo I entre II se obtiene:

5.97
𝑍 = √𝑋 2 − (1 − 𝑋 − 𝑌)
0.27

Simplificando las ecuaciones I. II Y III.

6.97𝑋 2 − 𝑍 2 + 11.94𝑋𝑌 + 5.97𝑌 2 − 5.97 = 0

1.27𝑌 2 + 0.27𝑋 2 + 𝑌𝑍 + 0.54𝑋𝑌 − 0.27 = 0

3.8𝑋𝑍 − 1.8𝑍 2 − 2.8𝑋𝑌 + 2.8𝑌𝑍 = 0

Remplazando el valor de Z.

2
5.97
6.97𝑋 2 − (√𝑋 2 − (1 − 𝑋 − 𝑌) ) + 11.94𝑋𝑌 + 5.97𝑌 2 − 5.97 = 0 − − − − − − − 𝐴
0.27

5.97
1.27𝑌 2 + 0.27𝑋 2 + 𝑌 (√𝑋 2 − (1 − 𝑋 − 𝑌) ) + 0.54𝑋𝑌 − 0.27 = 0 − − − − − − − 𝐵
0.27

2
5.97 5.97 5.97
3.8𝑋√𝑋 2 − (1 − 𝑋 − 𝑌) − 1.8√𝑋 2 − (1 − 𝑋 − 𝑌) − 2.8𝑋𝑌 + 2.8𝑌√𝑋 2 − (1 − 𝑋 − 𝑌)
0.27 0.27 0.27
= 0. − − −𝐶

Sumando A+B
5.97
5.97𝑋 2 + (1 − 𝑋 − 𝑌) + 11.94𝑋𝑌 + 5.97𝑌 2 − 5.97 = 0 (A)
0.27

5.97
1.27𝑌 2 + 0.27𝑋 2 + 𝑌 (√𝑋 2 − (1 − 𝑋 − 𝑌) ) + 0.54𝑋𝑌 − 0.27 = 0 (B)
0.27

Se obtiene:

Línea de color celeste la ecuación D:

5.97 5.97
6.24𝑋 2 + 7.24 ∗ 𝑌 2 + (1 − 𝑋 − 𝑌) 0.27 + 𝑌 (√𝑋 2 − (1 − 𝑋 − 𝑌) 0.27) + 12.48𝑋𝑌 − 6.24 = 0 (D)
Línea de color morado la ecuación C:

5.97 5.97 5.97


3.8𝑋√𝑋 2 − (1 − 𝑋 − 𝑌) − 1.8 (𝑋 2 − (1 − 𝑋 − 𝑌) ) − 2.8𝑋𝑌 + 2.8𝑌√𝑋 2 − (1 − 𝑋 − 𝑌) =0 (C)
0.27 0.27 0.27

También podría gustarte