私はこのようなシンボリック関数を持っています
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, ...)
ます。これに対処するためのよりクリーンな方法があることを望んでいました。