首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用MATLAB的绘图特性作为Fortran程序的交互部分

利用MATLAB的绘图特性作为Fortran程序的交互部分
EN

Stack Overflow用户
提问于 2010-05-31 23:47:33
回答 3查看 846关注 0票数 4

虽然你们中的许多人会对我的目标有一个很好的了解,只是从阅读标题--允许我做一个简单的介绍。

我有一个Fortran程序-它包括一个程序,一些内部子程序,有自己的过程的7个模块,和.嗯,就这样。

没有详细说明,因为我认为在这一点上没有必要使用的绘图功能(主要是用一些定制的绘图功能)作为我程序的交互部分。目前正在使用我自己的一些自定义绘图例程(基于HPGL和Calcomp的例程),但作为我的练习的一部分,我想看看它会在哪里进行,以及它将如何工作(甚至可能是我的建议吗?)还有,我要付出多少努力?

我知道这个主题在网络上的许多“教程”中都有相当广泛的描述,但出于某种原因,我很难找到真正简单但具有说明性的介绍性内容。所以如果有人能发一两个简单的例子,我会非常感激的。或者牵着我的手,引导我完成一个工作的例子。

平台: IVF 11)在Win XP SP2上

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-02 04:04:41

继续讨论DISLIN的解决方案,并给出一个不适合评论的答案.

@M.S.B.-你好。我很抱歉写在你的答复,但这些评论太短,并回答一个问题的形式是.总之..。

DISLIN的快速绘图特性--常规QPLOT只需要三个参数来绘制曲线:X数组、Y数组和数字N。参见手册第16章。另外,只需要几次额外的调用来选择输出设备并标记轴。我没有用过这个,所以我不知道自动缩放有多好。

是的,我知道Quickplot,以及它的相关例程,但是它对我的需求来说太固定了(不能改变任何东西),而且是的,它的自动标度有点古怪。而且,graf内部的利润太大了。

或者,如果您想使用GRAF的功能来设置您的图形框,则会有子例程GAXPAR自动生成推荐值。-2作为LABDIG的第一个参数,自动确定勾标标签中的数字数。

你试过这些套路了吗?

对不起,我在dislin的索引中找不到您要发送的GAXPAR例程。你确定它的名字就是这样的吗?

回复M.S.B.:是的,我确信GAXPAR的拼写。这是DISLIN 9.5 PDF手册第4章中的最后一个例程。也许这是一种新的套路?还有另一条自动缩放的途径: SETSCL --参见第6章。

到目前为止,我所做的(除了一些“鸭带”解决方案)是

代码语言:javascript
复制
  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

它会把极大值放在轴上。你知道我怎么才能在外边有一个“主要的滴答边”,在曲线和轴线之间放一些区域(同时仍然保持着setscl的效果)?

即使您不喜欢内置的自动缩放,如果您已经在使用DISLIN,滚动您自己的自动缩放将比从MATLAB调用Fortran更容易。您可以使用Fortran内部函数minval和maxval来查找数据中的最小值和最大值,而不是编写一个子例程向外四舍五入为“尼斯”圆形值。类似地,一个子程序来决定勾标间距.

这实际上并不容易做到(证明我错了的想法也会很受欢迎)。或者我应该说,如果你知道你的价值观的大致范围,那是很容易的。但如果你不知道你的价值是在13-34还是1330-3440,那么.

..。如果我在这里完全走错了轨道,请解释一下你是否有不同的地方。我的英语有点欠缺,所以我只能希望上面的内容是可以理解的。

在一个子例程中确定圆图的开始/结束值,您可以缩放实际的min/max值,使其始终在1到10之间,然后有一张表来选择漂亮的圆值,然后不缩放到正确的范围。

--

票数 3
EN

Stack Overflow用户

发布于 2010-06-01 08:34:32

最简单的方法是让您的Fortran程序写入文件,并让您的Matlab程序读取这些文件的信息,您想要绘制。我在Linux上做了大部分的数字处理,所以我不完全确定Windows是如何处理一个进程编写一个文件,另一个进程同时读取它。

不过,这有点离谱,所以您可能需要考虑使用Matlab调用Fortran程序(或其中的一部分),并直接获取数据进行绘图。在本例中,您需要在Matlab文档中研究如何创建Fortran文件。这样做相对简单,如果您乐于使用Matlab驱动流程,使用Fortran作为计算服务,则可以满足您的需求。我会查看与Matlab一起分发的示例,以获得简单的Fortran文件。

最后,您可以从Fortran程序调用Matlab,搜索调用Matlab引擎的文档。对我来说,这可能更难满足你的需求,而且我对此并不十分熟悉。

如果你再次发帖更详细,我可能能够提供更具体的提示,但你可能应该开始卷起你的袖子和潜水到MEX文件。

票数 4
EN

Stack Overflow用户

发布于 2010-06-01 22:08:28

转储Matlab,因为它的专有,昂贵,臃肿/缓慢和代码是不容易并行化。

您应该做的是在DISLIN、PLplot、GINO、gnuplotfortran等行上使用一些东西。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2946525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档