Question

Bien que beaucoup d'entre vous une idée décente de ce que je vise, juste à la lecture du titre - me permettre une introduction simple encore

.

J'ai un programme Fortran -. Il se compose d'un programme, des sous-routines internes, 7 modules avec ses propres procédures, et ... uhmm, voilà

Sans entrer dans les détails, car je ne pense pas qu'il soit nécessaire à ce stade, quelle serait la meilleure façon d'utiliser les fonctions de traçage de Matlab (principalement parcelle (x, y) avec quelques personnalisations) comme une partie interactive de mon programme? Pour l'instant j'utilise certains de mes propres routines de traçage personnalisées (basé sur HPGL et les routines de Calcomp), mais tout dans le cadre d'un exercice de ma part, je souhaitez voir où cela pourrait aller et comment ça marcherait (est-il même possible ce que je veux dire?). En outre, combien d'efforts faudrait-il de ma part?

Je sais que ce sujet a été assez longuement décrit dans de nombreux « tutoriels » sur le net, mais pour une raison quelconque j'ai du mal à trouver les simples d'introduction vraiment encore illustratives. Donc, si quelqu'un peut poster un exemple ou deux, simples, je serais vraiment reconnaissant. Ou tout simplement me prendre par la main et me guider à travers un exemple de travail.

Plate-forme: fécondation in vitro :) 11.something sur Win XP SP2, Matlab 2008b

Était-ce utile?

La solution

Poursuivre la discussion sur DISLIN comme une solution, une réponse qui ne rentrera pas dans un commentaire ...

@M. S. B. - bonjour. Je présente mes excuses pour avoir écrit dans votre réponse, mais ces commentaires sont beaucoup trop court, et répondre à une question sous la forme d'une réponse avec une réponse est ... de toute façon ...

Il y a la fonction de tracé rapide de DISLIN - routine QPLOT n'a besoin que de trois arguments pour tracer une courbe: tableau X, tableau Y et numéro N. Voir le chapitre 16 du manuel. De plus que plusieurs appels supplémentaires pour sélectionner le périphérique de sortie et étiqueter les axes. Je ne l'ai pas utilisé, alors je ne sais pas à quel point l'auto-mise à l'échelle est.

Oui, je sais de QuickPlot, et il est des routines connexes, mais il est trop fixe pour mes besoins (ne peut rien changer), et oui, il est un peu de autoscaling quircky. En outre, les marges trop grandes à l'intérieur du graf.

Ou si vous voulez utiliser la puissance de GRAF pour configurer votre boîte de graphique, il est sous-programme GAXPAR aux valeurs recommandées générer automatiquement. -2 comme premier argument à LABDIG détermine automatiquement le nombre de chiffres dans les étiquettes de graduation.

Avez-vous essayé les routines?

Désolé, je ne peux pas trouver la routine GAXPAR vous reffering dans l'index de DISLIN. Etes-vous sûr qu'il est appelé exactement comme ça?

Réponse M.S.B :. Oui, je suis sûr de l'orthographe de GAXPAR. Il est la dernière routine au chapitre 4 du manuel PDF DISLIN 9.5. Peut-être est une nouvelle routine? Il y a aussi une autre voie de mise à l'échelle automatique. SetScl - voir chapitre 6

Jusqu'à présent, ce que je fais (en dehors de quelques solutions "bande de canard") est

  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

qui mettra les valeurs d'extrême droite sur l'axe. Est-ce que vous savez peut-être comment pourrais-je aller pour avoir une « grande marge tique » à l'extérieur, pour mettre un peu d'espace entre la courbe et l'axe (tout en conservant les effets de SetScl)?

Même si vous ne le faites pas comme intégrée auto-mise à l'échelle, si vous utilisez déjà DISLIN, vos propres modèles de mise à l'échelle automatique sera plus facile que d'appeler Fortran de Matlab. Vous pouvez utiliser les fonctions intrinsèques Fortran minval et maxval pour trouver les plus petites et les plus grandes valeurs dans les données, que d'écrire un sous-programme à l'extérieur autour de « belles » valeurs rondes. De même, un sous-programme pour décider de l'espacement de graduation.

Ceci est en fait pas si facile à réaliser (et des idées pour me prouver sera apprécié avec plaisir). Ou devrais-je dire, il est facile si vous connaissez la gamme approximative dans laquelle vos valeurs se situeront. Mais si vous ne le faites pas, et vous ne savez pas si vos valeurs se situeront dans la gamme de 13-34 ou dans la 1330-3440, puis ...

... si je suis sur la mauvaise voie complètement ici, s'il vous plaît, expliquez si vous ment quelque chose de différent. Mon anglais est un peu défaut, donc je ne peux qu'espérer que ce qui précède est compréhensible.

Dans un sous-programme pour déterminer les valeurs de début / fin graphique tour, vous pouvez l'échelle des valeurs min réelle / max à toujours être compris entre 1 et 10, puis une table pour prendre de belles valeurs rondes, puis de nouveau unscale à la plage correcte.

-

Autres conseils

La façon la plus simple serait d'avoir votre programme Fortran écrire dans le fichier, et votre programme Matlab lire ces fichiers pour les informations que vous souhaitez tracer. Je fais la plupart de mon numéro crissement sur Linux, donc je ne suis pas entièrement sûr de savoir comment Windows gère un processus d'écriture d'un fichier et une autre lecture en même temps.

C'est un peu une bidouille, donc vous voudrez peut-être penser à utiliser Matlab pour appeler le programme Fortran (ou en partie) et d'obtenir des données directement pour le traçage. Dans ce cas, vous aurez envie d'enquêter sur Création Fortran MEX fichiers dans la documentation Matlab. Ceci est relativement simple à faire et serait répondre à vos besoins si vous étiez heureux d'utiliser Matlab pour conduire le processus et Fortran pour agir en tant que service de calcul. Je regardais dans les exemples distribués avec Matlab pour les fichiers simples Fortran MEX.

Enfin, vous pouvez appeler Matlab de votre programme Fortran, recherche la documentation Appel du moteur Matlab . Il est un peu plus difficile pour moi de voir comment cela pourrait répondre à vos besoins, et ce n'est pas quelque chose que je suis familier avec terriblement.

Si vous publiez à nouveau avec plus de détails, je peux être en mesure de fournir des conseils plus spécifiques, mais vous devriez probablement commencer à rouler vos manches et la plongée dans les fichiers MEX.

Dump Matlab parce que son propriétaire, coûteux, pléthorique / lent et les codes ne sont pas faciles à paralléliser.

Ce que vous devez faire est d'utiliser quelque chose sur les lignes de DISLIN, PLplot, GINO, gnuplotfortran etc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top