14
Instituto Politécnico Nacional Escuela Superior de Ingeniería Mecánica y Eléctrica Departamento de Ingeniería en Control y Automatización Análisis numérico Profesor: Sixto Berrocal José Antonio Alumno: Jiménez Torres Marco Antonio

Gauss

Embed Size (px)

Citation preview

Page 1: Gauss

Instituto Politécnico Nacional

Escuela Superior de Ingeniería Mecánica y Eléctrica

Departamento de Ingeniería en Control y Automatización

Análisis numérico

Profesor: Sixto Berrocal José Antonio

Alumno: Jiménez Torres Marco Antonio

Page 2: Gauss

Instituto Politécnico Nacional

Escuela Superior de Ingeniería Mecánica y Eléctrica

Departamento de Ingeniería en Control y Automatización

Practica No. 2

CALIFICACION

Introducción:

Page 3: Gauss

En un sistema de ecuaciones algebraicas las incógnitas son valores numéricos,

mientras que en una ecuación diferencial las incógnitas son funciones o

distribuciones de un cierto conjunto definido de antemano. Una solución de dicho

sistema es por tanto, un valor o una función que substituida en las ecuaciones del

sistema hace que éstas se cumplan automáticamente sin que se llegue a

una contradicción. En otras palabras el valor que reemplazamos en las incógnitas

debe hacer cumplir la igualdad del sistema.

Eliminación Gaussiana.

Se manejan las ecuaciones para eliminar una incógnita de una ecuación.El resultado de este paso de eliminación es una sola ecuación con una incógnita.

Por consiguiente, esta ecuación se puede resolver directamente y el resultado se sustituye hacia atrás en las ecuaciones originales para encontrar la incógnita restante.

La eliminación gaussiana es de los métodos más sencillos y el algoritmo que se

usa para determinarlo es:

1. Determine la primer columna (a la izquierda) no cero.

2. Si el primer elemento de la columna es cero, intercámbielo por un

renglón que no tenga cero.

3. Obtenga ceros abajo del elemento delantero sumando múltiplos

adecuados a los renglones debajo de el.

4. Cubra el renglón y la columna de trabajo y repita el proceso comenzando

en el paso 1. Al término del ciclo entre el paso 1 al 4 (es decir cuando se

han barrido todos los renglones), la matriz deberá tener forma de escalón.

5. Comenzando con el ultimo renglón no cero avance hacia arriba para que

en cada renglón tenga un 1 delantero y arriba de el queden sólo ceros. Para

ello deberá sumar múltiplos adecuados del renglón a los renglones

correspondiente.

Es importante observar que en el método de eliminación Gaussiana:

Los pasos del 1 a 4 aplicados repetidamente escalonan la matriz; el paso 5

aplicado repetidamente reduce la matriz. En el paso 2, si el elemento no es cero

Page 4: Gauss

no se realiza intercambio.

Desarrollo:

Basándonos en la programación estructurada realizaremos la práctica No.2

1. Aplicar eliminación gaussiana al siguiente circuito.

Dónde:

R1=10Ω

R2=3 Ω

R3=20 Ω

R4=5 Ω

R5=7 Ω

Aplicando la ley de

Kirchhoff de tensiones (LKV) se obtiene por la malla uno y dos las siguientes

ecuaciones:

M1

-2v + V1 + V3 + V4 = 0

R1* I1 + R3*I3 + R4*I1 = 2v

(R4 + R1)*I1 + R3*I3 = 2v

15*I1 + 20*I3 = 2v

M2

V2 - V3 + V4 = 0 R2*I2 - R3*I3 + R5*I2 = 0 (R2 + R5)*I2 - R3*I3 = 0

8I2 -20*I3 = 0

Y por la ley de Kirchhoff de corrientes tenemos I1 - I2 = I3

Dándonos así un sistema de ecuaciones de tres incógnitas.

Aunque existen muchos métodos para resolver el sistema

usaremos la eliminación gaussiana y nos apoyaremos en un

programa en lenguaje c.

15*I1 + 20*I3 = 2v8I2 -20*I3 = 0

I1 - I2 = I3

Page 5: Gauss

#include<stdio.h>

#include<stdlib.h>

#define t 100

int i,j,k,n;float a[t][t+1],x[t],suma;

void pidedatos()

printf("Este Programa resulve sistemas de ecuaciones con 100 incognitas.");

printf("\nNumero de Incognitas: ");

scanf("%d",&n);

for(i=0;i<=n-1;i++)

for(j=0;j<=n;j++)

printf("\nA[%d][%d] = ",i,j);

scanf("%f",&a[i][j]);

printf("\n\n");

void gauss()

for(i=0;i<=n-1;i++)

for(j=n;j>=0;j--)

a[i][j]=a[i][j]/a[i][i];

for(k=i+1;k<=n-1;k++)

for(j=n;j>=0;j--)

a[k][j]=a[k][j]-a[k][i]*a[i][j];

void sustitucion()

for(i=n-1;i>=0;i--)

Page 6: Gauss

suma=0;

for(j=0;j<=n-1;j++)

if(j!=i)

suma=suma+a[i][j]*x[j];

x[i]=a[i][n]-suma;

void imprime()

for(i=0;i<=n-1;i++)

printf("\nX[%d] = %f",i,x[i]);

printf("\n\n");

int main()

int op;

do

system("cls");

pidedatos();

gauss();

sustitucion();

imprime();

printf("\n\nQuieres volver a intentarlo? 1.Si 0.No R = ");

scanf("%f",&op);

while(op>=1);

printf("\n\n");

system("pause");

return 0;

Page 7: Gauss

Como podemos ver es un programa muy sencillo, el cual su única función es realizar la eliminación gaussiana un número indefinido de veces hasta que el usuario lo decida. Pero gracias a su practicidad y su completo número de incógnitas lo hacen muy útil para ahorrar trabajo.

El uso de este programa es muy sencillo, ya que nos pregunta por el número de incógnitas que tenemos en nuestro sistema y después nos pregunta qué valor ira en cada espacio de la matriz si bien le falta un control en caso de error y no muestra la matriz como generalmente se encuentra en papel, resulta muy fácil su uso y sus respuestas son en cuestión de segundos, una gran herramienta a la hora de cálculos rápidos.

Los valores que proporciona el programa son:

I1 = 0.092308 A I2 = 0.061538 A I3 = 0.038769 A

Ahora solo nos falta corroborar si los datos son ciertos y con un simulador de circuitos en este caso usaremos uno sencillo “livewire”.

Una vez comprobadas las corrientes podemos decir que el programa que calcula sistemas de ecuaciones por eliminación gaussiana funciona.

Page 8: Gauss

2. Aplicar eliminación gaussiana al siguiente circuito

Dónde:

Z1 = 2.98 +0.26i Ω Z2 = 6.89 + 1.21i Ω Z3 = 8 Ω Z4 = 5.79 + 1.55i Ω Z5 = 8.80 + 1.87i Ω

Aplicando la ley de Kirchhoff de tensiones (LKV) se obtiene por la malla uno y dos

las siguientes ecuaciones:

M1

I1*Z1 + I3*Z3 + I1*Z4 = 127

(8.77 + 1.81i) * I1 +8I2 = 127

M2

I2*Z2 + I2*Z5 - I3*Z3 =0

(15.69 + 3.08i) * I2 - 8I2 = 0

Y por la ley de Kirchhoff de corrientes tenemos I1 - I2 = I3

Dándonos así un sistema de ecuaciones de tres incógnitas.

Resolver sistemas de ecuaciones con numero complejos es un poco más complicado hacerlo a papel por eso haremos uso de herramientas en el lenguaje c.

#include<stdio.h>#include<stdlib.h>#include<complex.h>#define t 100

int i,j,k,n;float complex a[t][t+1],x[t],suma;

(8.77 + 1.81i) * I1 +8I2 = 127

(15.69 + 3.08i) * I2 - 8I2 = 0

I1 - I2 = I3

Page 9: Gauss

void pidedatos()

float r,im;

printf("Este Programa resulve sistemas de ecuaciones con 100 incognitas.");

printf("\nCon numeros imaginarios ");

printf("\nNumero de Incognitas: ");

scanf("%d",&n);

for(i=0;i<=n-1;i++)

for(j=0;j<=n;j++)

printf("\nA[%d][%d] = ",i,j);

scanf("%f %f",&r,&im);

a[i][j]=r+ 1i*im;

printf("\n\n");

void gauss()

for(i=0;i<=n-1;i++)

for(j=n;j>=0;j--)

a[i][j]=a[i][j]/a[i][i];

for(k=i+1;k<=n-1;k++)

for(j=n;j>=0;j--)

a[k][j]=a[k][j]-a[k][i]*a[i][j];

Page 10: Gauss

void sustitucion()

for(i=n-1;i>=0;i--)

suma=0;

for(j=0;j<=n-1;j++)

if(j!=i)

suma=suma+a[i][j]*x[j];

x[i]=a[i][n]-suma;

void imprime()

for(i=0;i<=n-1;i++)

printf("\nX[%d] = %f + ( %f)i ",i,creal(x[i]),cimag(x[i]));

printf("\n\n");

int main()

int op;

do

Page 11: Gauss

system("cls");

pidedatos();

gauss();

sustitucion();

imprime();

printf("\n\nQuieres volver a intentarlo? 1.Si 0.No R = ");

scanf("%f",&op);

while(op>=1);

printf("\n\n");

system("pause");

return 0;

Podemos observar que el código es similar al otro que resuelve sistemas de ecuaciones con numero reales, pero aquí al ser complejos nos hacemos ayuda de la librería “complex” y así poder operarlos.

Al resolver matrices con números complejos siempre existe la posibilidad de tener un mayor grado de error por lo que esta clase de herramientas nos ayudan a adoptar una nueva forma de resolverlos sin dejar atrás la comprobación. Nuevamente este programa es muy útil para cálculos rápidos.

Los valores que proporciona el programa son:

I1 = 8.793480 -1.342946 i A I2 = 2.862175 - 0.825625 i A I3 = 5.931305 – 0.517320 i A

Page 12: Gauss

Ahora solo nos queda comprobar si el sistema de ecuaciones está bien hecho y las corrientes son las correctas para eso haremos uso de “MATLAB”.

Con esto podemos darnos cuenta de que funciona y que nuestras corrientes son las correctas.

Conclusión:

Con base a la práctica 2 uno puede apreciar lo fácil y sencillo que se vuelve resolver un problema con las herramientas necesarias, si bien hay sistemas de ecuaciones que son sencillos hay otros con demasiadas incógnitas que para resolverse se necesitaría de mucha paciencia y mucho esfuerzo, sin embargo se puede apreciar que con ayuda de estos métodos numéricos nuestro trabajo solo se convierte en teclear y en su caso corroborar con otras herramientas que sean o estén especializadas en la tarea que vamos a realizar.

Bibliografía:

Métodos numéricos para ingenieros, Steven C.Chapra, Raymond P. Canale, McGraw-Hill, Mexico 1988.

http://cb.mty.itesm.mx/ma1010/materiales/ma1010-02.pdf

http://es.wikipedia.org/wiki/Sistema_de_ecuaciones