Maximaを用いた数式処理
背景：機械工学者は，様々な力学現象を理論的に解析し，説明しなければならない．簡便に数式を展開したい．
目標：様々な計算処理を体験し，数式処理システムを活用できるようにする．

a b c d x2−1

 d→  ad −cbc− ad −bcsin x
dy+ 3xy =xdx

数式処理システム：→− ad b−bc a
ad −bc y=

数式処理ソフトMaxima

1

C − cos x

数式処理

厳密解
（文字処理）

数値計算
グラフ表示

数値近似解
視覚化

プログラム

バッチ処理

商用

Mathematica,Maple,Reduce,...
非商用 Maxima,...

人工知能の研究の一環として開発され，強力な代数処理機能を特徴とする．

wxMaximaの起動手順

4

if 条件式 then "true" else "false";
条件式
表示結果
1=1true
1=1.0
false
1/2=0.5
false
float(1/2)=0.5 true

・豊富な関数群
・ビジュアル化による直感的理解
・高度な演算処理

wxMaximaの起動画面

3

注意点
理由
対策
式は思うほど数式表現された文字列を 最後は人間の手で綺麗にならない パターン処理するだけ整理する
0.5と1/2では 実数と整数の記憶方法は 正確な計算を扱い方が異なる 異なる．実数の場合はしたければ近似値が記憶される．
整数のみを使う

・数式の展開，因数分解・方程式の求解・行列演算・微分，積分・常微分方程式の解析解・非線型方程式
gnuplot等の外部ソフトを活用して表示
・if,for,whileなどの制御構造

代表的な数式処理ソフト

x3

使用上の注意点2(註)
if文,等の詳細は省略する

wxMaxima

5

6

ファイルの読み込み，書き出し
ユーザー(2) edsysアプリケーション(1) tipsのチェックを外す
wxWidgets(GUI)(3) 「Maxima-5.13.0」→「wxMaxima」

maxima(数式処理)(2) closeを選択

用語(1) 「スタートメニュー」→「すべてのプログラム」

wxMaxima

7

tip: 情報，助言，ヒント

demoファイルの実行

結果が直感的に解り易い形式で表示される式の入力部

demoファイルの内容

8

demoファイルには一連の入力コマンドが記載されている．
demoファイル「maxima_demo.wxm」をwxMaximaに読み込み，実行しなさい．
(1) moodleの指定場所からDownloadする．
(2) 「File」 → 「Open」でファイルを指定し，読み込む．

(2/3)^100;(2.0/3)^100;
plot2d([exp(-2*x),exp(-x),1,exp(x),exp(2*x)],[x,-2,2],[y,0,10]);(中略)Maximaでは二つの処理形式を利用できる．
対話処理形式

マウスで選択できる

結果を確認しながら対話的に処理する形式．

バッチ処理形式 処理手順を予めファイルに記載し，連続して処理する形式．

integrate(1/(1+x^3),x);kill(all);9

操作方法 (Operation)
入力方法

10

算術演算子(Arithmetic operators)
算術演算子 意味 数式 書式例 結果+5+38
和 x+y5-32差 x-y計算式;
セミコロンは命令の終わりを表わす

計算式の例 (3+5)*7/2-1;

積

*/

商冪

^
**

入力ラベル (%i1) (3+5)*7/2-1; 計算式
結果
出力ラベル (%o1) 27

冪階乗!

x*yx/y5*3
5/3

15
5/3x^y5^3x**y 5**3

125
125x!

1205!

定数%pi%e%i意味

書式
書式例
3
整数 小数点なし
3.14
実数 小数点あり

ラベルを計算に利用できる(%i2) %o1 * %o1;(%o2) 729

メモリは有限10進数（小数点あり）    → 2進数（浮動小数点）近似値で記憶

数学関数（Mathematical Functions）
意味
平方根
指数関数
自然対数

数式
√x
exloge xln x

近似値
剰余
絶対値|x|

仮定

コマンド名
計算例
sqrt(x) sqrt(3^2+4^2)
exp(x)
exp(log(x))

13

結果
5x

log(x)

log(%e^x)x

float(x)mod(x,y)abs(x)

float(1/3)
mod(10,3)abs(-2.5)

0.3333
12.5

assume(x)assume(x>0)

atan(x)

atan2(y,x)

a = 3× 2 + 5× 7
b = 3 /( 2a + 5)

a:3*2+5*7;
b:3/(2*a+5);
c:a+b;

1変数関数
f ( x ) := x + 2f (3) = 5

f(x):=x+2;
f(3);

変数名;

多変数関数
g ( y , z ) := y 3 + y 2 z + z 2
g (1,2) = 7

g(y,z):=y^3+y^2*z+z^2;
g(1,2);

変数の表示
変数aの値を表示する

削除

a;

定数 意味
使用目的
inf +∞ 関数limit()による極限値の計算
minf -∞〃
plus +0〃minus -0〃
true 真分岐構造ifの制御
false 偽〃複素数(Complex Number)，複素関数

関数名(変数名,...):=関数式;

共役複素数realpart(z)-imagpart(z);17

２次元グラフ（陽関数）
書式 plot2d(y(x),[x,xmin,xmax])
plot2d(sin(x),[x,0,2*%pi])
例kill(変数名,関数名,...);

指定のものをメモリから消去

kill(a,b,c);全てを消去し，(%i1)から再開

kill(all);15

carg(a+b*%i)x

変数名:変数の内容;

c = a+b値
float(%pi)→ 3.141592653589793
自然対数の底 float(%e)→ 2.718281828459045（ネイピア数）%i*%i → -1
虚数単位

a

変数の定義

関数の定義

意味
円周率

by
112

意味
書式
計算例
結果
a+b*%i3+4*%i---複素数3
実部 realpart(z) realpart(3+4*%i)
4
虚部 imagpart(z) imagpart(3+4*%i)cabs(z)cabs(3+4*%i)
5大きさ
carg(z)carg(1+%i)%pi/4偏角-%pi～%pi[rad]関数の定義（:=）

16

14

引数x,y
戻り値
[rad]
-1～+1[rad]-1～+1[rad]minf～inf-1～+1 -%pi/2～%pi/2[rad]-1～+10～%pi[rad]minf～inf -%pi/2～%pi/2[rad]xabs(y)

変数の定義（:），消去

コマンド名
sin(x)
cos(x)
tan(x)
asin(x)acos(x)atan(x)

逆正接 atan2(y,x) minf～inf
(4象限)

入力例
出力結果
assume(x>0); [x>0]sqrt(x^2);
xsqrt(y^2);三角関数（Trigonometric Functions）
意味
正弦
余弦
正接
逆正弦
逆余弦
逆正接(2象限)

定数（Constants）

11

y = sin x (0 ≤ x ≤ 2π )18

重ねて描く，オプション２次元グラフ（媒介変数表示）19

書式 plot2d([y1(x),y2(x),...],
xrange,yrange,options)plot2d([sin(x),cos(x),tan(x)],例[x,0,2*%pi],[y,-2,2],[nticks,200])

３次元グラフ（陽関数）20

書式 plot2d([parametric,x(t),y(t)],[t,tmin,tmax],options)plot2d([parametric,cos(t),sin(t)],例[t,0,2*%pi],[nticks,100])21

書式 plot3d(z(x,y),[x,xmin,xmax],[y,ymin,ymax])
plot3d(x^2-y^2,[x,-2,2],[y,-2,2])例 sin xy = cos x tan x(0 ≤ x ≤ 2π )( −2 ≤ y ≤ 2 )サンプル点数：200
optionsなし[nticks,100]の場合( x, y ) = (cos t , sin t ) (0 ≤ t ≤ 2π )３次元グラフ（媒介変数表示）

22多項式(Polynomial)の展開，因数分解( x + y )2→←  


x 2 + 2 xy + y 2π≤u≤

π22−π ≤ v ≤ π )有理式(Rational Expression)の操作
通分→
11+x + 1 x − 1 ←   
部分分数分解

通分

分子の抽出

展開

y^2+2*x*y+x^2factor(4!)

2^3*3factor(x^2+2*x*y+y^2)(y+x)^2多項式の係数ratcoef(f(x),x)

trigreduce(cos(10*x)*sin(y)+sin(10*x)*cos(y))

b2x

総和

2x −1

∑ f (k ) = f (a ) + f (a + 1) + f (a + 2) + L + f (b)sin(y+10*x)sum(f(k),k,a,b)2*x/(x^2-1)

partfrac(f(x),x)1/(x+1)+1/(x-1)

26方程式(Equation)の解
求解

x 2 − 5 x + 6 = 0 →方程式の解

solve(f(x)=g(x),x)

solve(x^2-5*x+6=0,x)10∑ k 2 = 12 + 22 + L + 102 = 385

sum(k^2,k,1,10)

k =1b

総積

x = 2,3k =a∏ f (k ) = f (a ) × f (a + 1) × f (a + 2) × L × f (b)[x=3,x=2]

solve(x^2+5*x+10=0,x)[x=-(sqrt(15)*%i+5)/2,x= (sqrt(15)*%i-5)/2]

k =a

product(f(k),k,a,b)x^2-1

partfrac(2*x/(x^2-1),x)

trigreduce(f(x))

2*y

総和，総積

25

denom(f(x))

denom(2*x/(x^2-1))

合成

xの1乗の係数を指定

2*x

分母の抽出

trigexpand(sin(10*x+y))cos(10*x)*sin(y)+sin(10*x)*cos(y)num(f(x))

num(2*x/(x^2-1))

trigexpand(f(x))

factor(f(x))

ratcoef(x^2+2*x*y+y^2,x)

ratsimp(f(x))

ratsimp(1/(x+1)+1/(x-1))

部分分数分解,→
sin 10 x ⋅ cos y + cos 10 x ⋅ sin y←合成expand((x+y)^2)(−sin(10 x + y )expand(f(x))

因数分解

24

展開

因数分解

展開

( −2 ≤ x ≤ 2,−2 ≤ y ≤ 2)三角関数の展開，合成

23

展開

書 plot3d([x(u,v),y(u,v),z(u,v)],[u,umin,umax],[v,vmin,vmax])式
例 plot3d([cos(u)*cos(v),sin(u)*cos(v),sin(v)],[u,-%pi/2,%pi/2],[v,-%pi,%pi])

 x = cos u cos v
 y = sin u cos v
 z = sin v
z = x2 − y2

expand(float(solve(x^2+5*x+10=0,x)))3∏ ( x + k ) = ( x + 1)( x + 2)( x + 3)
k =1

float()で実数表示させ，expand()で全ての括弧を展開

product(x+k,k,1,3)[x=-1.936491673103709*%i-2.5,
x= 1.936491673103709*%i-2.5]27

連立方程式の解x + 2 y = 3
 x = −1→ 4 x + 5 y = 6
y = 2
x + y = 2
x = 1→  xy = 1
y =1

線形非線形solve([f1(x,y,...)=g1(x,y,...),
f2(x,y,...)=g2(x,y,...),...],[x,y,...])

 a11 a12 a21 a22 MMa m1 am 2

f1,g1,f2,g2はx,y,...
に関する関数[[x=1,y=1]]

ATrank A

31

A:matrix([1,2,3],[4,5,6],[7,8,9]);i=3; j=2;
意味指定行の抽出
指定列の抽出書式
row(A,i)col(A,j)計算結果
7 8 9258transpose(A) 1 4 7
転置
2 5 8
3 6 9echelon(A) 1 2 3
階段行列(簡約な行列)0 1 20 0 0rank(A)
2階数

固有値の計算1 2A = 3 4 1 0
I = 
0 1det( A − λI ) = 02

λ − 5λ − 2 = 05 − 33 5 + 33
λ=,22

A:matrix([1,2],[3,4]);
I:ident(2);eq:determinant(A-x*I);
solve(eq,x);

1 2
 1 1
, B = 
A = 3 4
 1 1
p=2

2
A + B = 4
0A − B = 
2A:matrix([1,2,3],[4,5,6])

書式
A[2]

表示結果
[4,5,6]

入力方法
A[2]:[7,8,9]

2行1列目の要素

A[2,1]

4

A[2,1]:7行列の演算関数（正方行列のみ）

32

書式
計算結果
determinant(A)-2det Ainvert(A)-2
1−1A
3/2 -1/2
adjoint(A)
4 -2adj A 余因子行列-31

例(m=2,n=3)
書式
zeromatrix(m,n)
0 0 00 0 0ident(n)1 0 0
対角要素が10 1 00 0 1

差

A-B.

積

A.B

*
^^

スカラー p*Aとの積A^^p冪行列を用いた線形連立方程式の解

Ax = bx = A−1b

逆行列が存在しない場合，解は得られない，

35

1968年 米エネルギー省(DOE)や米航空宇宙局(NASA)の資金協力のもと，MITによりMacsymaが開発される
1982年 Symbolics社からの商用版と，William Schelterにより管理されるDOE版に分かれる
Mathematica,Mapleの登場により，市場を奪われる

2001年 William Schelterの死後，開発者や利用者有志により独自に開発が進められている
http://maxima.sourceforge.net/-結果
2 34 50 1
2 33 37 7
2 46 87 10
15 22

A:matrix([1,2],[4,5]);b:matrix([3],[6]);invert(A).b;

マサチューセッツ工科大学（MIT）
開発者
対応OS
Linux, Windows, MacOS
LISP
記述言語
ライセンス GNU General Public License (GPL)1998年 DOE版がGNU GPLライセンスに移行し，Maximaとして自由に使えるようになる

数式A+B1
3

意味
和−1

要素の値
全要素が0

Maxima演算子+ x   1 2   3   − 1   =    =  y   4 5  6  2 行列を生成する関数

343

5 

x + 2 y = 34 x + 5 y = 6↓
 1 2  x   3   =  
 4 5  y   6 
↓

意味
行列式
逆行列

30

A:matrix([1,2],[3,4]);
B:matrix([1,1],[1,1]);
p:2;

 3 3

AB = 
7 7
 2 4

pA = 
 6 8
 7 10 
A p = 
15 22 

値の記憶意味
2行目の要素1 2A = 
3 4

行列の演算

29matrix([a11,a12,...,a1n],[a21,a22,...,a2n],...,[am1,am2,...,amn])

要素の抽出

solve([x+y=2,x*y=1],[x,y])行列の演算関数（長方形行列も可）

a1n L a2n O M 
L amn L 1 2 3
A =  4 5 6solve([x+2*y=3,4*x+5*y=6],[x,y])[[x=-1,y=2]]

 1 2 3
A =  4 5 6
 7 8 9


行列(Matrix)の定義

28

参考文献

36

書籍
(1) 竹内薫：はじめての数式処理ソフト, 講談社Blue Backs(2) 横田博史：はじめてのMaxima, 工学社(3) 講談社サイエンティフィック編: 理系のためのフリーソフト, 講談社

Web(4) http://maxima.sourceforge.net/docs.shtml(5) http://www.eonet.ne.jp/~kyo-ju/maxima.pdf(6) http://www.yo.rim.or.jp/~kenrou/maxima/maxlin.pdf(7) http://phe.phyas.aichi-edu.ac.jp/~cyamauch/maxima/(8) http://ayapin.film.s.dendai.ac.jp/~matuda/TeX/PDF/34th.pdf(9) http://www.bekkoame.ne.jp/~ponpoko/Math/maxima/maxima.html

入力コマンドの保存

37

wxMaximaで対話処理形式によるコマンド入力「File」→「Save as」で保存．
ファイルの種類：「wxMaxima session (*.wxm)」/* [wxMaxima batch file version 1] [ DO NOT EDIT BY HAND! ]*//* [ Created by wxMaxima version 0.7.3a ] *//* [wxMaxima: input
a:3*2+5*7;/* [wxMaxima: input

start ] *//* [wxMaxima: inputb:3/(2*a+5);/* [wxMaxima: input

start ] *//* [wxMaxima: input
c:a+b;/* [wxMaxima: input

start ] */end

endend] */

] */

] */

/* Maxima can't load/batch files which end with a comment! */"Created with wxMaxima"$

必要最小限
a:3*2+5*7;
b:3/(2*a+5);
c:a+b;/**/はコメント．実行に影響しない．
テキストエディタで修正