Sie sind auf Seite 1von 3

Introducción al Cómputo

Primer Parcial - 30/09/2010

Instrucciones:
Este parcial es a libro abierto, puede consultar sus notas, programas, información disponible en la red, etc. Todos
los programas que realice deben ser enviados a icom@ib.cnea.gov.ar antes de finalizar el examen (30/09/2010
18:30). Llame a cada archivo apellido_ejN.c, utilizando su apellido y con N el número de ejercicio resuelto.
Comente sus programas adecuadamente describiendo el algoritmo desarrollado.

Ejercicio 1 - Números complejos


Entre los tipos de variables numéricas que hemos visto en clase no se encuentran los números complejos. Una
posibilidad de representación de los mismos es mediante el uso de vectores de dimensión 2, correspondientes a
la parte real y compleja del número complejo.

Implemente la aritmética de números complejos representados de esta manera, según los siguientes prototipos:

// Módulo de un complejo
double mod_Comp(double z[2]);

// Argumento de un complejo
double arg_Comp(double z[2]);

// Conjugado de un complejo
void conj_Comp(double z[2], double res[2]);

// Suma de dos complejos: res = w + z


void suma_Comp(double w[2], double z[2], double res[2]);

// Resta de dos complejos: res = w - z


void resta_Comp(double w[2], double z[2], double res[2]);

// Producto de dos complejos: res = w * z


void prod_Comp(double w[2], double z[2], double res[2]);

// Producto de un complejo por un número real: res = z * a


void prod_Comp_s(double z[2], double a, double res[2]);

// Division de dos complejos: res = w / z


void div_Comp(double w[2], double z[2], double res[2]);

// Exponencial de un complejo: res = exp(z)


void exp_Comp(double z[2], double res[2]);

// Compara dos complejos y retorna 1 si son iguales y 0 si son diferentes


// con tolerancia tol
int compara_Comp(double w[2], double z[2], double tol);

// Cálculo de las N raices enésimas de un complejo


// Devuelve en res[][2] las N raíces
void raices_Comp(double z[2], int N, double res[][2]);

Utilizar en cada caso, siempre que sea posible, las funciones previas. En complejos_ej1.c se verifican algunas de
las operaciones, comprobando que las funciones anteriores devuelvan los resultados correctos.
Ejercicio 2 - Coeficiente de difusión
Una caminata al azar es un proceso en el cual una o más partículas no interactuantes se desplazan en un dominio
n-dimensional dando en cada paso temporal (Δt) saltos de longitud Δx en direcciones aleatorias. Uno de los casos
más simples y estudiados es el que considera una red cuadrada bidimensional donde en cada paso de tiempo los
desplazamientos permitidos son equiprobables y sólo cuatro: arriba, abajo, derecha, izquierda.

Las caminatas al azar están íntimamente relacionadas con la descripción microscópica de la difusión. Se puede
mostrar que si se toman las trayectorias de muchas partículas en caminatas al azar el valor medio del
desplazamiento cuadrático es proporcional al tiempo, y la constante de proporcionalidad está asociada al
coeficiente de difusión.

Si consideramos que las partículas originalmente están ubicadas en (0) = y se mueven en dos dimensiones,
lo anterior se traduce en que < ( ( ) − ) > = 2 , donde es el índice de partícula, <> es el promedio

sobre las partículas, ( ) = ( )+ ( ) y D es el coeficiente de difusión.

Se pide simular el random walk de 1000 partículas en una red bidimensional cuadrada durante 10000 pasos
temporales, y calcular para cada tiempo el valor de D. Considerar que Δt = Δx = 1. Analizar si para valores
grandes de t (pasos temporales) el valor de D se estabiliza.

Ejercicio 3 - Transformación por puntos de apoyo


Es una práctica común en física experimental y en la industria en general, que cuando se quiere medir una
magnitud física (presión, temperatura, posición, etc.) se utiliza un transductor que transforma la magnitud física
en una corriente eléctrica (o en un voltaje) que luego es medida a través de un conversor analógico-digital (ADC)
que convierte linealmente esa señal eléctrica en un número entero que es proporcional a la señal eléctrica
medida.

Para hacer el camino inverso y poder encontrar el valor de la magnitud física a partir de la salida del ADC es
necesario conocer la función de transferencia del transductor.

Si el transductor tiene un comportamiento lineal, alcanza con saber qué magnitudes físicas representan una
salida 0 y una a fondo de escala del ADC y aplicar una transformación lineal:

M M(adc) = M0 + (Mmax – M0) * adc / MAX

Mmax

M0

adc
MAX
Hay casos en que la función de transferencia no es lineal y no puede ser representada como una recta como en el
caso anterior. Una posible solución a esto es utilizar la técnica por puntos de apoyo o de linearización por tramos.
Esta técnica se basa en representar la función de transferencia como un conjunto de segmentos de recta, como
los que se muestran en la figura siguiente:

M
Mn

Mi

M0

adc
i n

Apuntando a resolver el problema anterior se solicita que se implementen las siguientes funciones (se solicita un
respeto estricto de los prototipos):

// Función que debe calcular y retornar la magnitud a la que le


// corresponde el valor medido adc.
// adc representa el valor medido por el ADC.
// apoyo[i][0] representa el valor de adc del punto i.
// apoyo[i][1] representa la magnitud asociada.
// nApoyos indica la cantidad de puntos de apoyo.
// la matriz apoyo está ordenada en abscisas.
// esta función utiliza las funciones de soporte ‘buscaApoyo’ e ‘interpola’
double convierte(int adc, double apoyos[][2], int nApoyos);

// Función que debe calcular el índice del punto con abscisa menor
// o igual al adc, para ello utiliza un algoritmo de búsqueda
// binaria. Esta es una función de soporte de la función ‘convierte’
int buscaApoyo(int adc, double apoyos[][2], int nApoyos);

// Función que interpola linealmente entre los puntos apoyos[idx][0] y


// apoyos[idx+1][0]. Esta es una función de soporte de la función ‘convierte’
double interpola(int adc, double apoyos[][2], int nApoyos, int idx);

En apoyos_ej3.c se encuentra un esqueleto que facilita la implementación y prueba de las funciones pedidas.

Das könnte Ihnen auch gefallen