Fortranプログラムのインタラクティブな部分としてMatlabのプロット機能を使用する

StackOverflow https://stackoverflow.com/questions/2946525

質問

あなたの多くは、私が目指していることについてまともなアイデアを持っているでしょうが、タイトルを読んだだけでは、私に簡単な紹介をさせてください。

私はFortranプログラムを持っています - それはプログラム、いくつかの内部サブルーチン、独自の手順を備えた7つのモジュールで構成されています。

詳細を説明することなく、この時点でそれが必要だとは思わないので、 私のプログラムのインタラクティブな部分として、Matlabのプロット機能(主にいくつかのカスタマイズを備えたプロット(x、y))を使用する最も簡単な方法は何ですか? 今のところ、私は自分のカスタムプロットルーチン(HPGLとCalcompのルーチンに基づいて)を使用していますが、私のエクササイズの一部として、これがどこに行くことができ、どのように機能するかを見たいです(私が提案していることさえ可能ですか?)。また、それは私の側にどれだけの努力が必要ですか?

このテーマは、ネット上の多くの「チュートリアル」でかなり広範囲に説明されていることを知っていますが、何らかの理由で、本当にシンプルでありながら実例のある紹介を見つけるのに苦労しています。だから、誰かが例を1つか2つ、簡単なものを投稿できるなら、私は本当に感謝しています。または、手で私を連れて行って、1つの作業例を案内してください。

プラットフォーム:IVF 11.Something :) Win XP SP2、MATLAB 2008B

役に立ちましたか?

解決

コメントに合わない答えを解決策として継続して、解決策として...

@MSB-こんにちは。私はあなたの答えに書いたことをお詫びしますが、これらのコメントはあまりにも短すぎて、答えの答えの形で質問に答えることは...とにかく...

Dislinにはクイックプロット機能があります - ルーチンQplotは、曲線をプロットするために3つの引数のみを必要とします:x配列、y配列、番号N。マニュアルの第16章を参照してください。さらに、出力デバイスを選択し、軸にラベルを付けるための追加の呼び出しのみがあります。私はこれを使用していないので、自動スケーリングがどれほど良いかわかりません。

はい、私はQuickPlotを知っています、そしてそれは関連するルーチンですが、それは私のニーズにはあまりにも固定されています(何も変更できません)、そしてはい、それはややQuarcyです。また、Graf内の大きなマージンが大きすぎます。

または、GRAFのパワーを使用してグラフボックスをセットアップする場合は、推奨される値を自動的に生成するためのサブルーチンGAXPARがあります。 -2 labdigに対する最初の引数として、ティックマークラベルの数字数を自動的に決定します。

ルーチンを試しましたか?

申し訳ありませんが、Dislinのインデックスであなたが報告しているGaxparルーチンを見つけることができません。あなたはそれがまさにそのように呼ばれていると確信していますか?

MSBによる返信: :はい、Gaxparの綴りについて確信しています。これは、Dislin 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の効果を維持しながら)、どうすれば外側に1つの「メジャーマージン」を持つことができるでしょうか?

組み込みの自動スケーリングが気に入らなくても、すでにDislinを使用している場合、MatlabからFortranを呼び出すよりも、独自の自動スケールを転がす方が簡単です。 Fortran内発生関数を使用して、MinvalとMaxvalを使用して、データ内の最小の値と最大の値を見つけることができます。サブルーチンを書いて、「素敵な」ラウンド値に外側に丸くすることができます。同様に、ティックマークの間隔を決定するサブルーチン。

これは実際にはそれほど簡単ではありません(そして、私が間違っていることを証明するアイデアは喜んで評価されます)。それとも、あなたの価値が嘘をつくラフな範囲を知っていれば、それは簡単です。しかし、そうでない場合、そしてあなたの価値が13-34の範囲にあるのか、それとも1330-3440の範囲にあるのかわからない場合、...

...私がここで完全に間違ったトラックにいる場合は、何か違うことを言及しているかどうかを説明してください。私の英語はやや不足しているので、上記が理解できることを願っています。

サブルーチン内でラウンドグラフの開始/終了値を決定すると、実際のmin/max値を常に1〜10にスケーリングし、テーブルを作成して素敵な丸い値を選択し、正しい範囲に戻すことができます。

--

他のヒント

最も簡単な方法は、Fortranプログラムをファイルに書き込み、Matlabプログラムにプロットする情報のファイルを読み取らせることです。私はLinuxで数字を計算しているほとんどのことを行っているので、Windowsがファイルを作成するプロセスと同時にそれを読んでいるプロセスをどのように処理するかは完全にはわかりません。

しかし、それはちょっとしたKludgeなので、Matlabを使用してFortranプログラム(またはその一部)を呼び出し、プロットのために直接データを取得することを考えてください。この場合、調査する必要があります Fortran Mexファイルの作成 MATLABドキュメントで。これは比較的簡単であり、Matlabを使用してプロセスを促進し、Fortranがコンピューティートサービスとして機能することを喜んでいた場合、あなたのニーズに応えます。単純なFortran MexファイルのためにMATLABで配布された例を調べます。

最後に、FortranプログラムからMatlabに電話して、ドキュメントを検索できます Matlabエンジンを呼び出します. 。これがあなたのニーズにどのように合うかを見るのはもう少し難しいことであり、それは私がひどく知っているものではありません。

詳細をもう一度投稿すると、より具体的なヒントを提供できる場合がありますが、おそらく袖を転がしてMEXファイルに飛び込み始める必要があります。

Matlabは、その独自の、高価で、肥大化/スローであり、コードを並べるのは簡単ではないため、Dump Matlabです。

あなたがすべきことは、Dislin、Plplot、Gino、Gnuplotfortranなどのラインで何かを使用することです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top