Professional Documents
Culture Documents
\
|
=
= =
= = =
n
i
i
n
i
i
n
i
n
i
i
n
i
i i i
x x n
y x y x n
m
x m y b =
(
(
|
.
|
\
|
(
(
|
.
|
\
|
=
= = = =
= = =
2
1 1
2
2
1 1
2
1 1 1
n
i
i
n
i
i
n
i
i
n
i
i
n
i
n
i
i
n
i
i i i
y y n x x n
y x y x n
r
En las anteriores ecuaciones n representa el nmero de parejas de datos
i
x ,
i
y y x ,
y su valor promedio, respectivamente.
Hacer un programa que, mediante la invocacin a una funcin denominada RegLin
efecta un anlisis de regresin lineal sobre parejas de datos contenidas en dos arreglos.
La funcin RegLin lleva a cabo una anlisis de regresin con datos contenidos en
los arreglos x[], y[]; tambin recibe en la variable n el nmero de datos que contienen los
arreglos. Como la funcin entrega tres resultados, se le enva un arreglo de dos elementos
PRCTICA
ARREGLOS CON FUNCIONES
Elaborada por:
M.C. Vicente Fuentes Gea vfg@servidor.unam.mx 7
M.C. Cintia Quezada Reyes cintia@fi-b.unam.mx
Ing. Alejandra Vargas E. De los M. alejandrav@correo.unam.mx
mb[2], de modo que ah ponga los coeficientes de regresin m, b. El coeficiente de
correlacin lo regresa de manera normal, usando la instruccin return.
/*Ejemplo 3: Anlisis de regresin lineal*/
#include <stdio.h>
#include <math.h>
float RegLin(float x[], float y[], int n, float mb[2])
{
/* Ajusta por el mtodo de los mnimos cuadrados los datos contenidos en los arreglos x[],
y[] a la recta y = mx + b, retornando el coeficiente de correlacin r de la manera usual. Los
valores de m, b los entrega en el arreglo mb[2].*/
int i ;
float xy, x2, y2, sx, sy, sx2, sy2, sxy ;
float r ;
sx = sy = sx2 = sy2 = sxy = 0; /* primero se obtienen las sumatorias*/
for(i = 0; i < n; i++)
{
sx += x[i] ; /* suma de x's*/
sy += y[i] ; /* suma de y's*/
sx2 += x[i] * x[i] ; /* suma de x's al cuadrado*/
sy2 += y[i] * y[i] ; /* suma de y's al cuadrado*/
sxy += x[i] * y[i] ; /* suma de productos x*y's*/
}
xy = n * sxy - sx * sy ; /* se hacen unos clculos adicionales*/
x2 = n * sx2 - sx * sx ;
y2 = n * sy2 - sy * sy ;
mb[0] = xy / x2 ; /* pendiente*/
mb[1] = sy / n - mb[0] * sx / n ; /* ordenada al origen*/
r = xy / sqrt(x2 * y2) ; /* coeficiente de correlacin*/
return r;
}
int main(void)
{
float mb[2], r;
/* se forman dos conjuntos de datos de prueba*/
float x[7] = {12, 18, 24, 30, 36, 42, 48};
float y[7] = {5.27, 5.68, 6.25, 7.21, 8.02, 8.71, 8.42};
r = RegLin(x, y, 7, mb);
printf("Analisis de regresin: y = mx + b \n");
PRCTICA
ARREGLOS CON FUNCIONES
Elaborada por:
M.C. Vicente Fuentes Gea vfg@servidor.unam.mx 8
M.C. Cintia Quezada Reyes cintia@fi-b.unam.mx
Ing. Alejandra Vargas E. De los M. alejandrav@correo.unam.mx
printf("m = %f\nb = %f\nCoeficiente de correlacin r = %f\n",mb[0], mb[1], r);
return 0;
}
Errores ms comunes que se pueden cometer:
1. Omitir el tipo de valor de regreso definido para una funcin en la declaracin
del prototipo, olvidando escribir un valor de retorno.
2. Regresar un valor de una funcin que fue declarada como void.
3. Volver a definir dentro de la funcin una variable como local, siendo que sta
fue declarada como variable paramtrica dentro de los parntesis de la funcin.
Ejercicios propuestos
Nota: Realizar el algoritmo antes de elaborar el programa
1. Programar un algoritmo que obtenga la moda de un cierto nmero de valores dados
por el usuario. La moda es el nmero que aparece con ms frecuencia en un
conjunto de datos.
2. Hacer un programa que utilizando una funcin, reciba un arreglo de nmeros reales
y entregue el nmero mayor.
3. Variar el programa anterior obteniendo el nmero menor.
4. Hacer un programa que utilizando una funcin, reciba un arreglo de nmeros reales
y entregue el valor promedio y la desviacin estndar de los datos en un arreglo de
dos elementos.
5. Disear un programa que determine la distribucin de frecuencias de un conjunto de
datos dados desde el teclado y colocados en un arreglo de reales. Las frecuencias
debern obtenerse en NI intervalos de clase. (Sugerencia: Utilizar las funciones
desarrolladas en los problemas 2 y 3 para calcular los valores mximo y mnimo de
los datos, y dividir este intervalo en los NI intervalos de clase).
1. Hacer un programa que interpole linealmente entre y
1
y y
2
cada d de acuerdo con la
siguiente frmula:
y
int
= (1 - )y
1
+ y
2
en donde 0 1; = 0 en y
1
, = 1 en y
2
El programa debe invocar a una funcin a la cual se le proporcionan los extremos
del intervalo de interpolacin y
1
y y
2
, el nmero de datos a interpolar n, y dos
arreglos vacos x[], y[], en donde debern colocarse los valores interpolados.
PRCTICA
ARREGLOS CON FUNCIONES
Elaborada por:
M.C. Vicente Fuentes Gea vfg@servidor.unam.mx 9
M.C. Cintia Quezada Reyes cintia@fi-b.unam.mx
Ing. Alejandra Vargas E. De los M. alejandrav@correo.unam.mx
Posteriormente el programa debe invocar a otra funcin que tabule los valores
contenidos en los dos arreglos mencionados. (Ayuda:
n
d
) 0 1 (
= ).
7. Repetir el ejercicio 6 usando la interpolacin coseno, cuya frmula es:
2
2
)) cos( 1 (
=
y
int
= (1
2
)y
1
+
2
y
2
8. Hacer un programa que utilizando una funcin, reciba un arreglo de nmeros
enteros y calcule el promedio de los que estn en posiciones pares.
9. Hacer un programa que utilizando una funcin, reciba un arreglo de nmeros
enteros y calcule el promedio de los que estn en posiciones impares.
10. Hacer un programa que utilizando una funcin, contabilice los dgitos de un nmero
entero y posteriormente indique si un nmero entero tiene ms de dos dgitos.
11. Realizar un programa donde se ingrese un nmero y cada dgito sea cambiado con
base en la tabla siguiente:
Dgito 0 1 2 3 4 5 6 7 8 9
Cambiar por 9 5 4 2 7 6 1 3 0 8
(Sugerencia: Utilizar dos funciones, una para obtener cada dgito que conforma el
nmero y otra para cambiarlo con base en la tabla anterior).
Posteriormente visualizar el nmero que resulta de la modificacin.