Emacs calc -tutorial
-
starting calc
- C-x * に続けて、c(start standard calc interface -on, off),
k(keypad-mode), ?(available options) *(also start c or k)
- The standard calc interface
- Quick Mode
- C-x* qで 代数式をタイプするとボトムに出る。emacs kill-ringに結果が残るから C-yでヤンクできる。
- Keypad mode:略
- Embedded Mode:
- 編集バッファ内でcalcを使う。空行を式の前後に残してコピーし、カーソルをこの新式に置きC-x*
eを押すとこれがcalc-stackに行く。バッファ中モードはcalc mode lineになり、キーボードはcalcのように働く。
- 例: ln(ln(x) を結果を書きたい場所に空行を前後にコピーし、C-x* e, a d x<RET>,
d= (formulaを中央に)、dB (big display mode), d}(1)
- %[calc-mode :justify: center]
- %[calc-mode :language: big]
- %[calc-mode :right-label: "(1)"](topに置いてもよい)
- C-x* wはsingle word(number) に働く。
- A slope of one-thrd corresponds to an angle of
1degreeで、カーソルを1に置きC-x* w, 3/, IT(inverted triangle)としてC-x* wでexit
- Other C-x * commannds
- C-x * g :リージョンをベクトルとして取り込む。
- C-u C-x* g:リージョンを数か式に訳す。
- C-x * r:rectangleを行列として読み込む。…これらのcomplementaryは
- C-x * y :スタックから編集バッファに返す。
- C-x *カルクをオンオフするコマンド群
- *
- =,+,-,\,/,&,# :*の代用
- C:カルクのオンオフでcalc window 内
- O:同上だがnew calc windowを選ばない
- B:full screen
- Q:クイックモード
- K:キーパッド
- E:カーソルのある式上にenbedded mode
- J:着目部をセレクトしてenbedded mode
- W:カーソルのあるテキスト又は数字上にenbedded mode
- Z:コマンドZ Iで定義した方法でカルクを起動
- X:quit (q inside of caLc)
- データを出し入れするコマンド群
- G:grab the region as vector
- R:grab the rectangular
region
as a matrix
- ::rectangular region
を取り込んで各列の和を計算
- _:
各行の和
- Y:yank (calc -> editing
buffer)
- 憑依モードで使うコマンド群
- A:現行バッファに憑依`:='あるいは`=>'を含んで
いる
全数式を見つけ、場所を記録し変数の変更に対応する。
- D:すぐ下に現行数式をコピーし選択
- F:現カーソル一に新しい数式を挿入
- N:バッファ内の次の数式に
- P: 前の
- U:式を更新
- `:式を編集
- その他
- I:カルクマニュアル
- T:カルクチュートリアル
- S:カルクサマリー
- L:カルク全体のロード
- M:キーボードマクロ
- 0:リセット
-
RPN tutorial
- 1<ret>2<ret>3<ret>4
+ * - ?
- 2*4 + 7*9.5 + 5?4 ?
- <tab> (top2 change)
- M-<tab> or esc
<tab> (level 3 to the top)
- M-x calc-hypot(ピタゴラスの定理) = fh = x
hypot
- M-<del> --
<del><del>
- numeric prefix
- 10<ret> 20<ret>
30<ret> C-u 3 + => 60
- 上から2番目のスタック成分のコピーするには C-u -2
<ret>
- M-0 <del> 全消去
-
Algebraic-Style calculations
- apostrophe (')を押して式を書く。
- m a は algebraic mode on/off:( [ s
数字 を押すと自動的にモードに入る。)実際には両モードの混合。
- $はスタック最上部の数字を表す。sqrt(2*4+1)は '2*4 $+1
Q
- Qをalgebraicでは?Qがこわれたら? sqrt($)
$^.5 .5~
- $$,$$$などスタックの上位数($$+$<ret>は+と同じ)
- s s 変数に数をstore,stackはそのまま
- s t 変数に数をstore stackから取り去る。
- = 式をevaluate
- s r 変数をrecall
- q0~q9 quick vaqriable
- miはinfinite mode
- "evaluate to" operator (=>)
- `s=' command : stackを使って => formula
-
Undo and Redo
- U undo
- D redo
- t d (trail display on/off)
- > (trail pointer --- last
trail entry)
- t] (reset trail pointer)
- tp ( >を動かす)
- ty (stack yank)
- tr (trail-search-reverse)
- ->(C-s = search C-r = backward)
- <return> ty
- t-?
- stack はread-onlyだが `で編集できる。
-
Mode-Setting Commands
- p12 (12桁) --- floating-point number
- F (calc-floor) command --- float
-> integer
- c f (calc-float) command --- integer
-> float
- d n "normal"
- d f "fixed-point"
- d s "scientific notation"
- d e "engineering notation"
- M-3 d n で3つの有意digitに丸められる(display上のみ)
- モード変換時の全スタック書き換えを止めるにはshift-h(H)をまずタイプ
- d<spc>は全スタックを書き換え
- d g 3桁ずつ区切る。M-5 d gは5桁ずつ。(小数点以下は区切らない)
- 小数点以下はM--M-5 d g で区切る.
- d , <spc>で、をスペースに、 (d ,
,で元に戻す)
- d r 16<ret>でhexadecimalに変換、16#
- d r 2<ret>でbinary
- <>はスタックウィンドウスクロール
- `(backquote)でtop of stack編集モード(C-c
C-cで終了)
- ex.1)
- 3#0.1 (d r 3) -> 3#0.222
これを 3倍で 3#1とならず 0.222
- 3#0.2 2/ => 3#0.1000...1
- d r 3 で桁は 12 / log(10)3=25.
- ex.2)
- 8#1.23e3 = 8#1230.0
- d r 3 で 3#1e2 -> 3#100 (=9)
- hexadecimalで f.e8fに 16の15乗をかける。
- 16#F.E8F*16.^15
- 16#f.e8f<ret> e
15<ret>
- mは計算のモードを変えるprefix mr
- 45 S (sine) 2^ c1 (idigit reduce
& round)
- ex.3) f] f[ (lastnumber 1 increment
or decrement)
- P 4/ mr(radian) S
πの四分の一をラディアンにしてサインを
- .5 Q I S m d U I S
0.5の平方根を逆三角関数(Inverse sine)でラディアンとした後度に直す。
- c d(degに) c r(radianに) 変換する
- mf --- fraction mode
- 12<ret>9 / mf U / mf(もどる)
- :を使うといつでもfractionが得られる。
- =>をつかうといつでもfraction にできる。’12・9=>
<ret> mf
-
Arithmetic Tutorial
- commands + - * / ^
- n (change sign) & (reciprocal)
- 例 2<ret> 3<ret> 4 M-3 + U
10 M- M-3+ (binary operator +)
- 2<ret> 3<ret> 4 M-3 &
M-2 & (unary operator &)
- F ( flooring -2.4->-3, 2.4 ->2,
2.5->2) R (round -2.4->-2 etc)
- \ (dividing-and-flooring) ,
%(remainder)
- \commandは/Fと同じように見えるがそうでない場合
は?...precision 6で
- 123456789/2 => 61728500 (/F)
- 123456789\2 => 61728394 (\ ..
これは :2 F)
- 64 n <ret> <ret> S
<tab> C fh(=calc-hpot) (sinx^2 + cosx^2 =1)
- U / IT (-64)
- U U M-2 n / I T (-64) ... 実際は116度
- fT (arctan
2)と言う関数があり(inverse tangent) a pair of numbersからinverseTangentを計算できる。
- U U fT (116となる) M-<ret>
(last-arguments
command: fTの引数2つ) M-2 n fT - (180)
- cosh(x)^2-sinh(x)^2=1: 64 n
<ret> <ret> HC 2^ <tab> HS \ 2^ (Prefix60で)
- logで Hを使う。(base e->10) 1000
L U HL
- B(base-B) 1000<ret>
10 B (10^3=1000) HE(10^3=1000) HP(e hyperbolic push) B(1000=E^6.9077)
- factorial (階乗) !(exact integer)
cf(floating-point format)
- non-integer の factorialは gamma
function(fg)を使う。
- 4. 4.5 5. M-3 ! M-0 <del> 5.5
fg (N!=gamma(N+1) であることを確かめた。)
- nからmを選ぶ2項定理N-choose-M
n!/m!(n-m!) は結果が小さい数でも途中は大きい。k c はこれを避けて計算する。
- `k' prefix はcombinatorics and
numbertheory で共通するいくつかの関数を定義する。30 choose 20後素因数分解する。
- 30 <ret> 20 kc kf
このベクトルをかけ合わせて元に戻す。
- V R *
- at least 10000 entries の a hash
tables
を要するプログラムを書いているならそのサイズは素数が良い。
- 10000 k n (10007) I k n
(9973):
next prime after 10000 と next_prime_less_than 10000
-
Vector/Matrix tutorial
-
vector analysis
- [1 2 3] s1(reuseのため) [7 6 0] s2 +
[8 8 3]
- r1 r2 * 19(dot
product =
|a||b|cos θ, 1*7+2*6+3*0)
- A command = absolute value :
- M-<ret>(dot
productの引数) M-2 A
(lengths) * / IC (θ両ベクトル間角)
- cross product (|a||b|sinθ) V C
- r1 r2 V C s3 M-<ret> M-2
A *
/ A IS
- Vector related commands prefix
は sift -Vとすれば良い。
- r1r3* -> 0, r2r3 * -> 0
(cross productの性質)
- 問1) ベクトルの正規化(長さを1に) r1
<return> A /
- 問2) 定規の任意の場所に粒子がある確立のリストがある場合の平均の位
置を出せ。->位置と確立のdot product
-
Matrices
- 同次ベクトルのベクトルをMatrixと言う
- [[1 2 3][4 5 6]] or '[1 2 3;4 5 6]
<ret> s4
- 掛け算の時、左行列の列数と、右行列の行数が同じでなければならない。結果の
i行j列は、左i行右j列のdot productである.
- r4 <ret> vt * ->(2行2列) U
<tab> * ->(3行3列)
- plain vector と
matrix の掛け算で 単一の行になるか
列になるかは行列の右か左かで決められる。r4 r1* (2x3)*(3)=(2)
- 問1) 上記2X3matrixを[6,15](行のsum)にするにはなに
を* 。列のsum [5,7,9]を得るには?
- 問2) 解け
- x+ay=6, x+by=10 ... [[1,a][1,b]]
*[x,y] = [1*x+a*y, 1*x+b*y]
- '[6,10] <erturn>
'[1,a;1,b]<return>/ dB dN
- 問3) overdetermined system
を解くには AX=Bを trn(A)X=trn(A)B で正方行列化して解く
- a+2b+3c=6,4a+5b+6c=2,7a+6b=3,2a+4b+6c=11
を解く
- '[1,2,3;4,5,6;7,6,0;2,4,6]<ret>
s7
vt
[6,2,3,11]
*
- r7 vt r7 * /
- r7 <tab> * でa b c
に代入して比べる。
-
Vectors as Lists
- stack entries をベクトルに入れ込む。10,20,30
M-3 vp vu(unpack)
- consecutive integerやmany copiesから。
vx 4 <ret> 17 vb 4<ret>
- map command でベクトルの全要素に作用。VM
*(各要素ずつ掛け)
2VM^(各要素の二乗) VMQ(各要素のルート)
- 問1)powers of 2 from 2^-4 ~
2^4のベクトルを計算せよ
- 2 vx9 5VM-(or5-) VM^
- reduce VR: 123123 kf
VR*(素数リストにして元に戻す) r1 r2 VM* VR+(dot product)
- accumulate VU (reduceのintermediate
results のリストベクトル):vx 6<ret> VU*
- v. (abbreviated)mode : vx 500 1 VM+
- t. (abbreviated
trail)...vx速くなるが、ty(ベクトルのyank)が使えなくなる.
- 最小二乗法:
- C-x * i (on-line info) or press g
then type List Tutorialでテーブルを出し、
- emacs-rectangle をinfo buffer 中で
C-x * r(calc-grab-rectangle)
- m=(N sum(xy) - sum(x)sum(y))/(N
sum(x^2) - sum(x)^2)
- r1 VR +
t3
...sum(x)
- r1 2 VM ^ VR + t4 ...sum(x^2)
- r2 VR + t5
...sum(y)
- r1r2 VM * VR + t6
...sum(xy)
(sum(xy)とsum(x^2)の計算では*を使うこともできた。)
- r1 vl t7
...N
- r7 r6 * r3 r5*
- r7 r4 * r3 2^ - / t8 ...
m(slope)
- y-intrecept bは b= (sum(y) -
sum(x))/Nで: r5 r8r3* - r7 / t9
- plot mx+B : r1 r8 * r9 + s0
(定数の加減乗除はmappingなしでできる)
- originalからこれを引いてmaximum
errorを見出す。:r2 - VMA(絶対値) VRX(最大値)
- max functionは `fx' だがX(max)
N(min)も可(VRfx or VR x max<ret>
- GNUPLOTでplot : xとyをstackに積み g,f
でできる。 r1 r2 g f
- g a でtutorialが消えて*Gnuplot
Commands* (g qでもどる)
- <del> r0 ga gp で r0を追加。
- gS gp
- 問2:行列の転置方法でmとbを解け
- m*x + b*1 = y でm bを解く
- r1 1 vb 19 <ret>
- M-2 vp vt s3 (--- xi)
- vt r2 * (--r2--yi)
- r3 vt r3 *
- /
- input data が
rectangleをなさない場合、mark and point して C-x * g (calc-grab-region)
- geometric
mean(幾何平均ーN個の数の積の、Nth根)
- C-x* g <ret> VR*
<tab> vl I^
- 2項係数の交互和 N-choose-0 - N-choose-1
+ N-choose-2 - ... N-choose-N が0になることをN=6で
- vx7<ret> 1-
- VM' (-1)^$choose(6,$)<ret>
- VR +
- VM'
コマンドはベクトルにmapする関数の代数的表現をpromptする。
- $は関数の引数。各ベクトル要素値を$に入れる.
- 2つの引数の関数を定義したとき$$は最初の、$は次の引数を表
す.VM’ $$-$はVM-と同じ。
- $はスタックの最上部、$$は次。$$ー$は-と同じ。
- VM’はtrail中にoper<functionと引
数#1..>を残す。---nameless function
- nameless<>記法をVM'promptに使うこ
ともできる。nameless functionは使われるまで評価されない。
- VM’$+random(2.0)はrandom(2.0)を1度
使って全ベクトル要素に加えるが、VM’<#+random(2.0)>はrandom(2.0)を個別に評価して各ベクトル要素に加える。
- VM a= ,VM a>
- vv リスト反転
- VSソート
- vr、vc行列空行または列を抽出
- 問4:K'th "divisor
function"はinteger n の全divisor(約数)のk乗の和。divisor functionは8と72であること。
- 30<ret> vx30 s1
- VM% 0 VM a= s2
- VR+
- r1r2 VM* VR+
- 問5:kf は数のprime factors
のリストを作る。square-free(primeがダブらない事)を見出すkey-strokeは?(squareがなければ0をスタックに残すよ
う)
- 19551 kf
- <ret> 0|
- <tab> 0 <tab> |
- VM a= VR + 0 a=
- 問6:vx 6 <ret> VM vx v/
- 問7:上記より 1- vx 6 <ret> 1-
VM' $ ($+1)/2 <ret> VM + (VM'の代わりにVMVR+でも)
- 問8:ベッセルJ1のリスト`besJ(1,x)'
xについて0~5迄0.25ずつ計算してbesJ(1,x)が最大になるXを(aXコマンド使用)
- vx21<ret> 1- 4/ s1
- VM'besJ(1,$) <ret> (同じ事は
1<tab> VM f j でも)
- VRX VM a= <ret> VR +
<del> ...最大値一つであった
- r1 VM* VR + (a=
で複数のmaxがあったら各xの合計になるのでv m(calc-mask-vector)コマンドを使う
- aX コマンドはもっと簡単('besJ(1,x)[0..5]
<ret> aX x <ret>)
- 問9:0<= N <10^m
(m=12)の整数をm-digit
のべくとるよのベクトル表示にする。これに1を加えてm+1桁のベクトルを作れ.(最上桁に繰り上がりが生じるかもしれないから)。そしてこれを痛乗の整
数に戻せ。(例25129925999)
- 25129925999 <ret>
10 12 vx12 <ret> -
- VM^ s1 VM\
- 10VM% s2
- 9VM a= vv
- VU* vv1|
- ~ r2 | VM+ 10VM%
- 10 <ret> 12 ^ r1 |
- VM* VR+
- 問10:リスト中のすべての数が同じであるか調べるためにVR
a=を使おうとしたらどうなるか?
- [a,b ,c,d]について((a=b)=c)=d)
..1or0となる
- [7,7,7,8,7] <ret>
<ret> vr 1<ret> VM a= VR*が正しい
- 2x2四角中の半径1円でダーツ。 krは0とスタック上の数の間の乱数
を作る
- v. t. 2.vb100 <ret>
<ret>(見やすく)
- VM kr(乱数でx)
- 1- 2VM^ <tab> VM kr 1-
2VM^(X二乗 Y二乗)
- + 1VMa< VR+ (x^2+y^2<1
の数の確率がpi/4と同じでなくてはならない.)
- 100/ 4* P/
- The match stick problem
- 2/piの確率で線をまたぐ
- v. t. 1. vb100 <ret> VM
kr 180. vb100 <ret> VM kr 90 -
- m d VM C +
- 1 VM a > VR + 100 / 2
<tab> /
- 2つの大きな整数の最大公約数(GCD =
kg)が1である確立は6/pi^2
であることを利用。
- 1000000 vb 100 <ret>
<ret> VM kr <tab> VM kr
- VM kg 1 VM a= VR + 100/
- 6 <tab> / Q
- 問い13:"Testing, 1, 2, 3 のmodulo511
は121
- "Testing, 1, 2,
3<ret>([a,b,c,d]->3(3(3a+b)+c)+d=27a+9b+3c+d)
- <ret> vl vx 16
<ret> -
- 3<tab>VM^ * 511 %
- 3$$+$式に還元
- "Testing, 1, 2, 3<ret>
- VR '3$$+$
<ret>...これよりもVR'(3$$+$)%511<ret>
- 問い14:HVRとHVUはnested function
evaluation するコマンド。HVUは初期値とステップNのベクトルを返す。
- [0,0] 50 HVU' <# +[random(2,0)
-1, random(2,0) -1]> <ret>
- vt vu gf
- [0,0] 50 md p6 <ret> HVU'
<# + sincos(random(360.0))> <ret>
- vt vu gf
-
Type tutorial
- 分数を扱う 10! 49<ret> : 2+ &
(:コマンドが分数、/がfloating )
- cf(floating-point format)
cF(fractional format ..現在のfloating-point precisionで分数化する)
- 問1:1.26508260337 2^P/ cF
では12桁の有理数の分数になるから U p 10<ret> cFでうまく出る。
- 複素数はrectoangularと極の両形でstoreされる。
- 9 n Q cp 2* Q
- `inf'はalgebraeic entry でのみinputできる。
- ' inf <ret> 17 n *
<ret> 72 + A + 負値をかけると符号が-、絶対値で正、足すとnan(Not A Number)
- ゼロで割ると通常エラーだがmi(infinite
mode)で答えを得られる。 1<ret> 0 / mi U 17 n * +
- 問2:inf/inf, exp(inf), exp(-inf),
sqrt(-inf), sqrt(uinf), abs(uinf), ln(0)
- 問3:nanが表すもの
- HMS(時分秒)forms
- 2@ 30' <ret> 1+ <ret>
2/ /
- 角をHMSで表すこともできる. 0.5 IT(=arctan)
ch(度分秒) S(サイン)
- Beatles Abbey
Road は47分26秒で17曲である。曲の平均の長さは?各曲に20秒加えると全部で?
- 0@47'26" <ret> 17/
- 20" + 17 *
- date form( algebraeic entry
のみ <>で囲む。)
- '<13 Jan 1991>, <1/10/91,6
pm> <ret> - (2つの日付の減算)
- tN (now) 2+(日数) 10@57 +(HMS)
- tJ(ユリウス歴に変換)
- tW(その日付を含む週の初日を探す)
- tI(月単位のインクリメント)
- 問い5:次の13日の金曜は何日後?
- '<13/9> <ret>
- vx 18 <ret> VM tI
<ret> で探す。 '<13/12/2013> -<28/8>で答
- 問い6:10001 A.D までのleap year?
- '<jan 1 10001> <ret>
'<1/1 2012> -
- 10001 2012 - 365* -
- error form (mean+-
sd):電柱が1Mの誤差で30M先に、
0.2Mの誤差で8Mの高さに測定されたとき、電柱の先端までのスロープの角度は?
- 8p.2<ret> 30p1 / IT (14.93+/-
0.594 ....この間に収まる確率は約60%)
- 問い7:トーラスの体積(2 pi^2 R(=20) r(=4) ^2:
Rはトーラスの半径rはチューブの半径、各5%の誤差内にある。)
- relative error -> absolute
error にする。+/-表記に 20<ret> .05* 4<ret> .05*
- 2 P 2^ 20 p 1* 4 p .2
<ret> 2^ *
- ベクトルと同じくエラーフォームをアンパック<ret>
vu <tab> /
- 6316 cubic centimeters within
about 11%
- interval form
電柱が28~31メータの距離で7.7~8.1メータの高さであるとしたら、
- [7.7..8.1] [28..31]/ IT .....
[]inclusive, () exclusive
- [1..100) & [2..3)*
- 1/ (0..10) ?, 1/(-10..0) ?,
1/[0..10] ?, 1/[-10..10] ? miで
- square するには<ret>* と
2^の方法があるがinterval formsでは?
- [3n..3]<ret>2^
<tab><ret>* (interval formは数を表すのでなく、区間の多くの数のシンボルである。)
- modulo form ...時刻を扱うときはmodulo 12 or 24
- 17 M 24 <ret> 10+ n
5/ (最後のステップで 5 modulo 24を掛けると
21となる数を見つけたが、Mが今回のように素数でない場合見つけ得ることは時々
でしかない。)
- 10M24 100^ (16 mod 24) と
10<ret> 1000^ 24% (16) で前者の方が巨大な中間値を出さないので効率的.
- 問10: nが素数かつxがnより小さい整数なら、x^(n-1) mod
n = 1...フェルマの素数。もしnが素数でないなら殆どのxに対してfalse。811749613、15485863について。
- 17M811749613<ret> 811749612^
- [17 42 100000] 15485863
<ret> VM'($$ mod $)^($-1) <ret>
- kpコマンドは素数テストを行う.大きな数に対してはこのフェルマテスト
を使って誤判定確率とともに表示。
- HMS formをerror form,
intervalls,modulo form の一部あるいは複素数の一部として使用できる。例:calc-time
- x time <ret>
(現在の時刻) n(現在から午前0
島での時間)
- 問11:大雑把に言って1年は pi*10^ である.現在からその秒数語は
何時?
- P 1e7* 0@0'1" * xtime <ret>
+あるいは
- 'hms(0,0,1e7 pi) <ret> =
xtime<ret> +
- disco
versionの Abbey_Road が各曲(17曲平均2分47秒)20ー60秒長い。75分CDに収まるか?
- 0@2'47" [0@20"..0@1'] + 17 *
- 単位
- '2 in <ret> uc cm<ret>
uc fath <ret> u b (インチ、センチ、尋、基底(この場合メートル))
- '9 acre <ret> Q u s(=unit
simplify) '$+30cm <ret> us 2^ u c cgs
- '55 mph <ret> u c kph
<ret> u c km/hr <ret> u c c(光速)
- temperatureはその温度と温度差の2種の意味
- '20 deg F <ret> u c deg C
<ret> U ut deg C <ret> c
f(20°Fの変化を℃変化に直す。20°Fの絶対値を℃
になおしついで小数点表示する。
- 単純な単位変換には数字をスタックに置いて u c と u tで old
とnew unitをpromptする。
- complete units listを表示させるには u v
(then C-x * c)
- 問13:一年の秒数 1 yr<ret> u c s
<ret>
- 問14:スーパーコンピュータは光速で限られる。4.1nsのクロックで
cabineが1メーターであるなら、光速がそのデザインの主要なファクターとなり得るか?
- '1 m / c u c ns(nanosecond)
<ret> 4.1 ns / u s (signalは光速に達しているだろう)
- 問15:ナメクジSamは5yard/hrで旅する。1pillで速度2倍に
なるピルがある。ハイウエイでは55miles/hrが制限速度である。いくつ飲めるか?
- '55mph <ret>
'5yd/hr<ret> us(plain
numberにする) 2 B (2の何乗か)
14錠までのめる
-
Algebra and Calculus Tutorial
-
Basic Algebra Tutorial
- Basic algebra
- 変数を引用する数式をスタックに置くことができる。
'2x^2-6<ret> n '3x^2+y<ret> *
- 問1:'x<ret> Q2^ と
'x<ret>2^Qが同じ結果 xになるか?
- sqrt(-4)^2=-4,
- sqrt(-4^2)=4(複素数では絶対値にならない。)
- 上記式を a x(expand) a c x<ret>
(xでcollect)
- 1:2 sl y<ret> 2 sl
x<ret> (yに2分の1、Xに2を代入) Xに数値がストアされていたら s u x<ret>をまず。
- Yが1:2の時のXの最大値。Xの1次導関数で0、2次導関数で負。
- U<del>s1 (17x^2-6x^4+3) a d x <ret>
s2... x=0で0
- 'x<ret> / a x a s(simplify the formula)
- 0 a= s3 a S x<ret>...
ついで2次導関数にxをいれる。
- a. (右辺の抽出、他の方法はv uを使う) r2 a d x
<ret> s4
- <tab> s l x <ret> U
<del> 0 s l x <ret>... 最初は負で次は正(最大、最小)
- 34-24x^2=0をa
Sで解いたら1つの主要な解(符号は+、整数なら0)を返す。全部解くならHをa Sの前につける.
- r3 H a S x<ret> s5 1n
sl s1<ret> calcでS1という変数が未知のサインを表す(+、ー)
- r1 r5 sl <ret>..
slの別の使用法:X=***のような式を代入して変数に割り当てる。
- [1n,1] <tab> VM
$<ret> .. V M $ はV M 'と同様だが式をスタックトップからとる。
- built-in command `a P' はH a
Sを使って式を時全解のベクトルを得る。
- 問2:polynominal の root
ベクトルからoriginal polynominalを作る。
- r2 (34x-24x^3) aPx<ret>
- VM' x-$<ret> VR*
- acx<ret> 24n* ax
- `m s'コマンドでSymbolic
modeとし、(近似floating-pointにしない)加えてfraction modeにする(`mf’)
- r2<ret> m s m f
aPx<ret> ..もっと読みやすくするにはBig modeにする。
- d B (Big mode), d C (C mode),
d F (Fortran mode), d T (Tex mode)
- m s m f d N で元に戻る。
- この式の曲線のx=1~x=2下部の面積は、関数のインテグラルであ
る。
- r1 a i x
- [2,1] <tab> VM$
<ret> VR -
- 問3:`x sin(pi
x)' (sinはラヂアンで計算)の1~yまでの積分は? yが1~5までの整数についての積分値は?
- 'x sin(pi x)<ret> mr aix
<ret>
- '[y,1] <ret> <tab>
- VM$ <ret>
- VR-
- =
- vx5 <ret> <tab> VM$
<ret>
- 例えば sin(x)ln(x)
を積分する能力はカルクにはない。1つ
のやり方はnumericallyにやる。
- 10 <ret> 1 <ret> .1
<ret> C-u v x (extended vx as follows: vx10 <ret> 9+
.1*)
- 'sin(x) ln(x) <ret> s 1
mr p5<ret> VM$ <ret>
- VR + 0.1 *
- another approach
- r1 a t x=1 <ret> 4
<ret> ...x=1でテイラー展開
- a i x <ret> [2,1]
<tab> VM$ <ret> VR-
(テイラー展開はln(0)のような特異点から離れた方がよく収束するからx=1より2や1.5で展開するのが良いかも)
- 問4:stasirstep と polynominal
に加えて第3の方法はシンプソン近似
- (h/3) * ((f(a) + 4(f(a+h)
+2(f(a+2h) +4(f(a+3h) + ...+2(f(a+(n-2)*h) +4(f(a+(n-1)*h) + f(a+(n*h))
:nはスライス数、hはスライスの幅
- これにたいしてstairstep
methodはh*(f(a)+f(a+h)+f(a+2h)+...+f(a+(n-1)h))となる。
- Rewrite Rules
- 1/cos(x) - sin(x)tan(x)を単純化したい。
- '1/cos(x) - sin(x)tan(x)
<ret> s 1
- a r tan(a) :=
sin(a)/cos(a)<ret>..rewrite
rule は `:='で書かれる。左辺はパターンといい変数はメタ変数で今回はxにマッチした.
- a r
a/x + b/x := (a+b)/x <ret> meta-variable x が
cos(x)にマッチする。(xを混同することはない。)a=1,b=-sin(x)^2にマッチ。またa/x - b/x =
(a-b)/xともできる。
- sin(x)^2
+
cos(x)^2
= 1を使って、 a r sin(x)^2 := 1- cos(x)^2 <ret> a s
- rewriteは保存できる.
- 'tan(x) := sin(x)/cos(x)
<ret> s t tsc <ret>
- 'a/x + b/x := (a+b)/x
<ret> s t merge <ret>
- 'sin(x)^2 := 1- cos(x)^2
<ret> s t sinsqr <ret>
- r1 a r tsc <ret> a r
merge <ret> a r sinsqr <ret> a s
- 変数を編集するには、`s e' と variable
name
をタイプして編集し、C-c C-cして戻す.‘s e’で新しい変数を作ることもできる。保存してコンパイルした方がよく働く
- 問1:msでシンボリックモードにし`(2 +
sqrt(2))/(1 + sqrt(2))をいれて、rewrite (conjugate (1 - sqrt(2)
)を分母子に掛ける)。結果は分配法則で単純化rewrite)
- '(2+sqrt(2))/(1+sqrt(2))
<ret> dB
- a r a/(b + c) :=
a*(b-c)/(b^2-c^2)
<ret>
- ar a*(b+c) := a*b + a*c a s...
このステップの代わりに a x でも良い。
- a r コマンドはrewrite rule のベクトルを受け入れる。
- '[tsc,merge,sinsqr] <ret>
= s t trig <ret> r 1 a r trig <ret> a s
- rewrite’が無限ループに陥ったとき抜けるように、100回までの
適用に制限されているがこれは変更できる.(略)
- rewriteを条件付きにできる。 ::に続ける条件で
(オイラーの式)
- ' exp(2 pi i) +exp(3 pi i) +
exp(4 pi i) <ret>
- a r exp(k pi i) := 1 :: k%2 = 0
<ret>... Kが偶数の時
- pi, i, e, phi
などは特別な変数でメタ変数にならず文字通りマッチする。(メタ変数に使えない)
- おもしろい関数の例
- '[fib(1) := 1, fib(2) := 1,
fib(n) := fib(n-1) + fib(n-2)] <ret> s t fib ... 3つのルールの集合
- ' fib(7) <ret> a r fib
<ret>
- ルールの集合中では早いものが優先。1番目と3番目がfib(1)に
マッチしても1番目が優先。
- fib(x)?
..これは上の3番目にマッチするから fib(x-1)+fib(x-2) = fib(x-2)+2fib(x-3)+fin(x-4) =
...eror
- s e fib <ret>
- fib(n) := fib(n-1) + fib(n-2)
:: integer(n) :: n>2 とすれば 2より大きい整数でしかルールを適用しない。
- 'fib(6) + fib(x) + fib(0)
<ret> a r fib<ret>
- 新しい関数fibを作った。 a r fib
<ret> は新しいコマンドで、全fibの呼び出しをこの式で行うようにした。
- EvalValueにストア。 s r
fib<ret> s t EvalValue <ret> '[fib(6), fib(7)] <ret>
- fib(6)=fib(5)+Fib(4)=fib(4)+fib(3)
+ Fib(3)+fib(2)=...となるのを修正。
- fib(n) := fib(n-1)
+fib(n-2) ::integer(n) :: n>2 :: remember とすればいちいち計算しない。
- 'fib(8) <ret> s E
- s u EvalValue <ret>
to unstore