pianofisica

Mathematics & Physics, Maxima, a bit Python & Wolfram, and Arts

入力例で学ぶWolfram言語の使い方(入門)

本記事ではプログラミング言語『Wolfram言語』の使い方を紹介します。

数式処理システムとして有名な『Mathematica』の根幹部分である

『Wolfram Engine』が2019年5月に無償で公開されました。

これにより、有償の『Mathematica』に似た数式処理が無償で利用できるようになりました。


本記事の基本的な内容としては以前の記事

pianofisica.hatenablog.com

で紹介しているフリーの数式処理ソフトウェア『Maxima』の使い方(入門)を、

Wolfram言語で置き換えたものです(動作はJupyterNotebookで確認しています)。

 


Wolfram言語の使い方入門

以下では具体的にWolfram言語の入力例を示します。

加減乗除

3+2 (* コメントは丸括弧とアスタリスク記号で囲みます *)
3-2
3*2

積の記号は空白でも可:

3 2
3/2

また

N[ 3/2 ]

と入力すると  1.5 と小数値を返します。

冪乗・階乗・二重階乗・ルート

3^2
50!
50!!
Sqrt[ 50 ]

数学定数

円周率
Pi
N[ Pi , 10 ]
Sin[ Pi/3 ]
ルート2
N[ Sqrt[2] , 5 ]

複素数

虚数単位
I^2   (* 虚数単位は大文字アイ *)
複素共役
Conjugate[ 2+3*I ]

 


実部・虚部
Re[ 2+3*I ]
Im[ 2+3*I ]
絶対値
Abs[ 2+3*I ]
偏角
Arg[ 2+3*I ]

代数的操作

素因数分解する
FactorInteger[ 10! ]
因数分解する
Factor[ x^2-4 x+3 ]
部分分数分解する
Apart[ 1/( x^2-4 x+3 ) ]
Apart[ 1/( x^6-1 ) ]
多項式を展開する
Expand[ ( x+y )^6 ]
式を通分する
Together[ 1/( x-1 )^2 + 1/( ( x-1 )*( x-2 ) ) ]
式を簡単化する
Simplify[ ( 2*x-2 )/( ( x-1 )^2*( x-2 ) ) ]
式の真偽を判定する
0 == Sqrt[2] - 2^(1/2)
0 == Sqrt[2] - 2^(1/3)
50! == 50!! 49!!

ただし数式を適当に処理しないとうまく判定しない場合も多いです: 

x^2-2*x+1 == ( x-1 )^2
x^2-2*x+1 == Expand[ ( x-1 )^2 ]

 


多項式から特定の項の係数を取り出す
Coefficient[ (x+y)^6 , x , 3 ]  
(* Coefficient[ expr , var , n ] で数式 expr の変数 var の n 次の係数を表示 *)
代数方程式の根を求める1
Roots[ a*x^2+b*x+c == 0 , x ]  
(* Roots[ eq , var ] で方程式 eq を変数 var について解いた根を表示 *)
代数方程式の根を求める2
Solve[ a*x^2+b*x+c == 0 , x ]  
(* Solve[ eq , var ] で方程式 eq を変数 var について解いた根を表示 *)
代数方程式の数値解を求める
NSolve[ x^6+x^2-1 == 0 , x ]
(* Solve[ eq , var ] で方程式 eq を変数 var について数値的に解いた根を表示 *)
連立方程式を解く
Solve[ { 3 x+4 y == 5 , 2 x+3 y == 3 } , { x , y } ] 
(* Solve[ { eq1 , eq2 , ... } , { var1 , var2 , ... } ] で連立方程式 eq1, eq2, ... の解を表示 *)
値を代入する
a*x^2+b*x+c  /.  x -> 3
a*x^2+b*x+c  /.  x -> ( -b + Sqrt[ -4*a*c + b^2 ] )/( 2*a )
Expand[%]
総和
Sum[ k , { k , 1 , 10 } ]
Sum[ k , { k , 1 , N } ]
Sum[ k^3 , { k , 1 , N } ]
総乗
Product[ k , { k , 1 , 10 } ]
10! == Product[ k , { k , 1 , 10 } ]

関数の定義・変数への代入

文字に式を割り当てる、値を代入する
u = x+y
v = (x+y)^3
u  /.  x -> 5
v  /.  { x -> 5 , y -> 3 }
割り当てた文字を使う・四則演算
u+v
Expand[ u+v ]
Factor[ u+v ]
Expand[ u v ]
Simplify[ u/v ]

 


割り当てた文字を使う・微分する
D[ v , x ]   (* v の x についての1階偏微分係数 *)
D[ v , { y , 2 } ]   (* u の y についての2階偏微分係数 *)
0 == D[ u , { y , 1 } ] - D[ u , y ]
割り当てた文字を使う・積分する
Integrate[ u , x ]   (* u を x について不定積分 *)
Integrate[ v , { x , 0 , 6 } ]   (* v を x について 0 から 6 までの区間で定積分 *)
割り当てた文字を無効化する
Clear[ u ]
u
v
関数を定義する
f[ x_ ] := Log[ 1+x ]/x
関数を評価する
f[3]
定義した関数を無効化する
Clear[ f ]
f[3]
関数を微分する
f[ x_ ] := Log[ 1+x ]/x
D[ f[x] , { x , 2 } ]

またはプライム記号でも可:

f''[x]
関数を不定積分する
Integrate[ f[x] , x ]
関数を定積分する
Integrate[ f[x] , { x , 0 , 1 } ]
関数をTaylor展開する
Series[ f[x] , { x , 0 , 7 } ]  (* f(x) を x について x=0 の周りで7次までTaylor展開 *)
等式を解く、有理関数の分母・分子を取り出す
F = x+1
G = x^2+x-2
Eq = ( x+1 == F/G)
Solve[ Eq, x ]
Denominator[ F/G ]  (*F/G の右辺の分母 *)
Numerator[ F/G ]  (*F/G の右辺の分子 *)

極限

極限値を調べる
Limit[ Sin[x]/x ,  x -> 0 ]

微分方程式

常微分方程式を解く
DSolve[ D[ x[t] , { t , 2 } ] == - k^2 x[t] , x[t] , t ]

 


三角関数双曲線関数)の諸操作

引数の和を展開する
TrigExpand[ Sin[ a+b ] ]
TrigExpand[ Cos[ a+b ] ]
TrigExpand[ Tan[ a+b ] ]
簡単化する
TrigReduce[ Sin[a]^2+Cos[a]^2 ]
TrigReduce[ Sinh[a]^2+Cosh[a]^2 ]

リスト

リストを作る・要素を参照する
S = Table[ { a , b , c } ]   (* リストの定義 *)
S[[1]]   (* 要素の参照 *)
S[[1]]+S[[2]] S[[3]]
S[[4]]  (* 定義されていないものはエラー *)
Sum[ S[[i]], { i, 1, 3 } ]

 

キーワード:Wolfram言語、Wolfram Engine、JupyterNotebook