暇な理系大学生の備忘録

ちょっとしたことをつらつらと

初心者による初心者のためのLaTeXの使い方【様々な数式の書き方編】

こんにちは。前回の超基礎編からかなり空いてしまいましたがLaTeXの使い方について少し解説したいと思います。

 

基本的に環境に依存しませんが私の環境はOS X El CapitanTeX Shop(4.0.1)で作業をしています。また、Windows 10、TeX Worksでも書いています。

 

 

今回紹介するのはLaTeXにおける数式の書き方です。

LaTeXにおいてすべての操作はC言語Pythonのようなプログラミング言語のようにすべてソースファイルを記述することで行うので、当然数式の記述もコマンドを記述することになります。

 

Wordなどワープロソフトの数式エディタ(最近ではLaTeX書式で書けるものもあるらしい?)などでぽちぽちボタンを押して書いていた人にとっては少し敷居が高く感じられるかもしれませんが、慣れればWordよりも書きやすいと感じる人も少なくありません。

 

ではまず今回の目標と、それのためのソースを全文以下に示します。そのあとに部分ごとに解説します。

 

f:id:hima_b:20180816221756p:plain

f:id:hima_b:20180816203315p:plain


 

 


¥documentclass[a4j]{jsarticle}
¥usepackage[dvipdfmx]{graphicx}

¥usepackage{amsmath,amssymb,newtxmath}
¥usepackage{bm}

¥begin{document}

¥begin{equation}
E = mc^{2}
¥end{equation}
¥begin{equation}
¥label{eq:eq2}
E = h¥nu
¥end{equation}
¥[
ma = F
¥]
運動方程式¥(ma = F ¥) ¥¥
式(¥ref{eq:eq2})は光のエネルギー。

¥[ ¥Gamma(¥frac{1}{2}) = ¥sqrt{¥pi} ¥]
¥[ ¥Gamma(s) = ¥int_{0}^{¥infty}e^{-x}x^{s-1}dx ¥]
¥[ f(x) = ¥sum_{k=0}^{n-1}¥frac{f^{(k)}(0)}{k!}x^k + ¥frac{f^{(n)}(¥theta x)}{n!}x^n ¥]
¥[ ¥lim_{x¥rightarrow a}¥frac{f(x)}{g(x)} = 0 ¥]
¥[ ¥left( ¥frac{1}{2}mv^2 ¥right)^2 = ¥frac{1}{4}m^2v^4 ¥]

¥begin{equation*}
  A = ¥begin{pmatrix}
        a_{11} & ¥ldots & a_{1n} ¥¥
        ¥vdots & ¥ddots & ¥vdots ¥¥
        a_{m1} & ¥ldots & a_{mn}
      ¥end{pmatrix}
¥end{equation*}
式(¥ref{eq:eq2})は光のエネルギー。

¥begin{align*}
  ¥langle¥bm{v}|¥bm{u}¥rangle &= ¥bm{v}^¥dagger ¥bm{u} ¥¥
  &= (v_1^*, v_2^*, ¥cdots, v_n^*)¥left(
    ¥begin{array}{c}
      u_1 ¥¥
      u_2 ¥¥
      ¥vdots ¥¥
      u_n
    ¥end{array}
  ¥right) ¥¥
  &= v_1^*u_1 + v_2^*u_2 + ¥cdots + v_n^*u_n
¥end{align*}

¥end{document}

 

 最初2行やbegin{documemnt}などは超基礎編で解説したのでそちらを参考にしてください。

 

 

¥usepackage{amsmath,amssymb,newtxmath}
¥usepackage{bm}

 

 usepackage{hogehoge}ではこのソース中で使用するパッケージの宣言になります。インポートしたものの使わない分には問題ありませんが、使用するのにインポートしていない場合はコンパイル時にエラーを吐きます。

 

 今回は数式出力やギリシャ文字出力、太文字出力などに必要なパッケージをインポートしています。

 TeX Liveで一括インストールした人はこれらのパッケージはおそらくすでにインストールされているはずなので気にせずインポートして使えるはずです。

 

 数式の書き方には何種類かあります。本記事ではequation、align、¥[¥]、¥(¥)の4種類について紹介します。

 

 equationは改行して横方向中央揃えで数式番号をつけて数式を出力

 alignは改行して横方向中央揃えで数式番号をつけて、なおかつ数式をイコール(=)の位置で揃えて出力することが可能

 この二つはequation*、align*のようにアスタリスクをつけることで数式番号をつけないことも可能

 ¥[ hogehoge ¥]は改行して横方向中央揃え、数式番号なしで出力

 ¥( hogehoge ¥)は改行せずに位置も特に変わらずに数式番号なしで出力(主に文章中で使用)

 

 実際の書き方は

¥begin{equation}
(ここに数式)
¥end{equation}

 (alignも同様)

 

¥[ (ここに数式) ¥]
文章hogehoge ¥( (ここに数式) ¥) 文章hugahuga

 

こんな感じです

 

 alighでは式の改行を¥¥で行い、=の代わりに&=と入力することで文中の数式を=で揃えることができます。(上記画像の最後の数式)

 

 またequation等では数式番号が振られますが、それを後々の文中で参照したいときは、参照したい数式のところに¥label{eq:hogehoge}と記述し、¥ref{eq:hogehoge}とすれば該当する数式番号が表示されます。

¥begin{equation}
¥label{eq:eq2}
E = h¥nu
¥end{equation}

 

ここの記述部分がそれにあたります。この数行後でrefで参照していますが、数式番号と参照して呼び出した番号が一致していることがわかると思います。

 

 

次は数式そのものの書き方について説明します。当たり前ですが数式を書くスペース以外(今説明した4種類などの囲いの外)で以下で紹介する記述をしても正常に表示されません。あくまで、数式記述用スペース内における記述ルールです。

 

普通のアルファベット、数字、( )、+-=は普通に入力すれば表示されます。

かけ算は¥times、割り算は¥divで書けます。

 

 まずは上付き、下付き文字

x_{a}と書けばxの添字として{}内の文字列(この場合a)が、x^{b}と書けばxの上付き文字(指数)として{}内の文字列(この場合b)が表示されます。

一つ目の式がこれに該当します。 

 

 次はギリシャ文字 νなら¥nu、Θなら¥Thetaのように¥のあとにギリシャ文字の名前を書くと表示されます。先頭文字が小文字なら小文字が、大文字なら大文字が表示されます。

 

分数は¥frac{ここに分子の数式}{ここに分母の数式}

平方根は¥sqrt{平方根の中身}

となっています。

 

ここまでで4つ目までの数式が書けるようになりました。

 

次は積分、総和、極限の書き方です。

 

¥intで積分、¥sumでシグマ記号、¥limでlimが表示されます。

積分とシグマについては_{下の添字}^{上の添字}というような記述を後ろにくっつけることで範囲付きの積分などの記述が可能になります。

シグマに使用すると添字ではなく真上と真下に表示されます。

極限では下の添字を使用すると真下に表示されます。

 

ここまでで5、6、7つ目の数式が書けるようになりました。

8つ目の式の大きな括弧は¥left( と ¥right) で数式を囲うと表示できます。

 

次は行列の書き方です

 


¥begin{equation*}
A = ¥begin{pmatrix}
a_{11} & ¥ldots & a_{1n} ¥¥
¥vdots & ¥ddots & ¥vdots ¥¥
a_{m1} & ¥ldots & a_{mn}
¥end{pmatrix}
¥end{equation*}

 

数式内でpmatrixを使用することで行列の記述が可能になります

書式としては

(11) & (12) & (13) ¥¥

(21) & (22) & (23) ¥¥

(31) & (32) & (33)

 

のようになっていて行や列の数は前後させることが可能です。

¥ldotsは横向き3点ドット、¥ddotsは縦向き3点ドットになります。

 

また、ベクトルについては横向きベクトルは(v_1^*, v_2^*, ¥cdots, v_n^*)のように特に変わった記述は必要ありませんが縦向きでは少し変わってきます。

 

以下のようにarrayを使用すると縦向きベクトルを書くことができます。

 


¥begin{array}{c}
u_1 ¥¥
u_2 ¥¥
¥vdots ¥¥
u_n
¥end{array}

 

最初に示した全体のコードの最後の方で出てきたその他の記述については

¥daggerは†の記号

¥bm{}は{}内の文字を太文字にして表示

となっています。

 

 

 LaTeXにおける数式の基本的な記述については以上になります。また気が向いたときにでも図の挿入、表の挿入、プログラムなどのソースの挿入、等々について説明したいと思います。

 

では。

gnuplotの使い方【第2軸の使用(右軸)、ラベル位置の調整、任意単位の軸設定】

お久しぶりです。今回は第2軸(右軸と左軸でスケールが異なるもの)の使用方法や、ラベル位置の微調整、また任意単位のグラフを書く際の軸設定について紹介します。任意単位とは大きさではなく量の比、概形などを主に見たいときに使用します。

 

例えば、data1(y=x)、data2(y=1.1^x)のグラフをデフォルトでまとめて表示すると次のようになりますよね。

 

f:id:hima_b:20180816141526p:plain

 

data2が指数的に増加する関数なのでdata1が小さすぎてほぼ0に見えてしまいます。このままでは困りますよね。

 

そこで1軸をdata1の大きさに、2軸(右軸)をdata2の大きさに対応させてみましょう。

 

 

set y2tics
plot 'data.csv' using 1:2 with line title 'data1','data.csv' using 1:3 with line title 'data2' axes x1y2
set xtics nomirror
set ytics nomirror
set y2tics 5000

 

 序盤のカンマ区切りの設定やその他フォントの大きさ、余白の大きさ設定は省略しているのでわからない場合は過去記事を参考にしてみてください。

 

plot部分の最後にaxes x1y2とある方がy2、つまり2軸に割り当てられます。

他は目盛りの設定でこれも過去にお話ししたかと思います。

 

プロットしてみるとこんな感じ

 

f:id:hima_b:20180816142516p:plain

 

これでdata1の値も見やすくなりましたね。もっとも今回は直線ですが。

 

 

 

また、xやyラベルの位置の調整についてですが、これは至って簡単で 

 

set xlabel 'x label' font "Arial,22" offset 0,-0.8
set ylabel 'y label' font "Arial,22" offset -2,0

 

こんな風に各ラベルの設定の部分の後ろにoffset (x方向にずらしたい量),(y方向にずらしたい量)

というような書き方でラベルの位置を調節することができます。上の図でも少し調節しています。

 

ちなみにこれは 目盛りの数字などにも有効で 


set xtics nomirror offset 0,-2

 

などのように書いて調節することができます。

 

 

次に任意単位(arb units)風な軸の設定です。これは単純に目盛りの数字を消せばよくて、目盛りを残して数字だけを消したいときは 


set format y ""

 

目盛りごと消したいときは 


unset ytics

 

などとしてラベル名をhogehoge(arb units)みたいにしておけばいいかと思います。

実際に下の写真が普通にプロットした時で、2枚目が左右の軸に分け、任意単位軸にしたグラフです。

 

f:id:hima_b:20180816144005p:plain

f:id:hima_b:20180816143948p:plain

 

使いどころは少ないかもしれませんが、実験系の研究をしている人とかは、Aのパラメータをどんな値のときにBのパラメータがピークを迎える、急激に変化する、などの概形を観察したいときなどに役に立つかもしれません。

 

もっとも、表示していないだけでソフト側はグラフの値を認識しているので、プロット範囲などの指定は支障なく行うことができます。

 

では。

初心者による初心者のためのLaTeX【超基礎編】

こんにちは

タイトルにもあるようにLaTeX初心者の僕が初心者に向けてその基本的な使い方、

正確にはその書き方を紹介していこうと思います。

 

そもそもLaTeXとはざっくり言うと、(うまく使うと)すごくいい感じにPDFが書けるもの、ですね(たぶん)

いや、Wordでいいじゃないかと言われればそれはそう、ですがWordは決して安いといえるソフトではないですし、windows、一応macで販売されていますがlinux版は販売されていません。対して、TeXは無料でwindowsmaclinuxいずれのOSでも提供されています。また、MS Officeはバージョンが変わるごとにUIがコロコロ変わったり機能もコロコロ変わったりすしますよね。ググって試そうと思った機能が旧verのもので新verでは変わってた...なんてこともあったりなかったり...

 

Wordもおそらくきちんと使い方をマスターしてきちんと使えば綺麗な文書を書くことができるとは思いますが、TeXの方がそこまで勉強せずとも比較的綺麗な文章を書くことができると思います。

特に数式などはかなり整ったものが書けますし、図表の配置、文章の章や節の割り振りなどもWordではびみょーにずれたり思い通りにいきにくかったりなどありますが、TeXではかなり楽に扱うことができます。

あとTeXはかなり歴史が長く、数え切れないのではないかというほどの拡張機能(パッケージ)があります。これも利点と言えるでしょう。また、学会によっては論文用のテンプレートをTeX形式で配布しているところもあります。

 

で、インストール方法ですが、OSや方法、まとまったパッケージでインストールするのか個々インストールするのかなどによってかなり異なってくるので個別に紹介することは避けますが、だいたいTeX Liveインストールしとけばいいと思います。

インストールするとエディター(windowsならTeX Works、macならTeX Shop)が一緒にインストールされるので、それを使えば問題ないかと。

また、インストールするソフト、バージョンなどによってはエディターのタイプセット設定をいじる必要があるかもしれません。

windows(TeX Works)

下記ページに従って設定しました。

TeXworks/設定 - TeX Wiki

mac(TeX Shop)

特に何か設定した記憶はないですが、インストールしたバージョンが現在の最新版とは異なるのでデフォルトの設定が同じかはわからないので「mac 使うエディター名 日本語」とかそんな感じで検索していただければわかると思います。

 

で、インストールおよび設定ができたら以下のコードを書いてコンパイル(タイプセットというボタンかも)をしてみましょう。

 

¥documentclass[a4j]{jsarticle}
¥usepackage[dvipdfmx]{graphicx}
¥title{タイトル}
¥author{筆者A¥thanks{あ大学}¥and 筆者B¥thanks{い大学}}
¥date{2100/4/1}
¥begin{document}
¥maketitle
¥end{document}

1行目は文章を作る際の基本的な宣言と思ってください。

2行目は使用するパッケージ(機能)の呼び出しです。今後、使いたい機能に応じて下に書き足していきます。

3〜5行目はこの文章のタイトル、筆者名、文章の執筆日の宣言になります。これをかかなかったり、¥title{}のようにかけば空白になります。ただ、なにもせずただ空白にすると、白いだけの空間が残るので適当にいじって上に詰めてやる必要があります(また後々の記事で紹介)。author内のthanks{}で注釈をページ下に付けてやることができます。論文とかだとその人の所属機関やemailアドレスがよく書かれてますね。

6〜8行目が本文になります。LaTeXにおいてオブジェクトは基本的に¥begin{hoge}ではじまり¥end{hoge}で終わる塊であることを覚えておいてください。文章中に¥begin~が12個あるのに¥end~が10個しかないなんてことはまずありません。大抵コンパイル時にエラーをはきます。

でこの本文(document)内に書かれたものが実際にコンパイルすると文章として出力されます。

¥maketitleは3〜5行目で宣言したタイトル、筆者名、執筆日が出力されます。この3つを一切表示しない場合は¥maketitle自体書かなければOKです。この場合のみ空白は作られずページ一番上からこれ以後の文章がスタートします。

 

きちんとインストールと設定が行われていれば以下のようなpdfが出力されるはずです。

f:id:hima_b:20180417215951p:plain

 

今後、不定期にはなりますが思い出した時にでも

章節等の分け方、目次や参考文献の出力、読み込んだ図の出力、表の出力、数式の基本的な書き方、行列、ベクトル等の書き方、などレポートを書く際に最低限必要な機能に絞って説明していきたいと思います。

 

 

gnuplotの使い方【フォントの種類、サイズの指定、矢印、コメントの挿入】

長いこと更新してませんでしたが、今回はフォントの種類、そのサイズの指定、

また、グラフ上に矢印の挿入、コメントの挿入について紹介したいと思います。

 

今回紹介する機能を使うと以下のようなグラフが書けるようになります。

f:id:hima_b:20171130215940p:plain

 

フォントの指定は

 

font "Arial,14"

というような書き方をします。

Arialはフォントの名前です。これはMacに入っているフォントですが、別に他の任意のフォントを使用してもらって大丈夫です。

 

強いて言うなら、英語専用のフォントを選んだのに日本語を表示しようとすると文字化けします。

また、環境依存文字などにも注意が必要ですね。

後ろの14という数字はフォントサイズです。

 

実際に使うのであればこのような感じになります。 

set xlabel font "Arial,18"
set ylabel font "Arial,25"
set tics font "Arial,14"
set key font "Arial,14"

上2つは軸ラベルのフォント、3つ目はメモリのフォント、4つ目は凡例のフォントの指定になります。 

 

 

次にコメント(任意のラベル)と矢印の挿入になります。

 

set label 1 'ラベル1' at 2,8 center font "Arial,20"

 

labelの後ろの数字はラベル番号です。適当に被らないように振っていけばいいです。

atの後ろはx座標,y座標で、centerはその座標を中心にラベルを表示するという指示です。centerがなければその座標の右側にラベル表示です。

 

これに関連して、矢印の書き方も紹介します。

set style arrow 1 heads size graph 0.02,20 filled
set style arrow 2 head size graph 0.08,20
set arrow 1 from 2.1,4.8 to 3,2.2 arrowstyle 1
set arrow 2 from 6,4 to 5.2,1.2 arrowstyle 2

 上記のようなset style arrow ~とset arrow ~がワンセットで使うと思ってください。

どういう矢印かを定義、定義した矢印を呼び出して表示

という意味合いになってます。

 

set arrow style の数 = set arrow の数

もしくは

set arrow style の数 < set arrow の数

になると思ってくださって構いません。

もちろんarrow styleいっぱい書いて使わない場合は別ですが。

 

headsだと両方に矢尻があり、headだと片方になります。

その後ろは size graph 矢尻の長さ, 矢尻の太さ になってます。

filledがあると塗りつぶされて、ないと骨みたいな矢印を書くことができます。

 

set style arrow 番号で定義した矢印はarrowstyle 番号 に割り当てられます。

set arrow 番号では実際にグラフ上にプロットする矢印の番号になります。

from 始点のx座標, 始点のy座標 to 終点のx座標, 終点のy座標 という書式になっていて、最後のarrowstyle 番号で最初に定義した矢印の定義を呼び出します。

 

以上のコマンドを組み合わせれば最初にお見せしたグラフのようなフォントの調整、ラベル、矢印の掲載ができるようになります。

 

では。

gnuplotの使い方【小目盛、対数目盛、凡例の細かな調整、for文、ギリシャ文字】

日々レポートと格闘していると、そういやあのコマンド紹介してない、これもあったか、これは知らんかった、便利だ

というようなことが多々あります。

その中のいくつかを紹介したいと思います。

 

今回は

小目盛の設定

対数目盛の設定

凡例の調整

for文

ギリシャ文字の表示

を紹介しようかと

 

まずは小目盛りの設定

目盛の設定は前に

set xtics 3

set ytics 5

 

みたいなのがあるのを紹介したと思いますがこれは大目盛といって、下に数字が表示されますよね。

ただ、やっぱりもっと細かく目盛りがほしいなぁ、でも全部に数字はいらんなぁ、ということもあると思いますのでそこでこれを使います。

set mxtics 10

 

です。mが付きました、それだけです(笑) 意味としてはx軸の大目盛一つの間を何等分するかです。

例:x軸大目盛間隔5、小目盛り5つ(間隔1)

f:id:hima_b:20170628201159p:plain

 

この程度の差ですけどね(笑)

 

 

次は対数軸の設定

これはいわゆる片対数、両対数グラフを書きたいときのコマンドです。

set logscale x

 

 xがyならy軸が対数になります。

f:id:hima_b:20170628201532p:plain

これは両方ともy軸は対数で、x軸が左は線形、右が対数です。

表示する関数やデータが指数関数的に変化するものだったりするときによく使います。

 

 

次は凡例の調整を。

set key box title 'test' at 0.5,0.5 vertical

 

この一文の説明としては、

boxで凡例の周りを囲む。

title 'test'で凡例群に名前を表示する(使ったことはない笑)

at x,yでグラフ上のx、y座標に凡例を移動

これは全体を1x1とした座標系です。また座標でなくてもtop,bottom,left,rightでそれぞれの方向の端まで移動できます。またbelowでx軸の下に平積みで表示できます。

後ろのverticalは凡例が複数の時に縦積み、horizonalで横積みできます。

例:さっきのコマンドを実行

f:id:hima_b:20170628203603p:plain

 

 実はkeyコマンドはこれ以上にいろいろ機能ありますが、ここら辺知ってればいいかなと。もしかしたら、もしかしなくても、keyなんてデフォルトでもいいかもしれませんが...

 

お次にfor文

一応gnuplotにもforとかif、whileは存在します。その中でも使うんじゃないかなと思ったのがfor文だったので紹介を。

plot for [i = 1:3] x**i title sprintf("f(x) = x^%d",i)

 

 iが1~3の間でそれ以下の処理を繰り返すというものです。

x**iはx,x^2,x^3となって、それ以後のtitle自体は以前紹介はしましたが、sprintfは初めてのはず?

このsprintfの書式はC言語のprintfとたぶん一緒です。sprintfの出力がtitle ' 'における' 'の部分に置き換わります。つまりi=0のときtitle 'f(x) = x^1'と書くのと同じになります。

さっきの凡例調整のグラフ自体はこのfor文で書いてます。

 

応用として

plot 'no1.csv' using 1:2

 にfor文を使ってみると

plot for [i = 1:3] sprintf("no%d.csv",i) using 1:2

 

 という風な感じになります。

 これを実行するとno1.csv、no2.csv、no3.csvが一気に表示できます。

(カンマ区切りの文言とか要りますがここでは割愛)

ばーっと一気に何かするときに便利です。

 

 

最後にギリシャ文字の表示について。

理系だとギリシャ文字を書くことは多いですよね、ΩとかθとかΓとか...

今まで紹介してなかったのが申し訳ないです(笑)

 

set ylabel '{/Symbol G}

 かくとGに対応するギリシャ文字Γが表示できます。

小文字だと表示されるギリシャ文字も小文字です。

 

あと追加でpwdというコマンドを。

pwdと実行するとカレントディレクトリが表示されます。csvとかpltファイルはここに入れるようにしてください。画像をエクスポートする際も一回ここに保存ずるのがよいかと。

 

 

今回はこの辺で... では

 

乱数生成法について

こないだちょっとCでプログラムを書いているときに乱数生成について少し調べたりしたのでメモ書きを...

 

基本的には大体のプログラミング言語には乱数生成の関数が標準ライブラリに組み込まれています。

たとえばC言語ならrand()関数。

 

しかし、ちょっとした理由からrand()関数が使用できない制約の上で乱数を使用する必要がある状況に出くわしました。

 

そうなると自分で乱数生成関数を用意しなければなりませんが、

僕は別段そういった方面の数学的知識はありませんので乱数生成アルゴリズムについて調べました。

 

見つけた中で簡単に実装できるものが2つ見つかりました。

 

1.線形合同法

2.XorShift法

 

です。

 

C言語のrand関数は1の線形合同法を利用したもの(だったはず)です。

実際の実装方法はたしかwikiに載っていたものを使いました。

 



unsigned long sen_gou(){

static unsigned long x = 10;

unsigned long a = 1103515245, c = 12345, m = xx(2, 31);

x = (a*x + c) % m;

return x;

}

xx関数は第一引数を第二引数乗するべき乗関数です。

本来ならpow関数(?)だったかmath.hあたりをインクルードすれば使えた気もしますが、math.hも使えない制約があったので作りました(記述するのは省略)。

 

sen_gouが線形合同法による乱数生成関数です。

これで吐き出された数字をModしてやれば任意の範囲での乱数が得られます。

%6+1して1~6で、 % 10+1して1~10の範囲で乱数を求め、また総計算回数の大小おけるそれぞれの値の出現数を可視化してみました。

横軸がそれぞれ生成した値、縦軸がその値の出現数です。

f:id:hima_b:20170524150715p:plainf:id:hima_b:20170524150740p:plain

 

もう一つのXorShift法の実装コードも確かwikiにのっていたはずです。

 



unsigned long xor128(){

	static unsigned long x = 123456789, y = 362436069, z = 521288629, w = 88675123;

	unsigned long t;

	t = (x ^ (x << 11)); x = y; y = z; z = w; return(w = (w ^ (w >> 19)) ^ (t ^ (t >> 8)));

}

 で、これも先ほど同様に実行回数と出現数の可視化をしました。

f:id:hima_b:20170524151630p:plain

f:id:hima_b:20170524151701p:plain

 

今回は乱数の生成結果をModして任意の範囲で取り出したので、元の生成結果の傾向がどうとかは判断できませんでしたが、(そこを論じれるほど理解していないので)、まぁこれでrand関数なしでも乱数が生成できることはわかりましたね。

 

もし、時間変数やタイマーを用いれる環境であれば、その値を用いて2種類の生成法を不規則に呼び出してやれば面白いかもしれません。

 

x,yは任意の値として

timer%x > yなら

a = sen_gou();

そうでないなら

a = xor128();

のような感じで。

 

ほかにもいろいろな乱数生成法はありますし、それに関する論文を書かれている方も多くいらっしゃるので、興味がある方は読んでみるのもいいかもしれません。

 

では。

 

 

 

 

gnuplotの使い方【複数のグラフを並べる】

今回はy、もしくはx軸を共有したグラフの書き方を記したいと思います。

 

具体的にはこんな感じ

f:id:hima_b:20170506213825p:plain

複数の出力、測定結果を比較する際、

ディジタル波形などの比較などの際には有効に活用できると思います。

 

まずはスクリプト全文を載せます。

gnuplotスクリプトとは?という方は前回記事を見てください。

 

hima-b.hatenablog.jp

 


set multiplot layout 4,1
set datafile separator ","

set lmargin 0
set rmargin 0
set tmargin 0
set bmargin 0

set ytics 1
set xtics nomirror
set ytics nomirror

set xr[0:3e-4]
set yr[-0.2:1.2]

set size 0.8,0.20
set origin 0.1, 0.70
unset xlabel
unset ylabel
unset xtics
plot 'data.csv' using 1:2 with line linecolor -1 title 'ClockPulse'

set size 0.8,0.20
set origin 0.1, 0.50
unset xlabel
unset ylabel
unset xtics
plot 'data.csv' using 1:3 with line linecolor -1 title 'X0'

set size 0.8,0.20
set origin 0.1, 0.30
unset xlabel
unset ylabel
unset xtics
set ylabel '[V]'
plot 'data.csv' using 1:4 with line linecolor -1 title 'X1'

set size 0.8,0.20
set origin 0.1, 0.10
set xlabel 'time [s]'
unset ylabel
set xtics
set xtics nomirror
plot 'data.csv' using 1:5 with line linecolor -1 title 'X2'

unset multiplot
    

 まず最初、multiplotは縦に4つ、横に1つ表示する宣言になります。

それのペア的存在として最後にはunset multiplotと書きます。

その次のset ○margin 0というのはleft,right,top,bottomそれぞれの余白(グラフの枠の外)の幅の指定です。

すべて0にしておくとそれ以降のグラフが書きやすいので今回は0にしています。

 

ticsや描画範囲については過去の記事を。

 

set sizeはそのグラフ"1つ当たりの"大きさの指定です。"グラフ全体の"横と縦を1、1としたときの比率で指定します。

set originはその"グラフ1つの左下の座標"の場所を指定します。基準は"グラフ全体の"左下の座標を0,0としています。

 

あとは一つ一つグラフの設定を書いていけばok

一番下のx軸だけ表示して、それ以外は非表示にしています。

(x軸は共通なので)

もし共通幅のx軸でなくてもこのようなレイアウトでグラフを作成することはできます。

上のグラフは大きさ比率0.5、下のグラフの大きさ比率0.8のようなイレギュラーなグラフを作ることも可能ではあります。大きさや座標が指定できるので割と何でもできると思います。

一つのキャンパスに複数の絵を飾る感覚ですね。

 

例えば応用すればこういうのもできます。

f:id:hima_b:20170506221026p:plain

log(x)+1のグラフをxが1~10の範囲は線形表示、それ以降は対数表示というようなグラフも書けます。使い道があるかはわかりませんが...

 

今回はここらへんで。