Pregunta

A pesar de que muchos de ustedes tienen una idea decente de lo que estoy apuntando, sólo de leer el título - Me permite una sencilla introducción todavía

.

Tengo un programa de Fortran -. Que consiste en un programa, algunas subrutinas internas, 7 módulos con sus propios procedimientos, y ... uhmm, eso es todo

Sin entrar en mucho detalle, porque yo no creo que sea necesario en este punto, ¿cuál sería la forma más fácil de utilizar las funciones de MATLAB de trazado (principalmente plot (x, y) con algunas personalizaciones) como una parte interactiva de mi programa? Por ahora estoy usando un poco de mi propia costumbre trazado de rutinas (basado en HPGL y rutinas de Calcomp), pero sólo como parte de un ejercicio de mi parte, me 'd como para ver dónde podría ir y cómo podría funcionar (es incluso posible lo que estoy sugiriendo?). Además, la cantidad de esfuerzo tomaría por mi parte?

Sé que este tema se ha descrito más ampliamente en muchos "tutoriales" en la red, pero por alguna razón no tengo problemas para encontrar los introductores muy simples pero ilustrativos. Así que si alguien puede publicar uno o dos ejemplos, los simples, estaría muy agradecido. O simplemente me lleve de la mano y me guía a través de un ejemplo de trabajo.

Plataforma: FIV 11.something :) en Windows XP SP2, Matlab 2008b

¿Fue útil?

Solución

Continuando con la discusión de DISLIN como una solución, una respuesta que no cabe en un comentario ...

@M. S. B. - hola. Me disculpo por escribir en su respuesta, pero estos comentarios son demasiado corto, y respondiendo a una pregunta en la forma de una respuesta con una respuesta es ... en fin ...

No es la característica Quick Plot de DISLIN - QPLOT rutina necesita sólo tres argumentos para trazar una curva: array X, Y y número variedad N. Véase el capítulo 16 del manual. Plus sólo varias llamadas adicionales para seleccionar el dispositivo de salida y la etiqueta de los ejes. No he utilizado esto, así que no sé lo bien que la escala automática es.

Sí, sé de QuickPlot, y es rutinas relacionadas, pero es demasiado fijo para mis necesidades (no se puede cambiar nada), y sí, es autoscaling es algo quircky. Además, también grandes márgenes dentro del Graf.

O si desea utilizar el poder de GRAF fin de configurar el gráfico, hay GAXPAR subrutina para generar automáticamente los valores recomendados. -2 como primer argumento a LABDIG determina automáticamente el número de dígitos en las etiquetas de marca de activación.

¿Has probado las rutinas?

Lo siento, no puedo encontrar la rutina GAXPAR que estés según los planes de en el índice de DISLIN. ¿Estás segura que se llama exactamente así?

Responder por M.S.B . Sí, estoy seguro de la ortografía de GAXPAR. Es la última rutina en el capítulo 4 del manual en formato PDF DISLIN 9.5. Tal vez es una nueva rutina? También hay otro camino hacia la escala automática:. SetSCL - véase el Capítulo 6

Hasta ahora, lo que he estado haciendo (aparte de algunas soluciones "cinta de pato") es

  use dislin; implicit none

  real, dimension(5) :: &
  x = [.5, 2., 3., 4., 5.], &
  y = [10., 22., 34., 43., 15.]
  real :: xa, xe, xor, xstp, &
          ya, ye, yor, ystp
  call setpag('da4p'); call metafl('xwin');
  call disini(); call winkey('return');

  call setscl(x,size(x),'x'); 
  call setscl(y,size(y),'y')

  call axslen(1680,2376) !(8/10)*2100 and 2970, respectively
  call setgrf('name','name','line','line')

  call incmrk(1); call hsymbl(3);

  call graf(xa, xe, xor, xstp, ya, ye, yor, ystp); call curve(x,y,size(x))
  call disfin()

  end

que pondrá los valores extremos a la derecha en el eje. ¿Sabe usted cómo tal vez podría ir a tener una "mayor margen tick" en el exterior, como para poner un poco de área entre la curva y el eje (si bien mantienen los efectos de SetSCL)?

Incluso si no te gusta el incorporado en la escala automática, si ya está utilizando DISLIN, rodar su propia escala automática será más fácil que llamar Fortran desde MATLAB. Puede utilizar las funciones intrínsecas de Fortran MINVAL y Maxval para encontrar los valores mínimos y máximos de los datos, que escribir una subrutina para el exterior redondas para "buenos" valores redondos. Del mismo modo, una subrutina para decidir sobre el intervalo marca de activación.

Esto no es realmente tan fácil de lograr (y las ideas a mí demostrar que están equivocados será apreciado mucho gusto). O debería decir, es fácil si conoce la gama aproximada en la que sus valores se encuentran. Pero si no lo hace, y no se sabe si sus valores se encuentran en el rango de 13-34 o en el 1330-3440, entonces ...

... si estoy en el camino equivocado por completo aquí, por favor, explique si ción algo diferente. Mi Inglés es un poco deficiente, por lo que sólo puedo esperar que lo anterior es comprensible.

Dentro de una subrutina para determinar los valores de inicio / final del gráfico ronda, se podía escalar los reales valores mín / máx a siempre estar entre 1 y 10, y luego tener una mesa para recoger los valores redondos agradables, a continuación, volver unscale a la gama correcta.

-

Otros consejos

La forma más fácil sería tener su programa de escritura Fortran a archivo, y tienen su programa Matlab leer esos archivos para la información que desea trazar. Hago la mayor parte de mi cálculos numéricos en Linux, así que no estoy del todo seguro de cómo Windows maneja un proceso de escritura de un archivo y otro de leerlo al mismo tiempo.

Esto es un poco de un kludge embargo, lo que podría querer considerar el uso de Matlab para llamar al programa de Fortran (o parte de ella) y obtener datos directamente para el trazado. En este caso, usted querrá investigar Creación de Fortran MEX Archivos en la documentación Matlab. Esto es relativamente sencillo de hacer y que sirven a sus necesidades si estuviera feliz de usar Matlab para conducir el proceso y Fortran para actuar como un servicio de computación. Me vería en los ejemplos distribuidos con Matlab para simples archivos MEX Fortran.

Por último, se podría llamar Matlab de su programa de Fortran, buscar en la documentación de Llamando al Matlab Motor . Es un poco más difícil para mí ver cómo esto podría satisfacer sus necesidades, y no es algo que estoy terriblemente familiarizado.

Si publica de nuevo con más detalle que puede ser capaz de proporcionar consejos más específicos, pero probablemente debería empezar a rodar sus mangas para arriba y para bucear en archivos MEX.

Dump Matlab porque su propietario, caro, hinchado / lento y códigos no son fáciles de poner en paralelo.

Lo que debe hacer es usar algo en las líneas de DISLIN, PLplot, GINO, gnuplotfortran etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top