電卓として使う[top]
○Mathematica を電卓として使う.
直前の計算結果を受け取る場合は % 記号を使う.
割り切れない計算結果の数値解を求めるときは,N 関数を使う.
平方根の計算
小数点以下6桁以下の数が含まれる平方根では,その小数は,そのままでは切り捨てられる.
これを防ぐには,N[式,有効桁数]で指定する.有効桁数は,小数点以下の桁数を指定する.
また,Sqrt[2]を計算すると,答えはそのままの形で返す.これはルート2は厳密値でこれ以上簡単にならないから.近似値として数値を表示させる場合は,これもN関数を使う.
対数計算
自然対数の計算はLog を使う.計算は次のように行う.
Log[x] eを底とする自然対数の計算.
Log[a, x] a を底とする x の対数.自然対数の場合は e を使う.
対数の計算で数式で求められない場合は,数値を求めるN関数を使う.
有効桁数
○小数の有効桁数は何も指定しなければ6桁.小数点以下6桁まで表示する.有効桁数を指定するには N[式, 有効桁数] で指定
(注意)計算の途中で,例えば 0.025 という少数を使っていると,上の有効桁数は機能しない.そのような場合は,0.025の代わりに,25/1000 と表記するか,
0.025`10
のように表記する. `10 の部分が10桁を表す.
初期設定の Precision[ ]は16桁
指数計算
分数の計算
分数式の計算の例.よく使う関数としては,
Together[] : 通分してまとめる
Apart[]: 簡単な分母からなる分数式の和にかえる
Cancel[]: 約分
ExpandNumerator[]: 分子を展開する
ExpandDenominator[]: 分母を展開する
ExpandAll[]: 分子,分母を展開する
分数の入力には / を使う.例 2/3
分数の掛け算は * かスペースを1つ入れる.例 1/2 2/3
分数の割り算のときは,各分数をかならず ( ) でくくる.例 (1/2)/(2/3)
○分数の計算で商と余りを求める.
商を求める関数は Quotient[ ]
余りを求める関数は Mod[ ]
基本関数だけを使う場合は,商と余りを別々に求めることになる.
関数定義を応用すると,式の形で求めることができる.
siki[a_,b_]:=
Print[a," = ",b," * ",Quotient[a,b],"
+ ",Mod[a,b]]siki[1996,8]
方程式の解き方[top]
○方程式を解くにはSolve関数を使う.
Solve[方程式,未知数]
ここで注意は,方程式は == で表されること.x^2 + x + 2 == 0 のように.
○すべての方程式がきれいに解がもとまるとは限らない.5次以上の方程式は厳密に解けないことが知られている.このような場合は数値解を求める NSolve を使う.NRootsもある.NRootsは多項式方程式の数値解を求める.
○一般の方程式の数値解には,FindRoot が使える.
○Solveでも連立方程式を求めることができるが, 組み込み関数 LinearSolveの方が効率がよい.
(まとめ)
Solve:変数についての(連立)方程式を解く.解は置換のルール(->)のリストの形で返す.方程式が未知数以外の変数を含むときは定数とみなされる.
Solve[ 方程式,未知数]
NSolve:多項式でかかれた(連立)方程式の数値解を返す
NSolve[ 方程式,未知数]
Roots:多項式方程式の厳密解をえることができるときに解を返す.分解された解の形で返す.Rootsは1つの多項式方程式しか扱えない.
Roots[ 方程式,未知数]
NRoots:多項式方程式の数値解
NRoots[ 方程式,未知数]
LinearSolve:行列方程式として与えられている連立方程式系を解く
LinearSolve[m, b] は行列方程式 m x ==b をみたす x を返す.
FindRoot :より一般的な方程式系の数値解.非多項式方程式(代数方程式ではない non-algebraic)の数値解を求める.解を探索する.ニュートン法を用いて解を求める.
FindRoot[ 方程式,{未知数,初期値}]
FindRoot とLinearSolveが難しい.FindRootは解があるかどうかを試行錯誤しながら求める.LinearSolve は行列の知識が必要.
SolveやRootsで厳密解がない場合は ToRules[式]やRoots[式]の形で返す.その場合は,% //N で数値解を求めることができる.
(基本方針)
1.通常の方程式の場合,まずは Solve でやる.
2.厳密解がでない場合は,NSolveを使う.あるいは,Solve の後に % //N
3.5次以上の方程式の場合は最初から,NSolve
4.連立方程式でも,基本的には Solveでよい.
5.行列表現のときは,LinearSolve
6.非線形の場合や,解があるかどうか探索するときは,FindRoot
【課題】年利率10%で銀行に10万円を預金すると,この10万円は1年後には110,000円になり,2年後には121,000円になり,3年後には133,100円になるというように増えていくものとします(複利の計算).このとき,預金が100万円になるのは何年後でしょうか.
(ヒント)FindRootを使う例です.方程式が非線形なのでSolveやNSolveは使えません.
p = 10;
r = 0.1;
ganrigokei = 100;
Plot[{p (1 + r)^n, 100}, {n, 0, 30}];
FindRoot[p (1 + r)^n == ganrigokei, {n, 1}]
連立方程式の解き方[top]
○連立方程式も基本は Solve関数
○連立方程式は,方程式をリストとして与える.未知数もリストとして与える.リストとは{ , , }のようにくくられた数値の組
連立方程式の解の組は //TableForm でみやすくなる.
○連立方程式を求めるには 組み込み関数 LinearSolveが効率がよい.行列表現で解く方法.
LinearSolve の使い方.
行列方程式は M . X == B のようにかく."." は行列の掛け算のオペレータ.M は係数行列,X
は未知数,B は定数項.以下のように,X のリスト X = {x, y, z} はかかなくてもよい.行列方程式の解は{x,
y, z} のようにx, y, z のリストとして返す.
M = {{1, 3, -2}, {1, -2, 1}, {3, -1, -1}};
B = {1, 3, 8};
LinearSolve[M, B]
関数の定義[top]
関数を定義するには := さらに,左辺の引数にはアンダースコア _ (Shift を押しながらマイナスキーを押す.JISキーボードでは右のshiftキーの左隣の「ろ」のキー)
関数名そのものも引数にすることができる.
a = 2
a + 7
f[x_]:= x^2
f[3]
f[c+d]
f[1+x]
f[f[1+x]]