Está en la página 1de 14

UNIVERSIDAD MAYOR DE SAN ANDRES

FACULTAD DE INGENIERIA

INGENIERIA ELECTRONICA

ETN-506 SISTEMAS LINEALES

II - 2019

EJERCICIO DE EXAMEN

PROGRAMACION e^At

DOCENTE
Ing. JAVIER SANBRIA GARCIA

ESTUDIANTE

APELLIDOS : APARICIO DORADO

NOMBRE : AXL

La paz – Bolivia

Realizar un programa en lenguaje C


Programa de la siguiente ecuación: x  t   e At x  0 

//Obtencion de la respuesta natural de un modelo de variables de


estado}
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/*Funcion aplicando recursividad para hallar el factorial de un
numero*/
float factorial (int n)
{
if(n==0)//Caso base
{
return 1;
}
else//Caso general
{
return n*factorial(n-1);
}
}
/*Funcion aplicando recursividad para hallar el valor de un numero
'x' elevado a la potencia 'u'*/
float potencia (float x,float u)
{
if (u==0)//caso base
{
return 1;
}
else //caso general
{
return x*potencia(x,u-1);
}
}
int main()
{
float t;
long i,j,k,l,m,numero;
float
A[100][100],X_cero[100][2],E[100][100],O[100][100],X[100][2],P[10
0][100],Q[100][100];
/*Introducimos la matriz A*/
printf("Ingrese la dimension de la matriz cuadrada A\n");
scanf("%d",&numero);
printf("\nIntroduzca los datos de la matriz cuadrada A de orden
%d\n",numero);
for (i=1;i<=numero;i++)
{
for (j=1;j<=numero;j++)
{
printf("Introduzca la entrada (%d,%d) de la matriz A\n",i,j);
scanf("%f",&A[i][j]);
}
}
printf("La matriz introducida A es:\n");
for (i=1;i<=numero;i++)
{
for (j=1;j<=numero;j++)
{
printf("%1.f\t",A[i][j]);
if(j==numero)
{
printf("\n");
}
}
}
printf("\nIntroduzca el vector de condiciones iniciales X(0) que es
una matriz columna %dx1\n",numero);
for(k=1;k<=numero;k++)
{
printf("Introduzca la entrada (%d,1) de la matriz X(0)\n",k);
scanf("%f",&X_cero[k][1]);
}
printf("El vector de condiciones iniciales X(0) introducido es:\n");
for(k=1;k<=numero;k++)
{
printf("%4.f\n",X_cero[k][1]);
}
printf("Introduzca el valor de t sobre el cual desea trabajar\n");
scanf("%f",&t);
/*Hallamos la matriz e^At*/
for (i=1;i<=numero;i++)
{
for(j=1;j<=numero;j++)
{
if(i==j)
{
E[i][j]=A[i][j]*t+1;
}
else
{
E[i][j]=A[i][j]*t;
}
}
}
/*Utilizamos 10 iteraciones para el valor de la matriz e^At por
series*/
/*Hallamos para las aproximaciones la matriz A elevada a una
potencia*/
for(i=1;i<=numero;i++)
{
for(j=1;j<=numero;j++)
{
P[i][j]=A[i][j];
}
}
for(l=2;l<=10;l++)
{
for (i=1;i<=numero;i++)
{
for(j=1;j<=numero;j++)
{
Q[i][j]=0;
for(k=1;k<=numero;k++)
{
Q[i][j]=Q[i][j]+P[i][k]*A[k][j];
}
}
}
for(i=1;i<=numero;i++)
{
for(j=1;j<=numero;j++)
{
E[i][j]=E[i][j]+Q[i][j]*(potencia(t,l)/factorial(l));
}
}
for(i=1;i<=numero;i++)
{
for(j=1;j<=numero;j++)
{
P[i][j]=Q[i][j];
}
}
}
printf("La matriz e^At es:\n");
for(i=1;i<=numero;i++)
{
for(j=1;j<=numero;j++)
{
printf("%.4f\t",E[i][j]);
if(j==numero)
{
printf("\n");
}
}
}
for(i=1;i<=numero;i++)
{
X[i][1]=0;
for(k=1;k<=numero;k++)
{
X[i][1]=X[i][1]+E[i][k]*X_cero[k][1];
}
}
printf("\nLa solucion de e^At*X(0) expresada matricialmente
es:\n");
for(i=1;i<=numero;i++)
{
printf("%.4f\n",X[i][1]);
}
}

APLICANDO EL PROGRAMA EN LA SIGUIENTES MATRICES DE


PRUEBA

┌ ┐ ┌ ┐
│ 0 1 0 │ │ 1 │
A = │ 0 0 1 │; x(0) = │ 1 │
│ -6 -11 -6 │ │ 1 │
└ ┘ └ ┘
t=0
┌ ┐ ┌ ┐
│ 1 0 0 │ │ 1 │
eAt = │ 0 1 0 │; x(0) = │ 1 │
│ 0 0 1 │ │ 1 │
└ ┘ └ ┘
t=0.5
┌ ┐ ┌ ┐
│ 0.9297 0.3648 0.0417 │ │ 1.3362 │
eAt = │ -0.2500 0.4714 0.1148 │; x(0.5) = │ 0.3362 │
│ -0.6891 -1.5133 -0.21771 │ │ -2.4201 │
└ ┘ └ ┘
t=1
┌ ┐ ┌ ┐
│ 0.2500 -0.3250 -0.2083 │ │-0.2833 │
eAt = │ 1.2500 2.5417 0.9250 │; x(1) = │ 4.7167 │
│-5.5500 -8.9250 -3.0083 │ │-17.4833│
└ ┘ └ ┘

t=1.5
┌ ┐ ┌ ┐
│-4.2734 -7.1555 -2.6719 │ │-14.1008 │
eAt = │ 16.0313 25.1172 8.8758 │; x(1.5) = │ 50.0242 │
│-53.2547 -81.6023 -28.1375 │ │-162.9945│
└ ┘ └ ┘

t=2
┌ ┐ ┌ ┐
│-23.0000 -36.4000 -13.3333 │ │-72.7333 │
eAt = │ 80.0000 123.6667 43.6000 │; x(2) = │ 247.2667│
│-261.6000 -399.6000 -137.9333│ │-799.1333│
└ ┘ └ ┘

También podría gustarte