1

私はこのようなシンボリック関数を持っています

syms x y(x) h
fn(x) = y + (h^2*(diff(y(x), x) + 2))/2 + (h^5*diff(y(x), x, x, x, x))/120 + (h^3*diff(y(x), x, x))/6 + (h^4*diff(y(x), x, x, x))/24 + h*(2*x + y(x) - 1)

y の導関数のすべてのインスタンスをその 1 次導関数に置き換えたいと思います。つまり、

subs(fn, sym('diff(y(x), x)'), dy)

wheredyはすでに次のように定義されています

dy(x) = 2*x + y(x) - 1

結果は次のとおりです。

ans(x) =

y + (h^2*(2*x + y(x) + 1))/2 + (h^5*diff(y(x), x, x, x, x))/120 + (h^3*diff(y(x), x, x))/6 + (h^4*diff(y(x), x, x, x))/24 + h*(2*x + y(x) - 1)

これは一次導関数を置き換えますが、高次導関数は置き換えません。私が欲しいのは、h^5用語が持つこと(h^5*diff(dy(x), x, x, x)です。それを行う方法はありますか?

私の現在の方法はかなりハック的で、sym を文字列にdy変換し、一次導関数を に置き換えてから、sym に戻し、級数の各項の順序を 1 ずつ減らすために評価しますが、再帰的でなければなりません。のステージ導関数は、dyを含むものに置き換えられdiff(y, ...)ます。これに対処するためのよりクリーンな方法があることを望んでいました。

4

1 に答える 1