Escolar Documentos
Profissional Documentos
Cultura Documentos
NACIONAL
ESCUELA SUPERIOR DE INGENIERIA
MECANICA Y ELECTRICA
INGENIERIA EN COMUNICACIONES Y ELECTRONICA
ANALISIS NUMERICO
PROYECTO FINAL:
RESOLUCION DE CIRCUITO RLC POR METODO DE
MALLAS
GRUPO: 4CM6
PROFESORA: GUITIERREZ VILLALBA MARIA IVONNE
Objetivo
Aplicar los mtodos de anlisis numricos vistos a travs del curso.
Desarrollar un programa que ayude en la resolucin de un problema a travs del mtodo
numrico.
Se desarrollo un programa para resolver un problema propuesto de un circuito RLC, por tanto
se pretende poder realizar un programa que resuelva a travs del mtodo de Gauss Jordan una
matriz con elementos complejos.
La Resistencia
La tensin vg tendr un valor instantneo que vendr dado en todo momento por:
El condensador
La bobina
Siendo Xl la reactancia inductiva de la bobina (que viene a ser la oposicin que sta presenta al
paso de la corriente alterna) que se calcula as:
Mtodo de Mallas
Mediante el mtodo de las mallas es posible resolver circuitos con varias mallas y fuentes.
Consiste en plantear las corrientes de cada malla como su intensidad por su resistencia y
sumar o restar las intensidades por las resistencias relacionadas con mallas adyacentes.
2) Se plantea a la suma de las fuentes de cada malla como I por R de la malla y se le restan las
ramas comunes con otras mallas. El signo que se les pone a las fuentes depende del sentido de
circulacin elegido para la corriente. Si se pasa a travs de la fuente de negativo a positivo con
el sentido elegido, se utiliza (+), de lo contrario (-).
Malla 1
Malla 2
+ V2 = I2 (R2 + R3 + R4) I1 (R2) I3 (R4)
Malla 3
- V3 = I3 (R4 + R5) I2 (R4)
3) Los valores de resistencias y de tensiones se conocen, por lo tanto quedan 3 ecuaciones con
3 incgnitas (para 3 mallas interiores) en donde cada incgnita es la corriente de malla.
Resolviendo el sistema se obtienen las corrientes. Si se obtiene alguna corriente negativa
quiere decir que el sentido real es al revs del elegido.
Desarrollo Practico.
Se propuso el siguiente circuito.
Analticamente.
Para encontrar sus respectivas impedancias se utilizo la siguiente formula
Donde
Al encontrar 3 mallas dentro del circuito, debemos obtener un sistema de 3 ecuaciones con 3
incgnitas donde las incgnitas son las corrientes que circulan por cada malla.
Al abrir el programa lo primero que encontramos son 2 ventanas de lado derecho la ventana que
comnmente aparece y de lado izquierdo la ventana grafica de BGI.
Dentro de la ventana grafica se puede observar el circuito dibujado con todos sus elementos y
en la esquina inferior derecha, un botn, NUEVOS VALORES que debemos presionar para
continuar con el programa.
Al presionarlo se nos despliega informacin importante que nos ayudara para poder insertar los
valores de los elementos posteriormente, se nos indica que iniciemos dando el valor a la fuente
de voltaje, ya que cuando se nos pide el valor del voltaje, de igual manera, se pedir la
frecuencia de operacin.
Esto se cre de tal manera que cuando insertemos algn valor de un elemento RLC
inmediatamente se genere el valor de su impedancia, es por eso que se necesita desde un
principio conocer el valor de la frecuencia.
El programa est adaptado para que se puedan insertar los valores de los elementos
seleccionndolos con el puntero dentro de la ventana grafica, en el orden que uno guste y
puedan ser modificados las veces que quieran.
Una vez insertados los valores de todos los elementos y conforme con ellos, se deber
seleccionar el botn CALCULAR para continuar con el programa.
Como puede observarse el sentido de las corrientes aparece dentro de la ventana grafica y
dentro de la otra ventana puede verse la matriz resultante con los valores dados
anteriormente.
En esta parte se utilizo el getch() para poder observar con calma el desarrollo de la matriz
resultante y ver como se genera el mtodo de Gauss Jordan.
Una vez terminado el pivoteo de la matriz los resultados de las corrientes aparecen de forma
ms clara.
Se le pide al usuario que presione una tecla para continuar.
Codigo Fuente
El programa fue desarrollado en Dev C++ a travs de la plataforma grafica y con ayuda de la
librera winbgim.h.
El cdigo fuente se presenta a continuacin:
/*Metodos Numericos
-----------------------------------Dev-C++--------------------------------Aguilar Castillo Jorge Arturo
Grupo: 4CM6
PROYECTO
RESOLUCION DE CIRCUITO RLC POR METODO DE MALLAS
APLICANDO METODO DE GAUSS JORDAN PARA NUMEROS COMPLEJOS.
*/
#include <winbgim.h>
#include <windows.h>
#include <mmsystem.h>
#include <iostream>
#include <conio.h>
#include <math.h>
#define J 50
#define G 4000
using namespace std;
struct Complejo
{
float Real;
float Imaginario;
};
class RLC
{
private:
Complejo Com[14];//Elementos en impedancia
double R[4];//elementos resistivos
double C[3];//elementos capacitivos
double L[7];//elementos inductivos
Complejo M[10][10];//elementos de la matriz
int x;
int y;
int op;
double F;//la frecuencia
int e;
int i;
public:
Complejo Suma(Complejo C1, Complejo C2);
Complejo Resta(Complejo C1, Complejo C2);
Complejo Multiplicacion(Complejo C1, Complejo C2);
Complejo Division(Complejo C1, Complejo C2);
void Dibujo(void);
void Dibujo2(void);
void Circuito(void);
void Leer_Datos(void);
void Obtener_Matriz(void);
void Aplicar_Gauss_J(void);
void Imprimir_Solucion(void);
void Imprimir_Mat_ceros(void);
};
void RLC::Dibujo(void)
{
setfillstyle(1,COLOR(255,255,255));
rectangle(80,40,400,240);
rectangle(400,40,580,240);
rectangle(80,240,400,440);
circle(230,30,2);
circle(310,230,2);
circle(390,90,2);
line(250,68,250,212);
line(290,68,372,110);
line(372,150,290,212);
setcolor(COLOR(255,255,255));
settextstyle(0,0,2);
setfillstyle(1,COLOR(0,170,0));
setbkcolor(COLOR(0,170,0));
bar(60,60,100,120);
outtextxy(65,85,"R1");
bar(60,260,100,320);
outtextxy(65,285,"R2");
bar(140,20,200,60);
outtextxy(155,30,"R3");
bar(560,100,600,160);
outtextxy(565,125,"R4");
setfillstyle(1,COLOR(0,100,255));
setbkcolor(COLOR(0,100,255));
bar(60,160,100,220);
outtextxy(65,185,"C1");
bar(60,360,100,420);
outtextxy(65,385,"C2");
bar(460,20,520,60);
outtextxy(475,30,"C3");
setfillstyle(1,COLOR(255,255,0));
setbkcolor(COLOR(255,255,0));
bar(240,20,300,60);
outtextxy(255,30,"L1");
bar(240,220,300,260);
outtextxy(255,230,"L2");
bar(380,100,420,160);
outtextxy(385,125,"L3");
bar(380,260,420,320);
outtextxy(385,285,"L4");
setfillstyle(1,COLOR(255,0,0));
setbkcolor(COLOR(1,0,12));
fillellipse(240,440,20,20);
outtextxy(260,420,"V");
setfillstyle(1,COLOR(250,150,0));
setbkcolor(COLOR(250,150,0));
settextstyle(0,0,1);
bar(230,120,260,150);
outtextxy(233,125,"L12");
bar(320,70,350,100);
outtextxy(323,75,"L13");
bar(330,170,360,200);
outtextxy(333,175,"L23");
setfillstyle(1,COLOR(255,0,0));
fillellipse(240,440,20,20);
}
void RLC::Dibujo2(void)
{
setfillstyle(1,COLOR(0,210,250));
setcolor(COLOR(0,210,250));
line(200,300,200,380);
line(200,300,280,300);
line(260,280,280,300);
line(260,320,280,300);
setbkcolor(COLOR(1,0,12));
settextstyle(0,0,5);
outtextxy(220,320,"J1");
Sleep(2000);
line(140,180,140,100);
line(140,100,200,100);
line(200,80,220,100);
line(220,100,200,120);
outtextxy(150,120,"J2");
Sleep(2000);
line(460,180,460,100);
line(460,100,540,100);
line(520,80,540,100);
line(540,100,520,120);
outtextxy(475,120,"J3");
}
void RLC::Leer_Datos(void)
{
cout<<"\n\tInserte los valores de los componentes de la forma:\n\n"
<<"\tR (resistencia) en ohms\n"
<<"\tC (capacitor) en farads\n"
<<"\tL (inductor) en Henrys\n"
<<"\tV (voltaje) primero parte real despues parte imaginaria\n"
<<"\tF (Frecuencia) en Hertz"
<<"\n\n\t\tSeleccione el elemento para insertar su valor."
<<"\n\t\tInicie con el voltaje.";
op=3;
while (op==3)
{
delay(500);
getmouseclick(WM_LBUTTONDOWN, x, y);
if(y>420&&y<460&&x>220&&x<260)
{
cout<<"\n\n\t\tV\n"
<<"Parte real=";
cin>>Com[14].Real;
cout<<"Parte Imaginaria=";
cin>>Com[14].Imaginario;
cout<<"Frecuencia de operacion=";
cin>>F;
op=0;
}
}
op=3;
while (op==3)
{
delay(500);
getmouseclick(WM_LBUTTONDOWN, x, y);
if(y>60&&y<120&&x>60&&x<100)
{
PlaySound("G:/boton3.wav",NULL,SND_FILENAME|SND_ASYNC);
cout<<"\nR1=";
cin>>R[1];
Com[0].Real=R[1];
Com[0].Imaginario=0;
}
if(y>260&&y<320&&x>60&&x<100)
{
PlaySound("G:/boton3.wav",NULL,SND_FILENAME|SND_ASYNC);
cout<<"\nR2=";
cin>>R[2];
Com[1].Real=R[2];
Com[1].Imaginario=0;
}
if(y>20&&y<60&&x>140&&x<200)
{
PlaySound("G:/boton3.wav",NULL,SND_FILENAME|SND_ASYNC);
cout<<"\nR3=";
cin>>R[3];
Com[2].Real=R[3];
Com[2].Imaginario=0;
}
if(y>100&&y<160&&x>560&&x<600)
{
PlaySound("G:/boton3.wav",NULL,SND_FILENAME|SND_ASYNC);
cout<<"\nR4=";
cin>>R[4];
Com[3].Real=R[4];
Com[3].Imaginario=0;
}
if(y>160&&y<220&&x>60&&x<100)
{
PlaySound("G:/boton3.wav",NULL,SND_FILENAME|SND_ASYNC);
cout<<"\nC1=";
cin>>C[1];
Com[4].Real=0;
Com[4].Imaginario=-(1/(M_PI*2*F*C[1]));
}
if(y>360&&y<420&&x>60&&x<100)
{
PlaySound("G:/boton3.wav",NULL,SND_FILENAME|SND_ASYNC);
cout<<"\nC2=";
cin>>C[2];
Com[5].Real=0;
Com[5].Imaginario=-(1/(M_PI*2*F*C[2]));
}
if(y>20&&y<60&&x>460&&x<520)
{
PlaySound("G:/boton3.wav",NULL,SND_FILENAME|SND_ASYNC);
cout<<"\nC3=";
cin>>C[3];
Com[6].Real=0;
Com[6].Imaginario=-(1/(M_PI*2*F*C[3]));
}
if(y>20&&y<60&&x>240&&x<300)
{
PlaySound("G:/boton3.wav",NULL,SND_FILENAME|SND_ASYNC);
cout<<"\nL1=";
cin>>L[1];
Com[7].Real=0;
Com[7].Imaginario=(M_PI*2*F*L[1]);
}
if(y>220&&y<260&&x>240&&x<300)
{
PlaySound("G:/boton3.wav",NULL,SND_FILENAME|SND_ASYNC);
cout<<"\nL2=";
cin>>L[2];
Com[8].Real=0;
Com[8].Imaginario=(M_PI*2*F*L[2]);
}
if(y>100&&y<160&&x>380&&x<420)
{
PlaySound("G:/boton3.wav",NULL,SND_FILENAME|SND_ASYNC);
cout<<"\nL3=";
cin>>L[3];
Com[9].Real=0;
Com[9].Imaginario=(M_PI*2*F*L[3]);
}
if(y>260&&y<320&&x>380&&x<420)
{
PlaySound("G:/boton3.wav",NULL,SND_FILENAME|SND_ASYNC);
cout<<"\nL4=";
cin>>L[4];
Com[10].Real=0;
Com[10].Imaginario=(M_PI*2*F*L[4]);
}
if(y>120&&y<150&&x>230&&x<260)
{
PlaySound("G:/boton3.wav",NULL,SND_FILENAME|SND_ASYNC);
cout<<"\nL12=";
cin>>L[5];
Com[11].Real=0;
Com[11].Imaginario=(M_PI*2*F*L[5]);
}
if(y>70&&y<100&&x>320&&x<350)
{
PlaySound("G:/boton3.wav",NULL,SND_FILENAME|SND_ASYNC);
cout<<"\nL13=";
cin>>L[6];
Com[12].Real=0;
Com[12].Imaginario=(M_PI*2*F*L[6]);
}
if(y>170&&y<200&&x>330&&x<360)
{
PlaySound("G:/boton3.wav",NULL,SND_FILENAME|SND_ASYNC);
cout<<"\nL23=";
cin>>L[7];
Com[13].Real=0;
Com[13].Imaginario=(M_PI*2*F*L[7]);
}
if(y>380&&y<400&&x>500&&x<625)
{
PlaySound("G:/boton2.wav",NULL,SND_FILENAME|SND_ASYNC);
//Calcular
delay(500);
op=0;
}
}
}
Complejo RLC::Suma(Complejo C1, Complejo C2)
{
Complejo C3;
C3.Real=C1.Real+C2.Real;
C3.Imaginario=C1.Imaginario+C2.Imaginario;
return C3;
}
C3.Imaginario=((C2.Real*C1.Imaginario)-(C1.Real*C2.Imaginario))/DenCom;
}
return C3;
}
void RLC::Obtener_Matriz(void)
{
Complejo CM[20];
//Propias
CM[10].Real=2;
CM[10].Imaginario=0;
CM[4]=Suma(Com[1],Com[5]);
CM[5]=Suma(Com[8],Com[10]);
M[0][0]=Suma(CM[4],CM[5]);
CM[4]=Suma(Com[0],Com[2]);
CM[5]=Suma(Com[7],Com[9]);
CM[6]=Suma(Com[4],Com[8]);
CM[7]=Suma(Com[11],Com[13]);
CM[8]=Suma(Com[12],CM[7]);
CM[9]=Multiplicacion(CM[10],CM[8]);
CM[11]=Suma(CM[4],CM[5]);
CM[12]=Suma(CM[6],CM[9]);
M[1][1]=Suma(CM[11],CM[12]);
CM[4]=Suma(Com[9],Com[6]);
M[2][2]=Suma(CM[4],Com[3]);
//Mutuas
CM[6].Real=-1;
CM[6].Imaginario=0;
CM[5]=Multiplicacion(Com[8],CM[6]);
CM[4]=Resta(CM[5],Com[13]);
M[0][1]=Resta(CM[4],Com[11]);
M[1][0]=M[0][1];
M[0][2]=Com[13];
M[2][0]=M[0][2];
CM[6].Real=-1;
CM[6].Imaginario=0;
CM[5]=Multiplicacion(Com[9],CM[6]);
CM[4]=Resta(CM[5],Com[13]);
M[1][2]=Resta(CM[4],Com[12]);
M[2][1]=M[1][2];
//Entrada
M[0][3].Real=Com[14].Real;
M[0][3].Imaginario=Com[14].Imaginario;
M[1][3].Real=0;
M[1][3].Imaginario=0;
M[2][3]=M[1][3];
}
void RLC::Aplicar_Gauss_J(void)
{
Complejo CM[20];
CM[0].Real=-1;
CM[0].Imaginario=0;
Imprimir_Mat_ceros();
for(e=3;e>=0;e--)
{
M[0][e]=Division(M[0][e],M[0][0]);
}
CM[1]=Multiplicacion(CM[0],M[1][0]);
Imprimir_Mat_ceros();
for(e=3;e>=0;e--)
{
CM[2]=Multiplicacion(CM[1],M[0][e]);
M[1][e]=Suma(M[1][e],CM[2]);
}
CM[1]=Multiplicacion(CM[0],M[2][0]);
Imprimir_Mat_ceros();
for(e=3;e>=0;e--)
{
CM[2]=Multiplicacion(CM[1],M[0][e]);
M[2][e]=Suma(M[2][e],CM[2]);
}
Imprimir_Mat_ceros();
for(e=3;e>=0;e--)
{
M[1][e]=Division(M[1][e],M[1][1]);
}
CM[1]=Multiplicacion(CM[0],M[2][1]);
Imprimir_Mat_ceros();
for(e=3;e>=0;e--)
{
CM[2]=Multiplicacion(CM[1],M[1][e]);
M[2][e]=Suma(M[2][e],CM[2]);
}
CM[1]=Multiplicacion(CM[0],M[0][1]);
Imprimir_Mat_ceros();
for(e=3;e>=0;e--)
{
CM[2]=Multiplicacion(CM[1],M[1][e]);
M[0][e]=Suma(M[0][e],CM[2]);
}
Imprimir_Mat_ceros();
for(e=3;e>=0;e--)
{
M[2][e]=Division(M[2][e],M[2][2]);
}
CM[1]=Multiplicacion(CM[0],M[1][2]);
Imprimir_Mat_ceros();
for(e=3;e>=0;e--)
{
CM[2]=Multiplicacion(CM[1],M[2][e]);
M[1][e]=Suma(M[1][e],CM[2]);
}
CM[1]=Multiplicacion(CM[0],M[0][2]);
Imprimir_Mat_ceros();
for(e=3;e>=0;e--)
{
CM[2]=Multiplicacion(CM[1],M[2][e]);
M[0][e]=Suma(M[0][e],CM[2]);
}
Imprimir_Mat_ceros();
}
void RLC::Imprimir_Solucion(void)
{
cout<<endl<<endl<<"J1="<<M[0][3].Real<<" + "<<M[0][3].Imaginario<<" i Amp.";
cout<<endl<<"J2="<<M[1][3].Real<<" + "<<M[1][3].Imaginario<<" i Amp.";
cout<<endl<<"J3="<<M[2][3].Real<<" + "<<M[2][3].Imaginario<<" i Amp.";
cout<<endl<<endl<<"\t\t\t\t";
system("pause");
}
void RLC::Imprimir_Mat_ceros(void)
{
system("cls");
cout<<endl<<"MATRIZ RESULTANTE POR METODO DE MALLAS:";
cout<<endl<<endl<<"";
for(i=0;i<4;i++)
{
cout<<M[0][i].Real<<"+"<<M[0][i].Imaginario<<"i ";
}
cout<<""<<endl<<"";
for(i=0;i<4;i++)
{
cout<<M[1][i].Real<<"+"<<M[1][i].Imaginario<<"i ";
}
cout<<""<<endl<<"";
for(i=0;i<4;i++)
{
cout<<M[2][i].Real<<"+"<<M[2][i].Imaginario<<"i
}
cout<<"";
getch();
}
";
void RLC::Circuito(void)
{
Dibujo();
settextstyle(0,0,1);
setbkcolor(COLOR(150,150,150));
setcolor(COLOR(255,255,255));
outtextxy(505,385," CALCULAR ");
Leer_Datos();
Dibujo2();
Obtener_Matriz();
Aplicar_Gauss_J();
Imprimir_Solucion();
}
int main()
{
system("color 79");
system("cls");
int op2;
int x;
int y;
RLC Cir;
initwindow(640,480);
setfillstyle(1,COLOR(1,0,12));
bar(0,0,640,480);
setfillstyle(1,COLOR(150,150,150));
bar(500,380,625,400);
bar(500,420,625,440);
settextstyle(0,0,1);
setbkcolor(COLOR(150,150,150));
setcolor(COLOR(255,255,255));
outtextxy(535,425,"SALIR");
PlaySound("G:/inicio.wav",NULL,SND_FILENAME|SND_ASYNC);
op2=1;
while (op2!=0)
{
system("cls");
settextstyle(0,0,1);
setbkcolor(COLOR(150,150,150));
setcolor(COLOR(255,255,255));
outtextxy(505,385,"NUEVOS VALORES");
Cir.Dibujo();
delay(500);
getmouseclick(WM_LBUTTONDOWN, x, y);
if(y>380&&y<400&&x>500&&x<625)
{
PlaySound("G:/boton.wav",NULL,SND_FILENAME|SND_ASYNC);
Cir.Circuito();
}
if(y>420&&y<440&&x>500&&x<625)
{
PlaySound("G:/cierre.wav",NULL,SND_FILENAME|SND_ASYNC);
delay(2000);
op2=0;
}
}
closegraph();
return 0;
}
Observaciones y Conclusiones.
Conocer los diferentes mtodos numricos, nos propician a tener una fuerte herramienta para
solucionar cualquier problema que se presente en el mbito numrico.
Si bien el mtodo de mallas para la resolucin de circuitos es un ejemplo muy visto, lo
interesante de este programa que se cre, era poder aplicarlo para circuitos RLC por tanto
poder realizar el mtodo para solucin de sistemas de ecuaciones con nmeros complejos.
Aplicando el programa se pudo obtener valores ms cercanos a los reales, esto debido a que en
el mtodo analtico se tomaron pocas cifras significativas.
Bibliografa.
http://www.fisicapractica.com/rlc.php
http://www.terra.es/personal2/equipos2/rlc.htm