• 高速化?

部分行列の代入

行列matのi0行からi0+N行まで,j0列からj0+M列までにN×M行列submatを代入するには

mat[[i0;;i0+N, j0;;j0+M]]=submat

とする.行列matはあらかじめ

mat=SparseArray[{},{Nmat,Mmat}]

などとして定義されていること.

SparseArrayとメモリ

SparseArrayの要素としてSparseArrayを代入するとメモリがおかしくなる? SparseArray a をさらにSparseArrayに代入するには

a = SparseArray[
.........
]//Normal

とNormalを使って,通常の行列に戻してから代入する.

EigensystemのSort

転置したものをSortすると便利.

Transpose[Sort[Transpose[Eigensystem[mat]]]]

記号のショートカットキー

  • Dirac定数
    • esc hb esc
  • 行列の転置
    • esc tr esc (@abetomo999)

ContourPlot

 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}];

リモートカーネル

サーバーの sshd_config 内の StrictModes を no にする。 最初に SSH にて認証が行われる。 これは特に問題ない。 認証後、データのやりとりのために二つのポートが用いられる。 これは

-linkname ポート1@カーネルのアドレス,ポート2@カーネルのアドレス

のようにオプション指定される…はずだがうまくいかない。 デフォルトでは

-linkname `2`

というようになっている。スロット`2`はポートをランダムに選んで自動的に生成される変数である。アドレスは接続元に設定される。従って、SSH 転送で使いたい場合にはこのデフォルトの設定は使えない。

というように、LANを越えて通信をするのはうまくいかない。

級数展開

 Series は関数をテーラー展開の定義式に従って計算する。  そのため、特異点における展開は失敗する。  このとき、必ずしもエラーにならず、適当な間違った値を返してくるので注意。  例えばこの問題は、線形分散を求めるような場合(線形なので、原点において微分不可能)に遭遇する。  この問題を回避するには、特異性のない関数に変換してからSeriesを用いる、などといったことを実行しなければならない。  例えば線形分散を求めるような場合には、その関数自体ではなく、二乗された関数を Seires で扱えば良い。

図をIllustratorに読み込ませる場合

Timesフォント

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フォント

 システムがMathematicaフォントを認識しても、Illustratorは認識しない。  Program Files (x86)\Common Files\Adobe\Fonts 以下にMathematicaフォントをコピーすればよい。Mathematicaフォントは  Program Files\Wolfram Research\Mathematica\7.0\SystemFiles\Fonts にある。

積分値が零の場合

値が零になるような積分の場合、PrecisionGoalで精度を指定した数値積分は収束しない。これはAccuracyGoalを指定することで回避できる。 収束しないといっても結局ほぼ零の値が返ってくるので気にしなくても良いのかもしれない。

等高線プロットの凡例(高級版)

ExtendGraphicsパッケージをDLしておく。 読み込み

Needs["ExtendGraphics`LabelContour`"]

等高線プロットをしておく。

graph=ContourPlot[~~]

これを凡例を付けて表示する。

LabelContourLegend[graph]

Contourプロットの等高線の数によって凡例も自動的に付けてくれる。 なお、デフォルトの設定だと■と文字の間隔が大きすぎる気がするので適当に修正しておく。LabelContour.mを直接編集すれば良い。 ついでにフォントの設定とかLegendLabelとかLegendShadowの有無も設定してしまうと良い。

File not found: "contour.png" at page "Mathematica"[ź]

行列の列の置換

 行列と行ベクトルが

#pre{{ d = 1000; mat = Array[a, {d, d}]; vec = Table[b[i], {i, 1, d}]; }} とあったときに、matの第1行をvecで置換するのは簡単にできる。

#pre{{ mat = ReplacePart[mat, vec, 1]; }} で同様に列の置換を簡単にできるかというとそういう関数は無いような気がする。う~ん。

二次元プロットのデータ出力

Export["x.dat",Plot[x,{x,0,1}][[1]][[1]][[1]][[1]]//TableForm]

コメントはありません。 Comments/Mathematica?

お名前:

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-08-06 (火) 18:55:06 (1718d)