Epsilones
Laboratorio
Siguenos en Blogger

 ◄
► 
Siguiente

Representación tridimensional de funciones de dos variables

La finalidad de esta práctica es representar tridimensionalmente funciones de dos variables reales con valores reales. Antes de empezar, y para hacernos una idea, recomiendo al lector que ejecute el programa f2v.exe pulsando aquí y que pruebe a visualizar alguno de los ejemplos que incorpora (basta elegirlo de la lista y después mover la imagen arrastrándola con el botón izquierdo del ratón).

Lo interesante, por supuesto, no es limitarse a ver los ejemplos, sino poder utilizar el programa para visualizar cualquier función que nos interese. Para ello, y dada cierta función, habrá que generar un archivo con la información pertinente. ¿Qué información es esa? Pues los valores de la función en los 10000 nodos de una rejilla de 100x100.

Para verlo más claro, vamos a suponer de momento que la rejilla que utilizamos tiene tan solo 20x20 nodos. Tendríamos entonces algo como esto:

Si al programa le decimos que el valor de la función que queremos representar es cero para todos los nodos excepto para aquel que se encuentra en la posición (10, 10), lugar donde la función vale 1, el programa mostraría esto:

Para complicarlo un poco más, podemos decirle que la función vale 1 en todos los nodos con índices en el dominio
[8,12]x[8,12]. Entonces veríamos esto:

Tampoco es que sea pasionante, pero sirve para hacerse una idea. Si en vez en vez de usar una rejilla de 20x20 usamos una de 100x100 y la usamos para dividir, por poner un ejemplo, el dominio [π, 5π]x[2π, 6π], y sobre él aplicamos la función f(x) = y2·senx, entonces el programa mostrará esto otro:

El formato del fichero... y el código

Para que el programa f2v.exe genere lo anterior debemos pasarle la información en un fichero. Ese fichero hay que copiarlo en la misma carpeta donde se encuentre el programa y debe tener como extensión f2v. Su contenido es sencillo: 10000 registros, cada uno de los cuales debe contener un único dato en coma flotante de doble precisión (8 bytes). Los 10000 datos son, obviamente, las imágenes correspondientes a los nodos de la rejilla de 100x100 puntos con la que se discretiza el dominio de la función.

Aunque no debería, a continuación copio el código para generar los datos de la figura anterior. Está en lenguage C++, pero traducirlo a otros lenguajes es trivial:

void Grabar()
{
CString nombre;
CFile fichero;
double factor=0.1;
double pi=4*atan(1);
double x1=pi, x2=5*pi, y1=2*pi, y2=6*pi;
double x,y,registro;
nombre="prueba.f2v";

fichero.Open(nombre,CFile::modeCreate|CFile::modeWrite);

for (int i=0;i<100;i++)
{

x=x1+i*(x2-x1)/99;
for (int j=0;j<100;j++)
{
y=y1+j*(y2-y1)/99;
registro= factor*sin(x)*y*y;
fichero.Write(&registro,sizeof(double));
}
}

fichero.Close();

}

Los valores x1, x2, y1, y2 corresponden al dominio que vamos a representar, que en el ejemplo es [π, 5π]x[2π, 6π]. Por su parte, el campo factor sirve para modificar la escala de las imágenes. En negrita está resaltada la línea donde se inserta la función a representar, en este caso f(x) = y2·senx.

Si todo va bien, el código anterior grabará un fichero de nombre prueba.f2v que podrá ser leído por el programa f2v.exe. Bastará entonces elegir el fichero en la lista "Leer fichero" para visualizar la función.


 
Comentarios
Epsilones. Página + o - matemática de Alberto. Correo: alberto@epsilones.com. En la red desde el 4-7-2002 (ya hace). Última actualización: ver Novedades.
Siguenos en Blogger
 

 

Con esto se termina la página:

El contenido de esta página requiere una versión más reciente de Adobe Flash Player.

Obtener Adobe Flash Player