Parcial 1

May 24, 2018 | Author: rafaelgijon | Category: Complex Number, Analog To Digital Converter, Function (Mathematics), Linearity, Physics


Comments



Description

Introducción al CómputoPrimer 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 [email protected] 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.
Copyright © 2024 DOKUMEN.SITE Inc.