4

タイトルを読んだだけで、私が何を目指しているのかを理解していただける方も多いと思いますが、簡単な紹介をさせてください。

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

現時点では必要ないと思うので、詳しくは説明しませんが、プログラムのインタラクティブな部分として MATLAB のプロット機能 (主に plot(x,y) といくつかのカスタマイズ) を使用する最も簡単な方法は何でしょうか? 今のところ、私は独自のカスタム プロット ルーチン (HPGL と Calcomp のルーチンに基づく) をいくつか使用していますが、私の演習の一部として、これがどこに行き、どのように機能するかを確認したいと思います (私が提案していることは可能ですか?)。また、私の側ではどのくらいの労力がかかりますか?

この主題がネット上の多くの「チュートリアル」でかなり広範囲に説明されていることは知っていますが、何らかの理由で、本当に単純でありながら説明的な入門的なものを見つけるのに苦労しています. したがって、誰かが簡単な例を 1 つまたは 2 つ投稿できれば、本当に感謝しています。または、私の手を取り、実際の例を 1 つ説明してください。

プラットフォーム: IVF 11.something :) Win XP SP2、Matlab 2008b

4

3 に答える 3

4

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

ただし、これは少し面倒なので、Matlab を使用して Fortran プログラム (またはその一部) を呼び出し、プロット用のデータを直接取得することを検討してください。この場合、Matlab ドキュメントの「Creating Fortran MEX Files 」を調査する必要があります。これは比較的簡単に行うことができ、Matlab を使用してプロセスを駆動し、Fortran をコンピューティング サービスとして機能させることができれば、ニーズに応えることができます。単純な Fortran MEX ファイルについては、Matlab で配布されているサンプルを参照してください。

最後に、Fortran プログラムから Matlab を呼び出すことができます。ドキュメントでCalling the Matlab Engineを検索してください。これがあなたのニーズにどのように適合するかを理解するのは、私には少し難しいです。

再度詳細を投稿していただければ、より具体的なヒントを提供できるかもしれませんが、おそらく、袖をまくり上げて MEX ファイルに飛び込む必要があります。

于 2010-06-01T08:34:32.540 に答える
3

コメントに収まらない答えで、解決策としてDISLINの議論を続けます...

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

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

はい、私はQuickplotとそれに関連するルーチンを知っていますが、私のニーズにはあまりにも固定されており(何も変更できません)、はい、自動スケーリングはやや風変わりです。また、グラフ内のマージンが大きすぎます。

または、GRAFの機能を使用してグラフボックスを設定する場合は、推奨値を自動的に生成するサブルーチンGAXPARがあります。LABDIGの最初の引数として-2は、目盛りラベルの桁数を自動的に決定します。

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

申し訳ありませんが、dislinのインデックスであなたが参照しているGAXPARルーチンが見つかりません。まさにそのように呼ばれていますか?

MSBによる返信:はい、GAXPARのスペルについては確信しています。これは、DISLIN9.5PDFマニュアルの第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の範囲にあるのかわからない場合は、...

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

ラウンドグラフの開始/終了値を決定するサブルーチン内で、実際の最小/最大値を常に1〜10にスケーリングし、適切なラウンド値を選択するためのテーブルを作成してから、スケールを解除して正しい範囲に戻すことができます。

-

于 2010-06-02T04:04:41.700 に答える
2

専用の、高価で、肥大化/遅い、コードの並列化が容易ではないため、Matlab をダンプします。

あなたがすべきことは、DISLIN、PLplot、GINO、gnuplotfortran などの行で何かを使用することです。

于 2010-06-01T22:08:28.607 に答える