howto/mathematica

一行メモ

(* ちょっと複雑な例 *)
inSin[A_, w_, k_, t_, x_] := A*Sin[w*t + k*x]
outSin[A_, w_, k_, t_, x_] := A*Sin[w*t - k*x + Pi]

cwInSin[\[Rho]0_, A_, w_, k_, t_, x_] := \[Rho]0/(1 + k*A*Cos[w*t + k*x])
cwOutSin[\[Rho]0_, A_, w_, k_, t_, x_] := \[Rho]0/(1 - k*A*Cos[w*t - k*x + Pi])
cwInSinPlusOutSin[\[Rho]0_, A_, w_, k_, t_, x_] := \[Rho]0/(1 + k*A*Cos[w*t + k*x] - k*A*Cos[w*t - k*x + Pi])

Manipulate[
 Plot[{
    inSin[A, w, k, t, x], outSin[A, w, k, t, x], 
    inSin[A, w, k, t, x] + outSin[A, w, k, t, x], x,
    (cwInSin[\[Rho]0, A, w, k, t, x] - \[Rho]0), (cwOutSin[\[Rho]0, A, w, k, t, x] - \[Rho]0), (cwInSinPlusOutSin[\[Rho]0, A, w, k, t, x] - \[Rho]0), (\[Rho]0)
  },
  {x, -3, 12}, PlotRange -> {-0.74*range, 0.74*range}, 
  AspectRatio -> ratio, ImageSize -> 600,
  PlotStyle -> {
    {Red, Thickness[0.0003]}, {Green, Thickness[0.0003]}, {Blue, Thickness[0.003]}, {Black, Thickness[0.0003]},
    {Magenta, Dashed, Thickness[0.002]}, {RGBColor[0, 0.7, 0], Dashed, Thickness[0.002]}, {Cyan, Thickness[0.004]}, {Black, Dashed, Thickness[0.0003]}
  },
  PlotLegends -> {
    "inSin 入射波", "outSin 反射波", "inSin+outSin 合成波", "x 参考",
    "cw InSin 入射波の密度変化", "cw OutSin 反射波の密度変化", "cw InSin+OutSin 合成波の密度変化", "\[Rho]0 波が無いときの媒質密度"
}],
{{ratio, 0.5, "ranito(縦横比を変更)"}, 1/10, 1, Appearance -> "Labeled"},
{{\[Rho]0, 3, "媒質の密度"}, 0, 5, Appearance -> "Labeled"},
{{range, 5, "range(縦軸幅を変更)"}, 1, 20, Appearance -> "Labeled"},
{{A, 0.45, "振幅(入射波,反射波)"}, 0, 1/(2*k), Appearance -> "Labeled"},
{{w, 1, "角振動数"}, 0, 10, Appearance -> "Labeled"},
{{k, 1, "波数"}, 0, 2, Appearance -> "Labeled"},
{{t, 0.544, "時刻"}, 0, 2*Pi/w, Appearance -> "Labeled"},
ControlPlacement -> {Top}
]

マニュアル・リンクなど

いろいろなこと

適度な印刷方法

「長い数式を印刷する場合」
ファイル→印刷設定→印刷用環境
  →Condensedを選ぶ(表示画面と似た感じで、やや小さめのカラーで印刷できる)
  (Printoutだと白黒で行間がもう少し狭めになる)
ファイル→印刷設定→印刷オプション
  →マージンを 20mmに小さくする。
A2サイズ横で、pdf出力してから、pdfをA4サイズに縮小して印刷する。
ファイル→印刷設定→印刷オプションで、セルのブラケットを印刷と、領域マークを印刷のチェックをする
ファイル→印刷設定→用紙設定で、左右の余白を0.5cmくらいにすると良い(左右の余白が大きすぎるため)

定数

虚数単位    I
ネイピア数  E
円周率      Pi
無限大      Infinity

関数

Exp, Log
Sqrt
Abs, Arg
Sign
Sin, Cos, Tan

ギリシャ文字の入力

\[Alpha] で α になる
\[Theta] で θ

下付き、上付き、二次元式

下付き文字をつけたい文字を選択し、Ctrl+マイナス(-) を押す→プレースフォルダがあらわれる
上付き文字をつけたい文字(べき乗になる)を選択し、Ctrl+^ を押す →プレースフォルダ
分子の入力後、Ctrl+/ で分数の分母を二次元式で入力できる、らしい
Ctrl-Enter で列ベクトルの次の行の入力ができる

表示形式

InputForm["hogehoge"]    # 数式hogehogeを、一次元の形式(通常の入力に使われる形式)で表示
OutputForm["hogehoge"]   # 通常の画面に出る形式で表示

StandardForm["hogehoge"] # see manual(たぶん通常はOutputFormと同じ)
FullForm["hogehoge"]     # see manual(たぶん使うことはない)
Style[ hogehoge, Smaller ]  やや小さいフォントで出力する

近似値、四捨五入など

N[ hogehoge, [桁数] ]//InputForm
   # hogehogeを数値として表示する。
   # //InputFormを付けると一次元の入力形式で得られるが、
   # 指定した桁数以上(25~50桁など)が出力される。
   # 10のべき乗部分は、`桁数*^10 となる。
Round[...]    #数値で、四捨五入して出力
Floor[...]    #数値で、切り捨てして出力
Ceiling[...]  #数値で、切上げして出力

極限

Limit[expr, x->a]  #exprのx->aの極限を計算する

テーラー展開

Series[ expr, {x,x0,n} ]             #x=x0でn次までexprをテイラー展開する
Normal[ Series[ expr, {x,x0,n} ] ]   #余剰項を除く形を得る

微分、積分

D[]           微分。高階微分はmanualをみよ
Integrate[ ]  積分。重積分はmanualをみよ

仮定付き積分の例) Integrate[s*Exp[-s^2/2], {s, 0, x}, Assumptions-> {x > 0}]

方程式を解く

Solve[ 式, 解く変数 ]

x /. Solve[ 式, x ]  (*xの解のみのリスト出力する
                      (Solveは変換規則のリストとして解を出力する。そのため、余分な所を消すのに置換表示している)*)
例)
Part[z /. Solve[1 - 3*z^2 + 2*z^3 == x, z], 1 ;; 3]  (*方程式をzについて解き、解のみを1~3個出力する*)

シンボルの説明やオプションを表示する

?hoge          # hogeの説明を表示
?*hoge         # *hogeの関数名一覧を表示(ワイルドカードも利用可)
Options[hoge]  # hoge関数で利用できるオプションの一覧表示

結果を出力しない

hoge;          #式hogeの末尾に、セミコロンを付ける

置換表示、変換規則

/.    置換表示
->    変数規則

      例) x^2 /. x -> 2

仮定の作り方

assump = Assumptions -> {x0 ∈ Reals && px0 ∈ Reals &&
                         t >= 0 && w > 0 && x ∈ Reals && k ∈ Reals }
などする。そして、

  Integrate[ func[x], {x,-Infinity,Infinity}, assump ]
  Simplify[ func[x], assump ]

で、仮定を利用する。

初期化やクリア

ClearAll["Global`*"]  #何もかもをクリアする

ClearAll[x]           #変数xの何もかもをクリアする

詳しくはmanualをみよ。
  Clear[ hoge ]     値、定義をクリア
  Clear["Global`*"] 現行のセッションで作成された値、定義をすべてクリア
  ClearAll[ hoge ]  記号の値、定義、属性、メッセージ、デフォルト設定をクリア
  Remove[ hoge ]    シンボルの名前が認識されないように、完全に除去
<< Utilities`CleanSlate` #この2行で、Clear["Global`*"]をし、In/Out番号も初期化し、
CleanSlate[]              #開放メモリ量のレポートも出すらしい

?Utilities`CleanSlate`*  #詳細はこちら

行列

行列を作る

m={
   {1,2,3},
   {4,5,6}
  }
Table[ x^i*y^j, {i, 1, 3}, {j, 1, 2}]
m=DiagonalMatrix[{1,2,3,4}]    (* 対角行列 *)

行列表記で表示

m // MatrixForm
または
MatrixForm[m]

なお、//MatrixForm をつけた形で行列を、変数に代入すると、
その後の行列積などが計算できない。

行列の積、転置、逆行列

A.B             (* 積 *)
Transpose[A]    (* 転置 *)
Inverse[A]      (* 逆行列 *)
MatrixPower[A,n]  (* 行列Aの n乗 *)

A*B  (* 行列A,Bの各要素をお互いに掛ける *)
A^n  (* 行列Aの各要素を n乗する *)

ベクトル

ベクトルは、1行または1列の行列として扱う。

ノルム

Norm[v]    ベクトルのノルム、行列のノルム(詳細は調べよ)

グラフ描画

Plot

(*例1*)
Plot[{
  b*(Exp[k*(b - a)*t] - 1)/(b/a*Exp[k*(b - a)*t] - 1) /. { a -> 1, b -> 0.5, k -> 1},
  b*(Exp[k*(b - a)*t] - 1)/(b/a*Exp[k*(b - a)*t] - 1) /. { a -> 1, b -> 2, k -> 1},
  a*a*k*t/(a*k*t + 1) /. { a -> 1, k -> 1}
  },
  {t, 0, 10} ] 
(*例2*)
omega1 = 0.00288;
E01 = 7.76; (*V/Ang*)
Eenv[t_] := Which[ 
  t < 2 Pi / omega1, omega1*t/2/Pi,
  t < 4 Pi / omega1, 2 - omega1*t/2/Pi,
  True, 0]
Elaser1[t_] := Eenv[t]*(E01*Sin[omega1*t])
Plot[{Elaser1[t], Eenv[t], E01*Sin[omega1*t]}, {t, 0, 2500*100/10}, 
 PlotLegends -> "Expressions",
 PlotRange -> {-10, 10}, 
 GridLines -> Automatic,
 AxesLabel -> {"au(time)", "V/Ang"}, 
 PlotStyle -> {Thickness[0.01], Thickness[0.01], {Dashed, Thickness[0.0001]}}]
(*例3*)
omega2 = 0.00144;
E02 = 2.74 ;(*V/Ang*)
Elaser2[t_] := (Sin[omega2*t/16])^2*(E02*Cos[omega2*t])
Plot[{Elaser2[t], (Sin[omega2*t/16])^2, E02*Cos[omega2*t]}, {t, 0, 2500*100/3},
 PlotLegends -> "Expressions",
 PlotRange -> {-3, 3}, 
 GridLines -> Automatic,
 AxesLabel -> {"au(time)", "V/Ang"}, 
 PlotStyle -> {Thickness[0.01], Thickness[0.01], {Dashed, Thickness[0.0001]}}]

線の太さ指定

PlotStyle -> { Thickness[0.005] }    #0.005がデフォルトに近い

凡例の表示

PlotLegends -> "Expressions"

線を太くして破線にする

PlotStyle -> { Thickness[0.01],
               Thickness[0.01],
               {Dashed, Thickness[0.005]},
               {Dashed, Thickness[0.005]} }  #4本分指定

線の色の指定

PlotStyle -> { {Blue, Thickness[0.01]},
               {Orange, Thickness[0.01]},
               {Blue, Dashed, Thickness[0.005]},
               {Orange, Dashed, Thickness[0.005]}}

縦横のスケールを同じにしてグラフを描きたい

例えば、
Plot[ {0.3*Sin[x],x},
      {x, -3, 12}, PlotRange -> {-0.74, 0.74}, AspectRatio -> 1/10,
      ImageSize -> Full ]
  # 横軸幅 15、縦軸幅 1.5、縦横比が 1.5/15=1/10なので、スケールは同じくなる。
  # ImageSize->Fullを付けるとウィンドウ幅に合わせて拡大されたグラフが描かれる。

Plot3D

(* z^(1/3)=Exp[1/3 Log[Abs[z]] + I/3 Arg[z]+I/3* 2 m Pi
   where -Pi<=Arg[z]<Pi and m=0,1,2 のリーマン面を描く *)
Plot3D[ {
    Arg[( x + I*y)^(1/3)] + 0* 2 Pi /3, (*m=0,mathematicaでの主値の範囲*)
    Arg[( x + I*y)^(1/3)] + 1* 2 Pi /3, (*m=1*)
    Arg[( x + I*y)^(1/3)] + 2* 2 Pi /3  (*m=2*)
  },
 {x, -2, 2}, {y, -2, 2},
 AxesLabel -> Automatic,       (*軸ラベルを表示*)
 PlotLegends -> "Expressions"  (*凡例表示。ひとつだと出ない*),
 LabelStyle -> Directive[Bold, Medium], (*軸ラベルを太く大きく*)
 Mesh -> 3,
 PlotStyle -> {Opacity[0.8]},    (*透過度。色も可*)
 ExclusionsStyle -> {None, Red}, (*値が飛ぶ所を描かない・端を赤色にする*)
 Ticks -> {Automatic, Automatic, {-Pi, -Pi/2, 0, Pi/2, Pi, 3/2 Pi}}, (*軸目盛*)
 ViewPoint -> {-5, -3.4, 3}*1000
]

関数の定義

z[r_, t_] := r Exp[ I t ]
S[n_, x_] := Which[ n == 0, Which[ x < -1, 0,
                                   x < 0, 1 - 3*x^2 - 2*x^3,
                                   x < 1, 1 - 3*x^2 + 2*x^3,
                                   True, 0],
                    n == 1, Which[ x < -1, 0,
                                   x < 0, x + 2*x^2 + x^3,
                                   x < 1, x - 2*x^2 + x^3, 
                                   True, 0]] 
myarg[ a_ ] := Module[ {rcd = a}, (* ローカル変数を定義・初期化 *)
   While[rcd >=  Pi, rcd = rcd - 2 Pi];
   While[rcd < - Pi, rcd = rcd + 2 Pi];
   rcd];

式展開やまとめ

基本

Expand    # 展開
Factor    # 因数分解
Cancel    # 約分
Simplify[ hoge, [assump]]      # 式hogeを簡単にする。assumpで仮定を指定できる。

FullSimplify[ hoge, [assump]]  # 初等関数と特殊関数を含む式hogeを簡単にする。

いろいろな展開・簡約のシンボル

Expand[expr]        式の積とベキ乗の項を展開
ExpandAll[expr]     すべての項にExpandを適用
Factor[expr]        因子の積の形に変換
Together[expr]      通分し単一分数にまとめる
Apart[expr]         簡単な形の分母を持った複数の分数項に展開
Cancel[expr]        分母と分子の共通因子を約分する
Simplify[expr]      式 exprに代数変形を試し,最も短い式の形を探す

Collect[expr,x]     xの同じ次数の項をまとめる
FactorTerms[expr,x] xに依存しない因子を取り出す

TrigExpand[expr]     三角関数の式を項の和の形に展開
TrigFactor[expr]     三角関数の式を項の積の形に分解
TrigReduce[expr]     整数倍の角度を用いて三角関数を簡約
TrigToExp[expr]      三角関数を指数関数に変形
ExpToTrig[expr]      指数関数を三角関数に変形
FunctionExpand[expr] 特殊関数やその他の関数を展開
ComplexExpand[expr]  すべての変数が実数からなるとした上で式を展開
PowerExpand[expr]    例えば(xy)^p を x^p y^p に展開する

For文

(例)
NN = 10;
For[j = 0, j < NN, j++,
  a = 1 - ((j - 1/2*(NN - 1))/(1/2*(NN + 1)))^2;
  Print["j=", j, " a=", N[a, 3]];
];

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS