K[i] w=F[i,w]と定義されていて、K[i]は数列で出せるようになっていて、Fも定義されています。
すると、例えばK[4]はK[1],K2].K[3]で書かれています。
そこで、そいつをwに演算したいのですが、
K[i_] w ->F[i,w]等としてやってみようと思っていました。
ところが、勝手にw K[i]とかにされてしまってうまく行きませんでした。
順序をかえないで、少しずつ
K[i_] w ->F[i,w]
をしようと思っていたのですが。

また、下のような場合があるので、
(K[1]^2+k[2]+k[3]) w
K[1]^3=K[1] K[1] K[1] とするコマンドも分かると助かるのですが。

ちなみに演算子**もつかってみましたが、
ExpandAll[(a+b)**w]=(a+b)**w
となり、順序は保存するものの、今度は展開ができません。
(a+b)**w=a**w+b**b
となってほしいのです。

どなたか知恵をお貸しください。

A 回答 (1件)

K[i_]->F[i,w]/w


と代入すればよいと思いますが、これではダメなのでしょうか。
Mathematicaの内部のデータ構造と表示とは異なっているので、複合的な代入はうまくいかないことが多くなります。バージョンで違うかもしれませんが、掛け算の順序の違いは影響していないようです。
データ構造が多重になるとパターンマッチングがうまく働かないのが原因のように思われます。

実例

k[2] w + 2k[3] w /. k[i_]w -> k[i, w]
k[2, w] + 2 k[3, w]
上の例は大丈夫

k[2]w( 2 k[3] w + 1) /. k[i_] w -> k[i, w]
(1 + 2 w k[3]) k[2, w]
式が括弧により多重になっているので失敗したものと思われる

k[2]w( 2 k[3] w + 1) /. k[3] w -> k[3, w]
w k[2] (1 + 2 k[3, w])
パターン検索_を使っていないので一応成功

k[2]w( 2 k[3] w + 1) /. k[i_] -> k[i, w]/w
k[2, w] (1 + 2 k[3, w])
成功

べき乗を積の形にしてもすぐ元に戻ってしまうので、そのようなコマンドがあっても役に立たないと思います。

この回答への補足

お知恵を貸してくださりありがとうございます。

K[i_]w->F[i,w]でなくて
K[i_]->F[i,w]/wを用いるのは面白いなと思いました。

ただ、説明不足だったと思いますが、
(K[1]K[1]+k[2]) w
not equal
K[1]w K[1] w + K[2] w
であり、
(K[1]K[1]+k[2]) w = K[1]K[1]w +K[2]w
=F[1,K[1]w] + F[2,w]
=F[1,F[1,w]] + F[2,w]
というように汎関数的に適用するようなルールになっていて
難しいのです。

線形汎関数ですので、
F[i,a*p(w)]=a*F[i,p(w)]
などとしたいのですが、いちいちa*の後のパターンp(w)を指定して
あげて変形しています。もっといい方法がないのかなあと思っています。

補足日時:2005/04/22 20:22
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング