| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
2.1 微分に関する諸定義
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
(C1) ATVALUE(F(X,Y),[X=0,Y=1],A**2)$
(C2) F(0,1);
2
(D2) A
|
formは関数f(v1,v2,...)か、導関数DIFF(f(v1,v2,...),vi,ni,vj,ni,...)(niはviに よる微分の階数)で、その引数の中で明示的に現れるものでなければならない。
等式のリストは値が与えられた"境界"を定める;listは方程式のリストか、上述の 様に単一の方程式vi=exprでも良い。ATVALUEが表示された時に、記号@1,@2,...は 関数変数v1,v2,....を表現する為に用いられる。 PRINTPROPS([f1,f2,...],ATVALUE)は、ATVALUE関数を用いて以前指定された関数f1, f2,...のATVALUEを表示する。もしリストが丁度一つの元のみを含むのであれば、 その元はリストを外して与えられる。第一の引数にALLが与えられると、全ての関数の 持つATVALUEが表示される。例はEXAMPLE(ATVALUE);を実行せよ。
(* 訳者注:
関数F(X,Y)に対し、(0,2),(0,1)に境界値を各々A^2,B^3を設定してPRINTPROSを実行。
ATVALUEを実行した後のPRINTPROSに注目。
(C1) ATVALUE(F(X,Y),[X=0,Y=2],A**2);
2
(D1) A
(C2) ATVALUE(F(X,Y),[X=0,Y=1],B**3);
3
(D2) B
(C3) PRINTPROPS([F],ATVALUE);
3
F(0, 1) = B
2
F(0, 2) = A
(D3) DONE
(C4) ATVALUE(F(X,Y),[X=0,Y=-1],C**4);
4
(D4) C
(C5) PRINTPROPS([F],ATVALUE);
4
F(0, - 1) = C
3
F(0, 1) = B
2
F(0, 2) = A
(D5) DONE
(C6) ATVALUE(G(X),[X=1],2);
(D6) 2
(C7) PRINTPROPS(ALL,ATVALUE);
4
F(0, - 1) = C
3
F(0, 1) = B
2
F(0, 2) = A
G(1) = 2
(D7) DONE
(C8) PRINTPROPS([G],ATVALUE);
G(1) = 2
(D8) DONE
(C8)
*)
|
(C1) LAPLACE(DELTA(T-A)*SIN(B*T),T,S);
Is A positive, negative or zero?
POS;
- A S
(D1) SIN(A B) %E
(*訳者注:
変数Aに関して何らの仮定や割り当てが無い為に、
"Is A positive, negative or zero?"と聞いている。
例えば、assumeを用いてA<0と仮定した場合を以下に示す:
(C1) assume(A<0);
(D1) [A < 0]
(C2) LAPLACE(DELTA(T-A)*SIN(B*T),T,S);
(D2) 0
この様にAに関して仮定があれば、LAPLACEで尋ねられる事が無い。
*)
|
(* 訳者注:
お馬鹿な例として、何でもない原子nekoをtamaとmikeに依存する関数にする;
(C1) depends(neko,[tama,mike]);
(D1) [neko(tama, mike)]
(C2) diff(neko,tama);
dneko
(D2) -----
dtama
(C3) diff(diff(neko,tama),mike);
2
d neko
(D3) -----------
dmike dtama
勿論、dependsを実行していなければ、diffで0になる。dependsでnekoが。tamaとmike
を変数とする関数と宣言した為に、微分を行っても零にならない。
*)
|
DEPENDS([F,G],[X,Y],[R,S],[U,V,W],U,T) |
(C1) DEPENDS([F,G],[X,Y],[R,S],[U,V,W],U,T);
(D1) [F(X, Y), G(X, Y), R(U, V, W), S(U, V, W), U(T)]
(C2) DEPENDENCIES;
(D2) [F(X, Y), G(X, Y), R(U, V, W), S(U, V, W), U(T)]
(C3) DIFF(R.S,U);
dR dS
(D3) -- . S + R . --
dU dU
|
MACSYMAは記号微分で合成関数の微分公式を認識しており、次の様に与えられた 従属性を活用する。
(C4) DIFF(R.S,T);
dR dU dS dU
(D4) (-- --) . S + R . (-- --)
dU dT dU dT
もしも、
(C5) DERIVABBREV:TRUE;
(D5) TRUE
と設定していると、命令C4を再実行すれば次を得る
(C6) ''C4;
(D6) (R U ) . S + R . (S U )
U T U T
|
以前宣言した従属性を削除する為にREMOVE命令が使える。例えば、C1で宣言した様に RがUに最早従属していない事を宣言する場合、利用者は以下の入力を行なう。
REMOVE(R,DEPENDENCY) |
これでRに対して宣言された全ての従属性が消去される。
(C7) REMOVE(R,DEPENDENCY);
(D7) DONE
(C8) ''C4;
(D8) R . (S U )
U T
|
注意: DIFFはMACSYMAだけの命令で、DEPENDENCIESに設定された情報を用いる。 積分、Laplace変換等に対する引数は、例えば、INTEGRATE(F(X),X)の様に、それらの 従属性を命令の中で明示的に与えなければならない。
(* 訳者注:
(C1) diff(f(x),x);
d
(D1) -- (f(x))
dx
(C2) DERIVABBREV:TRUE;
(D2) TRUE
(C3) diff(f(x),x);
(D3) f(x)
x
この様に表示される事を意味するだけ。
*)
|
(C1) 'DIFF(Y,X,2)+'DIFF(Y,Z,3)*2+'DIFF(Y,X)*X**2$ (C2) DERIVDEGREE(%,Y,X); (D2) 2 (* 訳者注: 名詞型の入力に対して最高の階数を探す。ここで、名詞型で入力していなければ、 評価された式で返される為に希望する値が返ってこないので注意せよ。 *) |
SUBST(X,'DIFF(Y,T),'DIFF(Y,T,2)); |
(*訳者注:
(C1) SUBST(X,'DIFF(Y,T),'DIFF(Y,T,2));
2
d Y
(D1) ---
2
dT
この様に、'DIFF(Y,T,2)(='DIFF('DIFF(Y,T),T))のDIFF(Y,T)をXで置き換えたいが、
DERIVSUBST:TRUEでないと叶わない。
そこで、
(C2) derivsubst:true;
(D2) TRUE
とすれば、この代入処理の結果が目的通りに、
(C3) SUBST(X,'DIFF(Y,T),'DIFF(Y,T,2));
dX
(D3) --
dT
となる。
*)
|
DIFFは各viで各々ni階のexpの微分を行う。1変数による1階微分が望ましければ、 DIFF(exp,v)の書式で良い。関数の名詞型が要求される場合(例えば、微分方程式を 記述する時の様に)、'DIFFを用いなければならず、表示は二次元的 (プリティプリント)書式となる。DERIVEABBREV[FALSE]がTRUEであれば、微分は 下添字として表示される。 DIFF(exp)は"全微分"を与える、つまり、expの各変数に 対する微分とその変数の関数のDELとの積の和である。DELのこれ以上の簡易化は提供 されていない。
(* 訳者注: diff(sin(x*y));を実行するとx COS(x y) DEL(y) + y COS(x y) DEL(x)となる。 *) |
(C1) DIFF(EXP(F(X)),X,2);
2
F(X) d F(X) d 2
(D1) %E (--- F(X)) + %E (-- (F(X)))
2 dX
dX
(C2) DERIVABBREV:TRUE$
(C3) 'INTEGRATE(F(X,Y),Y,G(X),H(X));
H(X)
/
[
(D3) I F(X, Y) dY
]
/
G(X)
(C4) DIFF(%,X);
H(X)
/
[
(D4) I F(X, Y) dY + F(X, H(X)) H(X) - F(X, G(X)) G(X)
] X X X
/
G(X)
|
テンソルパッケージ向けには、以下の改変が含まれている。
(C41) DEPENDENCIES(FIELD(R));
(D41) [FIELD(R)]
(C42) DSCALAR(FIELD);
(D43)
-M
%E ((FIELD N - FIELD M + 2 FIELD ) R + 4 FIELD )
R R R R R R R
- -----------------------------------------------------
2 R
|
Maxima-5.9preよりも前であれば、
batch("gendif.mc")$
|
batch("gendif.mac")$
|
DIFF(%E^(A*X),X,Q) |
評価出来ない項目は括られて返される。幾つかの項目は"GENFACT"の項にあり、それら を参照せよ。
(* 訳者注:
(C31) DIFF(%E^(A*X),X,Q);
Q
d A X
(D31) --- (%E )
Q
dX
(C32) GENDIFF(%E^(A*X),X,Q);
Q A X
(D32) A %E
(C33)
この例では、最初のDIFFでは式をそのまま名詞型で返すが、GENDIFFではちゃんと計算
した結果を返している。尚、GENDIFFはshareライブラリ関数であり、利用する為には、
予め読込む必要がある。上記のbatchで読込むか、LOAD命令を用いよ。
*)
|
epxは畳み込み(convolution integral)を含んでいても良い。関数の関連性はLAPLACE が適切に動作する為に、明示的に表現されていなければならない。つまり、FがXとYに 従属していれば、LAPLACE('DIFF(F(X,Y),X),X,S)の様にFが現れる場合は何時でも F(X,Y)と記述されていなければならない。LAPLACEはDEPENDS命令で設定される DEPENDECIESの影響を受けない。
(C1) LAPLACE(%E**(2*T+A)*SIN(T)*T,T,S);
A
2 %E (S - 2)
(D1) ---------------
2 2
((S - 2) + 1)
|
(* 訳者注: 逆Laplace変換はILTである。詳細はILTの項を参照せよ。 *) |
| [ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |