gnuplot

paccacheによるディスク使用量節約の効果

2021-04-11に書いたpaccacheによるパッケージキャッシュの整理における、 残すパッケージの世代数とディスク使用容量の削減量との関係を示しておく。bash上で、削除するパッケージ総数とそれらがHDDに占める総容量とを、残す世代数ごとに求め、 awkでgnuplot…

ファイルによる画像データ授受 #5

実のところ、示した方法では環境やタイミングへの依存を解決していない。 プログラム自体でもそれ以外由来でもいいが処理を重くすると覿面に失敗する。 環境にあまり依存することなく正しくやりとりするには、 gnuplotに公開API、特に制御関係のものがあれば…

ファイルによる画像データ授受 #4

元々のプログラムにおける画像データの受け渡しが標準入出力経由だったことから、 画像データから画像オブジェクトを生成するのにImageIO#read(InputStream)を使っていた。 しかし今のコードではFileオブジェクトがあるのだからImageIO#read(File)でもよかっ…

ファイルによる画像データ授受 #3

一時ファイルが既に存在していた時のトラブルを避けるために、 作成時にまだ存在しないことが保証されているファイルを使うことにしよう。 また、プログラムと同じ場所に一時ファイルが置かれるのは行儀が悪いかもなので、 とりあえず一時ファイルを作成する…

ファイルによる画像データ授受 #2

根拠のない数値が入ったままではいや〜んなので除去してみる。 Java側でファイルの存在を確認して開くというのでもいいかもしれないが、 逆転の発想でgnuplotがファイルを作成する前にJavaでファイルを作ってしまおう。 Javaで例外が発生するのはファイルが…

ファイルによる画像データ授受 #1

標準入出力での画像の受け渡しはいろいろと面倒なことがあるので、 Javaが実装された環境であれば使えることが期待されるファイルシステムを利用する。 import java.io.*; import javax.imageio.ImageIO; public class GnuplotUser6 { private static final …

明示的に設定して試してみる

これまでgnuplotの端末設定はpngのデフォルトのままにしていたが、 画像サイズや画素のビット深度などを変えてもこのやり方が通るかどうか確かめてみた。 import java.awt.image.BufferedImage; import java.io.*; import javax.imageio.ImageIO; public cla…

とりあえず策

ということでまずは最小限の変更で対応するためにアドホックに。 ...snip out.println("set terminal png"); out.println("plot sin(x)"); out.println("set output"); out.flush(); BufferedImage image1 = ImageIO.read(in); System.err.println(image1); …

対応策

アプローチは大きく分けて二つある。 すなわち標準入出力経由での画像のやり取りでがんばるかすっぱりあきらめるかである。標準入出力を使わない場合は他のチャネルを介することになる。 gnuplot側が使用でき、かつ、ある程度色々なシステムで普通に使えるも…

判断材料

次のようにして、失敗することは分かっているが、 ImageIO.read(in)で二枚目の画像の取得を試み、 失敗して戻ってきた後のストリームの内容を読み出す。 ...snip out.println("set terminal png"); out.println("plot sin(x+pi/10)"); out.println("set outp…

送信されてきたものを見る

では何か余計なものとは何だろう。 image1が作成された後、入力ストリームからのデータを確認してみる。 import java.awt.image.BufferedImage; import java.io.*; import javax.imageio.ImageIO; public class GnuplotUser5 { private static final String …

何が起きているのか考える

さて原因は何だろう。 もし二枚目の画像データが何らかの原因で送られてきていないのなら、 image2に画像オブジェクトの参照を返すImageIO.read(in)自体から返ってこない。 nullを返しているとはいえ、このメソッドから戻っているということは、 データは送…

画像を複数出力させると

二つのプロットを連続して受け取ってみる。 import java.awt.image.BufferedImage; import java.io.*; import javax.imageio.ImageIO; public class GnuplotUser5 { private static final String GNUPLOT = "/usr/bin/gnuplot"; public static void main(Str…

具体的には

import java.awt.image.BufferedImage; import java.io.*; import javax.imageio.ImageIO; public class GnuplotUser5 { private static final String GNUPLOT = "/usr/bin/gnuplot"; public static void main(String[] args) throws IOException, Interrupt…

Javaからgnuplotへ複数プロット分のデータを送る

複数のプロット分のデータをJavaで生成しgnuplotにチャートを描かせてJava側でそれを順番に表示する。 前出のコードでは二つのプロセス間のデータ授受に標準入出力を利用している。 手軽ではあるがこれが災いして複数の画像を受け取るときに問題が起きる。 I…

Javaからgnuplotへデータを送る

Javaで生成したデータを与えgnuplotにチャートを描かせてJava側でそれを表示する。 gnuplotによって正弦の計算をさせるのではなく、 Java側で正弦の値を一周期21点分π/5ラジアンごとに計算してgnuplotに与える。 基本的には以前に示したコードそのままである…

二次関数ですが

昨日の確率と比の関係をプロットしてみる。 plot [p=0:1] (1-(1-p)**3)/p までグラフがきっちりプロットされていない点に注意。 要は定義域がの二次関数のプロットというだけである。 確率が0に近づくにつれて比が3に漸近していく感じを出すために対数グラフ…

単連結リストの整列 #97 要素数の範囲と密度を増やす

前回の計測結果は大まかな傾向しか見えず、プロット点が少ないと思うので増やしてみた。 ...snip int main(void) { const int nelems[] = {1000, 1778, 3162, 5623, 10000, 17782, 31623, 56234, 100000, 177828, 316228, 562341, 1000000}; const int ntria…

単連結リストの整列 #96 もっと要素数と試行回数を増やして計測

これまで比較による整列に遠慮していたので、 非比較による基数ソートのみで所要時間を計測して時間計算量をみてみる。 ...snip int main(void) { const int nelems[] = {3162, 10000, 31623, 100000, 316228}; const int ntrials[] = {2000, 632, 200, 63, …

単連結リストの整列 #95 隣接交換法、基本選択法、基数ソートの時間計算量のオーダ

前回の結果から要素数に対する処理時間のスケーリング指数を回帰分析で求めてみよう。 f(x,a,b) = a * x + b fit f(x,a1,b1) 'result2.dat' using (log($1)):(log($2)) via a1, b1 fit f(x,a2,b2) 'result2.dat' using (log($1)):(log($3)) via a2, b2 fit f…

単連結リストの整列 #93 バケツソートによる基数ソートの時間計算量

書き忘れたが、前回の結果はUbuntu上で動作させたものである。 この結果から、かなり面倒くさいリスト操作を色々やっているにも関わらず、 バケツソートによる基数ソートは非常に速いことが分かる。 また、この基数ソートの実装では、 ある要素からその一つ…

単連結リストの整列 #84 基本選択法での所要時間のプロット

さて、前回の結果から冪関数への回帰分析を行い、結果をプロットしてみよう。 比較、交換回数の性質は数値による結果だけでも明白なので、 ここでは整列に要した時間に関するものだけを表示する。 'plot2.dat'は隣接交換法による双方向連結リストの整列の結…

単連結リストの整列 #80 要素数に対するスケーリング指数の比較

gnuplotの回帰分析機能を使って、 所要時間を要素数の冪関数へフィッティングして、そのパラメータを求めてみる。 f(x,a,b) = a * x + b fit f(x,a4,b4) 'plot2.dat' using (log($1)):(log($3)) via a4, b4 fit f(x,a5,b5) 'plot2.dat' using (log($1)):(log…

単連結リストの整列 #74 スケーリング指数

直線的なプロット点が描かれれば直線を引きたくなるのは当然である。 gnuplotには回帰分析を行って与えられた関数に当てはめる機能があるので、 これを使って直線のパラメータを求めてみる。 f(x,a,b) = a * x + b fit f(x,a1,b1) 'plot1.dat' using (log($1…

単連結リストの整列 #73 操作回数と所要時間のプロット

数値では分かりにくいので、横軸を要素数、縦軸を操作回数や所要時間で両対数プロットしてみる。 プロットには超定番gnuplotを使う。 set key left top set logscale xyy2 set pointsize 1.5 set xlabel "number of elements in a list" set ytics nomirror …