尽管你们中的许多人都会对我的目标有一个体面的想法,只是通过阅读标题 - 仍然让我简单地介绍。

我有一个fortran程序 - 它包括一个程序,一些内部子例程,7个具有自己的过程的模块,以及...嗯,就是这样。

没有详细介绍,因为我认为目前没有必要 使用MATLAB的绘图功能(主要是绘图(X,Y))作为我程序的交互部分,将是什么最简单的方法? 目前,我正在使用一些自己的自定义绘图例程(基于HPGL和CalComp的例程),但是作为我的练习的一部分,我想看看它可以去哪里以及如何工作(IS甚至可能是我的建议?)。另外,我会花多少努力?

我知道这个主题在网络上的许多“教程”中得到了广泛的描述,但是由于某种原因,我很难找到真正简单而说明性的介绍性。因此,如果有人可以发布一个或两个简单的例子,我将非常感谢。或者只是把我握住,引导我完成一个工作示例。

平台:IVF 11.

有帮助吗?

解决方案

继续讨论迪斯林作为解决方案,答案不适合评论...

@MSB-你好。对于您的答案写作,我深表歉意,但是这些评论太短了,以答案的答案的形式回答一个问题是...

Dislin的快速绘图功能 - 例程QPLOT仅需要三个参数来绘制曲线:X数组,Y数组和数字N。请参阅手册的第16章。加上只有几个其他调用来选择输出设备并标记轴。我没有使用过,所以我不知道自动缩放有多好。

是的,我知道QuickPlot,并且它是相关的例程,但是它对于我的需求太固定了(无法更改任何内容),是的,它的自动升级有些Quircky。另外,格拉夫内部的边距太大。

或者,如果您想使用GRAF的功率来设置图形框,则有子例程Gaxpar可以自动生成建议的值。 -2作为LabDig的第一个参数会自动确定Tick-Mark标签中的数字数量。

您是否尝试过例程?

抱歉,我找不到您在Dislin索引中拒绝的GAXPAR例程。您确定它是完全这样称呼的吗?

MSB回复: :是的,我确定Gaxpar的拼写。这是《迪斯林9.5 PDF手册》第4章中的最后一个例程。也许这是一个新的例程?另外,还有另一条自动缩放的途径:setSCL-请参阅第6章。

到目前为止,我一直在做什么(除了某些“鸭胶带”解决方案)是

  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来找到数据中最小,最大的值,而不是写下子例程以向外舍入到“良好”圆形值。同样,一个子例程来决定tick痕间距。

这实际上并不容易实现(证明我错的想法将很高兴得到赞赏)。或者我应该说,如果您知道您的价值观所在的粗糙范围很容易。但是,如果您不这样做,并且您不知道您的价值是否位于13-34的范围或1330-3440中,那么...

...如果我在这里完全走错了曲目,请说明您是否有不同的情况。我的英语缺乏,所以我只能希望以上是可以理解的。

在子例程中以确定圆形启动/结束值,您可以将实际的最小值/最大值缩放为始终在1到10之间,然后有一个表格以选择良好的圆形值,然后将其解开回正确范围。

--

其他提示

最简单的方法是将您的Fortran程序写入文件,并让您的MATLAB程序读取这些文件以获取要绘制的信息。我在Linux上进行了大部分数字处理,因此我不确定Windows如何处理一个过程,同时读取文件。

不过,这有点像是一个笨拙的人,因此您可能需要考虑使用MATLAB调用Fortran程序(或部分)并直接获取用于绘制的数据。在这种情况下,您将要调查 创建Fortran MEX文件 在MATLAB文档中。如果您乐于使用MATLAB来推动流程并充当计算服务,这是相对简单的事情,并且可以满足您的需求。我会在使用MATLAB分发的示例中查看简单的Fortran MEX文件。

最后,您可以致电Fortran程序中的MATLAB,搜索文档 打电话给MATLAB引擎. 。我很难看到这可能如何满足您的需求,这不是我非常熟悉的。

如果您再次发布更多详细信息,我也许可以提供更具体的提示,但是您可能应该开始将袖子滚动并潜入MEX文件。

转储MATLAB,因为它的专有,昂贵,腹胀/慢,并且代码不容易并行化。

您应该做的是在Dislin,Plplot,Gino,Gnuplotfortran等线上使用一些东西。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top