- The added line is THIS COLOR.
- The deleted line is THIS COLOR.
-[[高速化>./高速化]]
----
#contents
*EigensystemのSort [#ua9879f2]
転置したものをSortすると便利.
Transpose[Sort[Transpose[Eigensystem[mat]]]]
*記号のショートカットキー [#na34a754]
-Dirac定数
--esc hb esc
-行列の転置
--esc tr esc (@abetomo999)
*ContourPlot [#v59b487f]
ContourPlot を EPS で Export する場合、 Mesh を False にしていても EPS には出力されてしまう。
回避法は以下。
Export["hoge.eps",
hoge/.{EdgeForm[],RGBColor[i1_,i2_,i3_],i___}:>{EdgeForm[RGBColor[i1,i2,i3]],RGBColor[i1,i2,i3],i}];
*リモートカーネル [#zd687e8b]
%%サーバーの sshd_config 内の StrictModes を no にする。%%
最初に SSH にて認証が行われる。
これは特に問題ない。
認証後、データのやりとりのために二つのポートが用いられる。
これは
-linkname ポート1@カーネルのアドレス,ポート2@カーネルのアドレス
のようにオプション指定される…はずだがうまくいかない。
デフォルトでは
-linkname `2`
というようになっている。スロット`2`はポートをランダムに選んで自動的に生成される変数である。アドレスは接続元に設定される。従って、SSH 転送で使いたい場合にはこのデフォルトの設定は使えない。
というように、LANを越えて通信をするのはうまくいかない。
*級数展開 [#aa440a0a]
Series は関数をテーラー展開の定義式に従って計算する。
そのため、特異点における展開は失敗する。
このとき、必ずしもエラーにならず、適当な間違った値を返してくるので注意。
例えばこの問題は、線形分散を求めるような場合(線形なので、原点において微分不可能)に遭遇する。
この問題を回避するには、特異性のない関数に変換してからSeriesを用いる、などといったことを実行しなければならない。
例えば線形分散を求めるような場合には、その関数自体ではなく、二乗された関数を Seires で扱えば良い。
*図をIllustratorに読み込ませる場合 [#p12737e2]
**Timesフォント [#b18db504]
Illustratorのフォントリストは
Program Files\Common Files\Adobe\TypeSpt
にある。これを編集するとIllustratorで読み込ませたときに出る、フォントが見つかりませんというエラーを回避できる。例えば次の内容を書き込む。
%BeginFont
Handler:WinTTHandler
FontType:TrueType
FontName:Times
FamilyName:Times New Roman
StyleName:Bold
WeightClass:700
WidthClass:5
AngleClass:0
FullName:Times New Roman
WritingScript:Roman
WinName:Times New Roman
FileLength:398372
%EndFont
これは、“Times”(これはシステムには存在しない)という名のフォントを“Times New Roman”(これはシステムに存在する)と解釈させる命令である。
前に書いてあるほど優先されるので、できるだけ先頭に追記する。
これにより、Illustratorで編集した後にEPSWRITEで無駄な情報を落とし、EPSのサイズを縮小するときに生じる文字化け(文字のヨレ)の問題を回避できる。
**Mathematicaフォント [#q96ad1a8]
システムがMathematicaフォントを認識しても、Illustratorは認識しない。
Program Files (x86)\Common Files\Adobe\Fonts 以下にMathematicaフォントをコピーすればよい。Mathematicaフォントは
Program Files\Wolfram Research\Mathematica\7.0\SystemFiles\Fonts にある。
*積分値が零の場合 [#zc9c73a5]
値が零になるような積分の場合、PrecisionGoalで精度を指定した数値積分は収束しない。これはAccuracyGoalを指定することで回避できる。
収束しないといっても結局ほぼ零の値が返ってくるので気にしなくても良いのかもしれない。
*等高線プロットの凡例(高級版) [#wbe19a82]
ExtendGraphicsパッケージをDLしておく。
読み込み
Needs["ExtendGraphics`LabelContour`"]
等高線プロットをしておく。
graph=ContourPlot[~~]
これを凡例を付けて表示する。
LabelContourLegend[graph]
Contourプロットの等高線の数によって凡例も自動的に付けてくれる。
なお、デフォルトの設定だと■と文字の間隔が大きすぎる気がするので適当に修正しておく。LabelContour.mを直接編集すれば良い。
ついでにフォントの設定とかLegendLabelとかLegendShadowの有無も設定してしまうと良い。
CENTER:&attachref(./contour.png);
*密度・等高線プロットの色指定 [#c527d8cd]
一番簡単なのはHueだが、これだと0と1がほとんど同じ赤色のため分かりづらい。
そこで
#pre{{
1 → 赤
0.5 → 緑
0 → 青
}}
となるように色関数を定義してみた。
#pre{{
hh[x_] := If[x >= 1/2, RGBColor[2 (x - 1/2),
2 (1 - x), 0], RGBColor[0, 2 x, (1 - 2 x)]]
}}
以下の図がその例。
CENTER:&attachref(./2-1-2.png,40%);&attachref(./2-1.png,40%);
色関数 → 左:Hue 右:hh
とここまで書いて気付いたが
#pre{{
ColorFunction -> (Hue[(1-#)/1.5] &)
}}
というのが良いかも。さっきのhhは「明るい青色」が「暗い青色」より値が小さいものに割り当てられていて何となくイメージに合わない気がするが、この色関数だとその点はOK。
CENTER:&attachref(./2-1-3.png,40%);
グラフは非調和振動子の動的構造因子。ポテンシャルは
#math{{{{
V(x) = \frac{\lambda}{2} x^2 - 2 x^4 + \frac{1}{2} x^6
}}}}
逆温度が基底状態と第一励起状態のエネルギー差に等しいとき。
*行列の列の置換 [#idd0a059]
行列と行ベクトルが
#pre{{
d = 1000;
mat = Array[a, {d, d}];
vec = Table[b[i], {i, 1, d}];
}}
とあったときに、matの第1行をvecで置換するのは簡単にできる。
#pre{{
mat = ReplacePart[mat, vec, 1];
}}
で同様に列の置換を簡単にできるかというとそういう関数は無いような気がする。う~ん。
//
//*<<と>> [#s4520b68]
// 例えば一回描画するのに比較的時間が掛かるグラフがあるとする。
// Kernelを終了するとまた描画し直さなければならない。
// そこでGraphicsを「>>filename」で書き出しておく。
// 読み込むときは「<<filename」である。グラフ描画の場合は以下のように使う。
//#pre{{
//Plot[x,{x,-1,1}]>>graph
//}}
// 読み込んで表示する場合は
//#pre{{
//Show[<<graph]
//}}
//となる。もちろんGraphics以外の場合にも同様に使える。
//*グラフの凡例 [#v11db838]
//GraphicsパッケージのLegendを使う。
//%%サイズ調整とかやりづらい。%%
//%%基本的にはデフォルトで表示位置を変えるくらいだが、凡例が長めの単語だったりし//たときに再調整とかが面倒になる。%%
//%%これに拘るんならGnuplotとかにやらせた方が良いかも…%%
//Mathematica上の表示とExportした後の画像で結構違いがある。
//デフォルトだとMathematica上で枠の右余白が広すぎる感があるが、Exportしてみると結構ちょうど良い大きさになってたり。なのでLegendPositionを指定するだけで良いかも。
//*グラフ出力 [#x8df05ec]
//いろいろ拘るとこんなもんか?やり過ぎ感もあるが。
//#pre{{{{
//Plot[Sin[x], {x, 0, 2Pi}, Frame -> True,
// DefaultFont -> {"Times", 10},
// FrameLabel -> {TraditionalForm[x],TraditionalForm[Sin[x]]},
// AxesOrigin -> {0, -1},
// PlotRange -> {
// {-0.001, 2 Pi},
// {-1.001, 1}
// },
// FrameTicks -> {
// {
// {0, 0, {.02, 0}},
// {Pi/2, Pi/2, {.02, 0}},
// {Pi, Pi, {.02, 0}},
// {3 Pi/2, 3 Pi/2, {.02, 0}},
// {2 Pi, 2 Pi, {.02, 0}}
// },
// {
// {-1, -1, {.02, 0}},
// {0, 0, {.02, 0}},
// {1, 1, {.02, 0}}
// }, None, None
// }
// ];
//Export["test.eps", %, ImageSize -> 180];
//}}}}
*二次元プロットのデータ出力 [#u7788059]
Export["x.dat",Plot[x,{x,0,1}][[1]][[1]][[1]][[1]]//TableForm]
#pcomment