Top > Mathematica
-[[高速化>./高速化]] ---- #contents *部分行列の代入 [#nab29d2d] 行列matのi0行からi0+N行まで,j0列からj0+M列までにN×M行列submatを代入するには mat[[i0;;i0+N, j0;;j0+M]]=submat とする.行列matはあらかじめ mat=SparseArray[{},{Nmat,Mmat}] などとして定義されていること. *SparseArrayとメモリ [#g0f53a51] SparseArrayの要素としてSparseArrayを代入するとメモリがおかしくなる? SparseArray a をさらにSparseArrayに代入するには a = SparseArray[ ......... ]//Normal とNormalを使って,通常の行列に戻してから代入する. *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); *行列の列の置換 [#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 |