Vous êtes sur la page 1sur 9

TAREA 5

Paulina Andrea Reyes Barba


Divisin de Ciencias e Ingenieras Campus Len, Universidad de Guanajuato,
Loma del Bosque 103, 37150 Len Guanajuato, Mxico

(Dated: November 20, 2014)

I.

TEORA: MULTIPLICACIN DE MATRICES [1]

a11 a12 a13 a1n


a21 a22 a23 a2n

a
31 a32 a33 a3n Los
Una matriz es un conjunto de elementos ordenados en las y columnas como
.
..
..
..
..
.
.
.

am1 am2 am3 amn

elementos aij son nmeros reales o complejos, o funciones de una o varias variables. En este libro slo se tratarn
matrices cuyos elementos son nmeros reales.
Para denotar matrices se utilizarn las primeras letras maysculas del alfabeto en cursivas. Cuando se hace referencia
a una matriz es conveniente especicar su nmero de las y columnas. As la expresin de A de mxn, indica que se
trata de una matriz dem las y de n columnas.
Cuando m = n, se tiene una matriz cuadrada de orden n.
Dos matrices son iguales cuando tienen el mismo nmero de las y columnas y, adems, los elementos correspondientes
son iguales.
Dos matrices A y B son conformes en ese orden (primero A y despus B ), si A tiene el mismo nmero de columnas
que B tiene de las.
Se denir la multiplicacin slo para matrices conformes. Dada una matriz A de mxn y una matriz B de nxp, el
producto es una matriz C de mxp cuyo elemento general cij se obtiene por la suma de los productos de los elementos
de i -sima
la de A y la j
-sima columna de B. Si

a11
a21

..
.
A=
ai1

..
.
am1
Y
b11
b21

B= .
..
bn1

a12 a1n
a22 a2n

..
..
.
.

ai2 ain

..
..
.
.
am2 amn

b12 b1j b1p


b22 b2j b2p

..
..
..
.
.
.
bn2 bnj bnp
Entonces
c11 c12 c1j
c21 c22 c2j

..
..
..
.
.
.
AB = C =
ci1 ci2 cij

..
..
..
.
.
.
cm1 cm2 cmj

Donde

Electronic

address:

c1p
c2p

..
.

cip

..
.
cmp

reyesbp2014@licifug.ugto.mx

cij = ai1 b1j + ai2 b2j + + ain bnj

Obsrvese que AB 6=

(1)

BA; es decir, la multiplicacin de matrices no es conmutativa.


A(B + C) = AB + AC

(2)

(AB)C = A(BC)

(3)

A.

Pseudocdigo

Problema: Realizar la multiplicacn de dos matrices de dimensin 2x2.


INPUT:
1. Coecientes de la matriz A
2. Coecientes de la matriz B
OUTPUT:
1. Coecientes de la matriz C
NOTA: Las matrices se pueden manejar como un arreglo de dos dimensiones.

PASO 1:
Declarar las dimensiones de los arreglos para las matrices.
int n=2, m=2;

Declarar los arreglos para las matrices.


float matriz 1 [m][n]

PASO 2:
Pedir los coecientes de la matriz 1 y de la matriz 2.
Hacer dos ciclos para los coecientes de cada la de cada matriz.
Declarar dos variables auxiliares (i, j).
Iniciar los auxiliares en 1.
PASO 3:
Calcular los coecientes de la matriz 3.
Imprimir la matriz 3.

B.

Cdigo para matrices de 2x2

#include<stdio.h>
main()
{
int n=2, m=2, i=0, j=1;
float a[n][m]; \\ARREGLO PARA MATRIZ A
float b[n][m]; \\ARREGLO PARA MATRIZ B
float c[n][m]; \\ARREGLO PARA MATRIZ C
//LLENAR MATRIZ A
//PRIMER FILA
for(i=1;i<=n;i++)
{
printf("Dame a(%d,%d)\n", i, j);
scanf("%f",&a[i][j]);
}

3
//SEGUNDA FILA
i=1; //REINICIAR i
j=2; //ASIGNAR VALOR A J
while(i<=n)
{
printf("Dame a(%d,%d)\n", i, j);
scanf("%f",&a[i][j]);
i++;
}
//LLENAR MATRIZ B
//PRIMER FILA
j=1; //REINCIAR J
for(i=1;i<=n;i++)
{
printf("Dame b(%d,%d)\n", i, j);
scanf("%f",&b[i][j]);
}
//SEGUNDA FILA
i=1; //REINICIAR i
j=2; //ASIGNAR VALOR A J
while(i<=n)
{
printf("Dame b(%d,%d)\n", i, j);
scanf("%f",&b[i][j]);
i++;
}
//CALCULAR COEFICIENTES MATRIZ C
c[1][1]=(a[1][1]*b[1][1]) + (a[2][1]*b[1][2]);
c[2][1]=(a[1][1]*b[2][1]) + (a[2][1]*b[2][2]);
c[1][2]=(a[1][2]*b[1][1]) + (a[2][2]*b[1][2]);
c[2][2]=(a[1][2]*b[2][1]) + (a[2][2]*b[2][2]);
//IMPRIMIR MATRIZ
printf("La martriz C es \n\n\t (%f,%f)\n\t(%f,%f)\n\t", c[1][1], c[2][1], c[1][2], c[2][2]);
return 0;
}
C.

Cdigo para matrices de mxn

#include<stdio.h>
#include <stdlib.h>
int main()
{
int af,ac,bf,bc,i,j,k;
//variables para las entradas de las matrices
printf("Numero de filas de la matriz A");
scanf("%d",&af);
printf("Numero de columnas de la matriz A");
scanf("%d",&ac);
printf("Numero de filas de la matriz B");
scanf("%d",&bf);
printf("Numero de columnas de la matriz B");

4
scanf("%d",&bc);
if(ac==bf)
{

int A[af][ac],B[bf][bc],C[af][bc];
for(i=0;i<af;i++)
//ingreso de valores a la matriz A
{
for(j=0;j<ac;j++)
{
printf("escribe el valor de la componente A(%d,%d)=",i+1,j+1);
scanf("%d",&A[i][j]);
}
}
for(i=0;i<bf;i++)
//ingreso de valores a la matriz B
{
for(j=0;j<bc;j++)
{
printf("escribe el valor de la componente B(%d,%d)=",i+1,j+1);
scanf("%d",&B[i][j]);
}
}
for(i=0;i<af;i++)
{
for(j=0;j<bc;j++)
{
C[i][j]=0;
for(k=0;k<ac;k++)
{
C[i][j]=(C[i][j]+(A[i][k]*B[k][j]));
}
}
}
//impresion en pantalla de matrices
printf("\n\n\t\t\tMatriz A");
for(i=0;i<af;i++)
{
printf("\n\t\t");
for(j=0;j<ac;j++)
{
printf(" %6d ",A[i][j]);
}
}
printf("\n\n\t\t\tMatriz B");
for(i=0;i<bf;i++)
{
printf("\n\t\t");
for(j=0;j<bc;j++)
{
printf(" %6d ",B[i][j]);
}
}
printf("\n\n\t\t\tMatriz C");
for(i=0;i<af;i++)
{

}
}
else
{

printf("\n\t\t");
for(j=0;j<bc;j++)
{
printf(" %6d ",C[i][j]);
}

printf("Introduce el mismo numero de columnas para la matriz A y de filas para la matriz B");
}
return 0;
}

II.

TEORA: MOVIMIENTO PARBOLICO CON FRICCIN [2]

Los clculos de la resistencia al avance tambin son importantes en el movimiento bidimensional de proyectiles.
Una pelota de bisbol, por ejemplo, deja el bat con una rapidez aproximada de 100 mi/h(45m/s). Esto ya es mayor
que su rapidez terminal en el aire cuando la soltamos del reposo . La magnitud de la fuerza de resistencia al avance
de D = bv , puede estimarse a partir del clculo precedente. En la ecuacin
vT =

mg
b

vemos que la constante b es el peso mg de la pelota (cerca de 1.4 N, lo cual corresponde a una masa de 0.14 kg),
dividido entre su rapidez terminal, 42 m/s. Por tanto, b = 0.033 N/(m/s). Si la pelota recorre 45 m/s, sentir una
fuerza de resistencia al avance bv con una magnitud aproximada de 1.5 N, que es mayor que su peso y que, por tanto,
tiene un efecto considerable en su movimiento.
La gura (2) muestra el diagrama de cuerpo libre en un punto particular de la trayectoria de la pelota de
bisbol.

Figure 1: Proyectil en movimiento

~ sigue una direccin contraria a ~v y suponemos que no sople viento. Si


Igual que todas las fuerzas de friccin, D
~
tomamos D = b~v , podemos emplear las leyes de Newton para encontrar una solucin analtica a la trayectoria, un
ejemplo de lo que se explica esquemticamente en la gura (3).

Figure 2: Movimiento de proyectil con una fuerza de resistencia al avance

Cuando se tiene en cuenta la resistencia del aire, el alcance disminuye de 179m a 72m y la altura mxima de
78m a 48m. Ntese asimismo que la trayectoria ya no es simtrica alrededor de la mxima altura; el movimiento
descendente es mucho ms pronunciado que el ascendente. Con 0 = 60o , el proyectil cae al suelo en un ngulo de
79o , y sin resistencia al avanzar lo hara en un ngulo igual a 0 = 60o .
El clculo ha de efectuarse con mtodos numricos en otras opciones (mas realistas) de la fuerza de resisten~.
cia al avance D
A.

Pseudodigo

Problema: Calcular las posiciones y velocidades en "x" y "y" en cada instante de tiempo.
INPUT:
1. Velocidad inicial
2. ngulo de lanzamiento
3. Posiciones iniciales
4. Constante de friccin
5. Tiempo a estimar
OUTPUT:
1. Posiciones y velocidades en "x" y "y" en cada instante de tiempo
PASO 1:
Declarar como constante pi, g y n.
Declarar como otantes todas las variables a usar (Vo, Xo, Yo, ang, b, tmax, t, dt, ti, dt, Vox, Voy, Vx, Vy, x, y)
PASO 2:
Pedir todos los valores de entrada (Vo, Xo, Yo, ang, b)
Convertir el ngulo de grados a radianes
PASO 3:
Calcular las componentes de Vo
Partir tmax en n
Asignar a ti el valor de dt
Iniciar auxiliar t en 1
PASO 4:
Comenzar el ciclo para calcular x, y, Vx y Vy para cada instante de tiempo desde ti hasta tmax con la condicin de
que el programa termine en cuanto, aunque no llegue a tmax, y sea menor que cero.
Imprimir los valores

B.

#include<stdio.h>
#include<math.h>
#define pi 3.14159264
main()
{
float Vo, Xo, Yo, ang, b; //VALORES DE ENTRADA

CDIGO

7
float
float
float
float

tmax, t, dt, n=1000.0, ti; //INTERVALO TIEMPO


Vox, Voy; //COMPONENTES DE VO
Vx, Vy, x, y; //VALORES DE SALIDA
g=9.81;

printf("Dame la velocidad inicial\n");


scanf("%f",&Vo);
printf("Dame la posicion inicial en x\n");
scanf("%f",&Xo);
printf("Dame la posicion inicial en y\n");
scanf("%f",&Yo);
printf("Dame el angulo de lanzamiento\n");
scanf("%f",&ang);
printf("Dame la constante de friccion\n");
scanf("%f",&b);
printf("Dame el tiempo\n");
scanf("%f",&tmax);
ang=(ang*pi)/180; //CONVERTIR GRADOS A RADIANES
//CALCULAR LAS COMPONENTES DE VO
Vox=cos(ang)*Vo;
Voy=sin(ang)*Vo;
dt=(tmax-0.0)/n; \\EL TMAX SE PARTIRA EN N
t=1.0; //AUXILIAR PARA HACER EL CICLO HASTA N PARTICIONES
ti=dt; /*PARA INCREMENTAR NO DE UNO EN UNO EL TIEMPO, SINO EN DT
PARA VER MEJOR LA PARABOLA CON MAS PUNTOS*/
while(t<=n)
{
x= (Xo) + ((Vox/b)*(1.0-exp(-1.0*b*ti)));
y= (Yo) + ((((g + (b*Voy))/(pow(b,2)))*(1.0-exp(-1.0*b*ti)))-((g/b)*ti));
if(y<0) /*SOLO NOS INTERESA CUANDO Y ES POSITIVO PARA VER LA
PARABOLA, PORQUE PARA CIERTO TI EL PROGRAMA LO TOMARIA COMO SI
SIGUIERA CAYENDO HASTA LLEGAR A TMAX CUANDO LA TEORIA DICE OTRA COSA*/
{
goto flagn;
}
Vx= Vox*exp(-1.0*b*ti);
Vy= (((exp(-1.0*b*ti))*(g+(b*Voy)))-g)/b;
ti=ti+dt; \\SUMAR AL TI DT PARA LLEGAR A TMAX HASTA LLEGAR A N PARTICIONES
t++; \\INCREMENTAR T
printf("%f\t%f\t%f\t%f\t%f\n",ti,x,y,Vx,Vy);
//printf("Para t=%f la posicion en x es %f y en y %f \n la veocidad en x es %f y en y %f \n", t, x,
y, Vx, Vy);
}
flagn:
return 0;
}

8
C.

CDIGO CON LECTURA/ESCRITURA DE ARCHIVOS

#include<stdio.h>
#include<math.h>
#define pi 3.14159264
FILE *doc; //RESERVA DE MEMORIA PARA EL PUNTERO
FILE *doc2;
main()
{
doc=fopen("parab.docx","w"); //CREAR ARCHIVO PARA ESCRIBIR LOS DATOS
doc2=fopen("/home/reyesbp2014/Documentos/Inputs/parab.inp","r"); /*EN EL ARCHIVO YA CREADO,
INSERTAR DATOS*/
float
float
float
float
float

Vo, Xo, Yo, ang, b; //VALORES DE ENTRADA


tmax, t, dt, n=1000.0, ti; //INTERVALO TIEMPO
Vox, Voy; //COMPONENTES DE VO
Vx, Vy, x, y; //VALORES DE SALIDA
g=9.81;

fscanf(doc2, "%f\n %f\n %f\n %f\n %f", &Vo,&Xo,&Yo,&ang,&b,&tmax); /*CON LOS DATOS YA GUARDADOS,
HACE LAS OPERACIONES SIGUIENTES*/
printf("%f", Vo); //VERIFICAR QUE LOS DATOS GUARDADOS ESTAN GUARDADOS
/*printf("Dame la velocidad inicial\n");
scanf("%f",&Vo);
printf("Dame la posicion inicial en x\n");
scanf("%f",&Xo);
printf("Dame la posicion inicial en y\n");
scanf("%f",&Yo);
printf("Dame el angulo de lanzamiento\n");
scanf("%f",&ang);
printf("Dame la constante de friccion\n");
scanf("%f",&b);
printf("Dame el tiempo\n");
scanf("%f",&tmax);*/
//COVERTIR DE GRADOS A RADIANES
ang=(ang*pi)/180;
//CALCULAR LAS COMPONENTES DE VO
Vox=cos(ang)*Vo;
Voy=sin(ang)*Vo;
dt=(tmax-0.0)/n; \\EL TMAX SE PARTIRA EN N
t=1.0; //AUXILIAR PARA HACER EL CICLO HASTA N PARTICIONES
ti=dt; /*PARA INCREMENTAR NO DE UNO EN UNO EL TIEMPO, SINO EN DT PARA VER
MEJOR LA PARABOLA CON MAS PUNTOS*/
while(t<=n)
{
x= (Xo) + ((Vox/b)*(1.0-exp(-1.0*b*ti)));
y= (Yo) + ((((g + (b*Voy))/(pow(b,2)))*(1.0-exp(-1.0*b*ti)))-((g/b)*ti));
if(y<0)
{

9
goto flagn;
}
Vx= Vox*exp(-1.0*b*ti);
Vy= (((exp(-1.0*b*ti))*(g+(b*Voy)))-g)/b;
ti=ti+dt; //SUMAR AL TI DT PARA LLEGAR A TMAX HASTA LLEGAR A N PARTICIONES
t++; //INCREMENTAR T
fprintf(doc,"%f\t%f\t%f\t%f\t%f\n",ti,x,y,Vx,Vy); //IMPRIMIR EN EL ARCHIVO LOS VALORES
//printf("%f\t%f\t%f\t%f\t%f\n",ti,x,y,Vx,Vy);
//printf("Para t=%f la posicion en x es %f y en y %f \n la velocidad en x es %f y en y %f \n", t, x,
y, Vx, Vy);
}
fclose(doc); //CERRAR PUNTEROS
fclose(doc2);
flagn:
return 0;
}

[1] Mtodo numricos aplicados a la ingeniera, Nieves Dominguez, Captulo 3, seccin 3.1.
[2] Resnick, Halliday, Krane, A. Fsica Volumen 1. Mxico: Compa Editorial Continental, 2002, pp. 73

Vous aimerez peut-être aussi