マイメモ calc Time-stamp: < 1998-11-14 01:22:38 > ちょいとお馬鹿だけど使えるやつかもしれません。 目指せ脱Mathematica。 ●入力 そのままでは逆ポーランド式電卓なので(私には)あつかいにくい。 algebraicモードで数式を入力すれば普通に式が入力できる(ヒストリ機能あり)。 ' (quote)で始めるとalgebraic入力モードになる(入力数式はstackにpushされる) ' 2x^2-6 と入力すれば、 1: 2 x^2 - 6 と入力される。 ただし / は、Mathematicaと大きく意味が違うので注意。 1/a*b は 1/(a*b)の意味になる。(Mathematica言語モードではMathematica と同じ意味になる)。 かけ算の * は省略可能だが、文字の後に( )がくると関数と認識される。 , (comma)で区切って入力すると、2: 1:に同時入力できる。 TAB スタックの1:と2:を入れかえる。 DEL スタックの1:を消す。 U Undo (Shift+u) D Redo U←→D M-TAB 3:を1:に移動。 C-u 5 M-TAB 5:を1:に(ちょっと面倒ね)。 i Info ほとんどの関数はbuild in(Besselなんかもある)。 Function Index、Key Index、tutrialを参考に。 ●フォーマット d B Big modeで表示 1: (a x + 1) / (b x + 2) + sqrt(x) + sqrt((a x + 1) / (b x + 2)) d B とすれば、 _________ a x + 1 ___ | a x + 1 1: ------- + V x + | ------- b x + 2 \| b x + 2 [memo Big mode時などでは数式を折り返さない。見える範囲を左右にス クロールするには、< > キーを使う] d N d Bなどから、普通のモードに戻る d M Mathematica言語モード。Mathematicaと同じ関数名、計算順で入力できる。 Sin[x]/x y とすれば (sin(x)*y)/x となる(/の意味もMathematicaと 同じ)。d Nで普通モードへ戻る。 d T TeXモード(LaTeXではありません)。 m s sqrtなどを計算しないで記号のまま(トグル)。 m f 分数を計算しないで記号のまま(トグル)。 ●基本計算 + - * algebraicモードで使えばただの足し引きかけざん。 + - * だけだと1:と2:のスタック内容を+ - * 算します。 2: 6 - 2 x^2 1: 3 x^2 + y の状態で、* だけ押すと、 1: (6 - 2 x^2) (3 x^2 + y) 長い数式の時に1: 2:..に分けて書いておいて、+を押して繋げるとか。 / (注意)単なる割り算であるが、/の後のかけ算にはカッコが付いていると思 わなければならない。これはMathematica等と大きく違うので注意!!! 1: a b c / d e f は、(a*b*c) / (d*e*f) の意味。(1/2)*(a+b)カッコを付ければ良い。 : /とほぼ同じ。分数の意味だと思う。 * かけざんは省略可能だが、a (b-1)とかっこの前に文字がくると関数と判断 される。できるだけ*を現わに書いておくほうが混乱しない。 n 1:の符号を変える。 $ スタックのトップ(1:)。 $$ 2: $$$ 3: これらは利用するとスタックからなくなるので注意。 pi π i √-1 = 数値計算。1:のsqrt,pi,e,sin等を具体計算。計算してくれないこともある。 m r Radian unitにする。 ●簡単化 a s 簡単化。ただし、展開してからでないと簡単にならない。 a x 展開。(注意)sqrtの中身などはあまり簡単にならない。 a c xでまとめるには、a c と押せばCollect terms inbolving: と聞きます ので、xで纏めるなら、xと入れれば、 1: (18 - 2 y) x^2 - 6 x^4 + 6 y xの次数でまとまりました。 a f 因数分解 a r (元の式):=(書きなおした式) 式の一部を書き直す。calcの馬鹿な部分をおぎなってやれるかも。 1: 1 / cos(1 - x) - sin(1 - x) tan(1 - x) の場合。tanをsin/cosでも書ける。 a r tan(a):=sin(a)/cos(a) 1: 1 / cos(1 - x) - sin(1 - x)^2 / cos(1 - x) 特殊関数がからむと途端に馬鹿になるので助けてやる。 a r a/x + b/x := (a+b)/x 1: (1 - sin(1 - x)^2) / cos(1 - x) a r sin(x)^2 := 1 - cos(x)^2 たのむよ。 1: (1 + cos(x)^2 - 1) / cos(x) a s 1: cos(x) ●方程式 a = 1:と2:を=で結んだ式を作る。( = だけだと1:の評価)。 もちろんalgebraic入力モード('で始める)で、a=b or a==bと書いても同じ。 a S 1:の方程式を解く。何について解くか聞かれる。一個しか解を出さない。 a P 複数解がある場合。こっちを使う。 (memo s1 : ± unknown signature) ●微分 a d 微分。何について微分するか聞かれる。 ●積分 a i 不定積分。何について積分するか聞かれる。 ●代入 s l 1:を2:に代入。どの文字に代入するか聞かれる。 s s 1:をある変数に代入する。=で展開される。 a b 置き換え。数式の一部を別の文字で書きなおす。数値の代入にも使える。 1: (a x + 1)/(b x + 2) で、a b old: b x + 2 new: x1 とすれば、 1: (a x + 1)/x1 V M vector mapping。 2: [0, 1] 1: 2 x + 1 という状態で、V M $ RETとすれば、 1: [1, 3] ●ストア/リコール s 1 とするとストアの1番に記憶しておける。 r 1 で1番が呼び出せる。 ●グラフ g f 2:を範囲、1:をxの関数として、x-yグラフを表示 2: [0 .. 6.28] 1: sin(x) g f gnuplotが立ちあがる。 (注意)範囲にはpiなどは使わないほうが良いようだ(=で展開しておく)。 g N サンプルポイント数(自動できれいにサンプリングして欲しいなあ)。 g F 3:をxの範囲、2:をyの範囲として、1:のxyzグラフを表示。遅い。 g q gnuplot終了。 ●関数の定義 ちょっとめんどいぞ。キーバインドやlisp関数の名前定義までします。基本的 に RET(Returnキー、Enterキー)を押し続けるだけなんだけど。 Z F 例えば、 myfunc(x)=x^2 と定義したい時、 1: x^2 の状態で、 Z F a myfunc RET RET RET y と押すと、定義できます。以降、algebraicモード(' で入力)で myfunc(x)のように普通の関数として使える。 さらに、z a でmyfunc(1:の内容)となる。 説明すると、 ・Z F と押すと、 ・まず、key定義を聞かれる。z-で止まるので。z a にしたければaを押す。 文字はなんでもいい。(バッファ表示はz-aとなる)。 ・すると次に名前を聞かれる。calc-で止まる。myfunc(x)にしたければ、 myfuncと入力。(バッファ表示はcalc-myfuncとなる)。 ・すると calcFunc-myfuncでいいかと聞かれるので何も考えず RET 。 ・引数リストを聞かれる(x)。1:の式に文字が二つ以上あればリストに なる。(もちろん、出てくる文字全部を引数にする必要はない)。 変更するならして RET 。 ・最後になんか聞くので y と答える。 ●まだ知らないこと。 行列計算ももちろんできるが、まだ知らない。 ●とりあえず満足 結構軽い。お手軽。Free。 割と使いたいことには使える。多少助けてやらなければならないが。 カッコの対応が見やすい。 ●とりあえず不満 再利用がしにくそう。lispを書けってか。 過去の入力内容の再利用がmini-bufferのhistoryしかないのかな。 スタック自身をどんどん書き換えていくので検算がやっかい。 sin、cos、sqrt、ln 等 がからむと途端に簡単化が馬鹿になる。 簡単化できるのがひとめで判るのに簡単化してくれないこともある。 数値が欲しい時に数値化してくれないこともある。法則性がわからん。 グラフはデフォールトである程度最適なサンプリングして欲しい。 関数の定義はやっぱり面倒だなあ。 関数の引数に文字を入れると書き直してくれない。 myfunc(x,y)=x^2+y^2+z^2のとき、myfunc(1,2)は、5+z^2と展開してくれる のに、myfunc(1,y)はmyfunc(1,y)のまま(=もa sもa xも効かない)。