前提・実現したいこと
温度分布の計算のプログラムをディリクレ条件のガウス・ザイデル法を用いて数値計算をし、温度分布のグラフを作成したい。
ガウス・ザイデル法を用いて、ある行列の値が収束していくようなプログラムを作成します。(main_01.cを参照)
その数値計算を行った後にその行列をdat形式(g-s_result.datを参照)で出力し、gnuplotで温度分布のグラフを描画します。(g-s_method.pltを参照)
発生している問題・エラーメッセージ
現在つまづいていている点として、main_01.cの実行後に出力されるdat形式のファイルをgnuplotでpm3dを用いてsplotしても以下のようにグラフが全く表示されない点です。
またgnuplot上で以下のエラーが表示されます。
Warning: Single isoline (scan) is not enough for a pm3d plot. Hint: Missing blank lines in the data file? See 'help pm3d' and FAQ.
###追記1
描画結果1
描画できるようにはなりましたが、直線になってしまいます。
###追記2
描画結果2
配列の描画なのでsplot 'XXX.dat' matrix
とすれば描画できる。
軸の範囲を0<=x<=2、0<=y<=1にしたいが、描画範囲をそのように指定すると、当然だが範囲が狭まるので正しい表示にはならない。
軸の範囲が0<=x<=200、0<=y<=100になっているのは配列(行列)サイズがa[100][200]となっているためですが、軸は0<=x<=2、0<=y<=1としなければいけない制約があります。また、格子間隔(離散した間隔)が0.01という制約もあるためa[1/0.01][2/0.01]としております。この配列サイズを維持したまgnuplot上での軸を0<=x<=2、0<=y<=1と表示するにはどうすればよいのでしょうか。
試したこと
pm3dを用いてグラフが表示されない原因をいろいろとインターネットで調べたところ、出力されるdatファイルに問題があると思います。
参照サイト
このサイトの
3.10 pm3d によるデータファイルの splot で何も表示されません
によるとdatファイルに2つのつながっている線 (孤立線) を分離する空行がないと描画できないとありましたが、今回私が作成しようとしているプログラムで出力されるdatファイルのどのタイミングで空行を入れるのかわかりません。つきましては、プログラムmain_01.cにてdatファイルを出力している箇所に適切な空行を入れる命令をご提示いただけますでしょうか。
または、main_01.cのアルゴリズムが間違えていましたら、ご指摘いただければ幸いです。
かれこれ4時間以上考えたり、インターネットで調べてみましたが解決できませんでした。よろしくお願いいたします。
該当のソースコード
gnuplot
1cd 'C:\Users\%USERNAME%\Desktop\gnuplot' 2 3set pm3d 4set pm3d map 5set pm3d interpolate 5, 5 6set ticslevel 0 7#set cbrange[0:1] 8#set xrange [0:200] 9#set yrange [100:0] 10set autoscale xfix 11set autoscale yfix 12set yrange [] reverse 13set autoscale cbfix 14set palette defined(0"#00008b",1"#2ca9e1",2"#38b48b",3.5"#ffff00",5"#eb6101",5.3"#c9171e") 15splot 'g-s_result.dat' matrix nonuniform
補足情報(FW/ツールのバージョンなど)
以下の環境で実施しております。
Visual Studio 2019 (C言語の実行環境)
Visual Studio Code
gnuplot 5.4(グラフ描画ソフト)
回答2件
あなたの回答
tips
プレビュー