howto/mathematica †
一行メモ †
- プロットした図を選択した状態で印刷すると、図だけを印刷できる --
- 会計用表記の出力:AccountingForm --
- スライダーで値を変化させてグラフを見る: --
Manipulate[
Plot[a*Sin[n*x], {x, 0, 2*Pi}],
{{n, 1}, 1, 20, Appearance -> "Labeled"},
{{a, 1}, -10, 10, Appearance -> "Labeled"} ]
- 例 --
V[x_, y_, z_] := -1/Sqrt[x^2 + y^2 + z^2] (* クーロン引力 *)
m = {V[x, y, z],
D[V[x, y, z], x],
D[D[V[x, y, z], x], y],
D[D[D[V[x, y, z], x], y], z]} (* 3階微分までの結果を、行列mに代入 *)
mm = Simplify[m /. {y -> 0, z -> 0}, Assumptions -> {x > 0}] (* 正のx軸上の結果を、行列mmに代入 *)
{mm[[2]], mm[[1]]} (* 確認のため∂xVとVを行列要素要素として表示 *)
mm[[2]]/mm[[1]] (* ∂xV / V の比 *)
- DateString[] で Fri 7 Jun 2019 12:15:56 などが出力される。
Date[+9] では {2019, 6, 7, 12, 9, 34.1648988} などのリストが出力される。 --
- MonomialList[式] 式の各項をリストにしたものを与える --
- GridLines -> {Table[i, {i, -10, 40}], Table[i, {i, -3, 3}]} Plotでグリッド線を自分で与える --
- https://reference.wolfram.com/language/ref/Plot.html?q=Plot マニュアルのリンク --
- ESC hb ESC でディラック定数入力できる(hbの他にもいろいろあり) --
- Magnify[ hoge, 1.5] とすると1.5倍に出来るが、印刷時は期待通りにならない。 --
- メニュー→パレット、でいろいろな記号を入力できる --
- コンテキスト --
$Context (*現在のコンテキスト(名前空間のようなもの)を表示する*)
Global` (*デフォルトで使われているコンテキストらしい*)
変数等の正式名称は、 コンテキスト名`簡略名 である。現在のコンテキスト内の変数等であれば簡略名だけで使用可。
- ( ..body.. )& は、純関数(名無し関数)であり、 ( ..body.. )&[x] のように使える。引数は#1,#2,...で利用可 --
- 前置記法 f@x は、f[x]の意味 --
- 後置記法 x//f は、f[x]の意味 --
- 入力の自動フォーマットなど --
- AutoIndent = False がいい
- ShowAutoStyle = False がいい
- 音を鳴らす --
Manipulate[
Play[Sin[2*Pi*(440 + s)*t], {t, 0, 1}],
{{s, 0}, -100, 100, Appearance -> "Labeled"}]
- Plotで軸目盛を書かない: Ticks -> None --
- Plotで軸を書かない: Axes -> False --
- DSolve --
DSolve[{y''[x] + \[Lambda]* y[x] == 0, y[0] == 0, y[\[Pi]] == 0}, y[x], x] (*二階微分方程式を解いた例*)
- Plotのオプションで、AspectRatio -> 1/4, ImageSize -> 640 により横長拡大可。 --
マニュアル・リンクなど †
いろいろなこと †
適度な印刷方法 †
「長い数式を印刷する場合」
ファイル→印刷設定→印刷用環境
→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] (* 逆行列 *)
ベクトル †
ベクトルは、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]}}
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]]
- 上のS[n,x]の微分をプロットしたい場合は(:=と=のいずれの場合でも)、
Plot[ {S[0,x], D[S[0, t], t] /. {t -> x}}, {x, -2, 2}]
とする。
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]];
];