1
我有一個象徵性的功能,看起來像這樣更換象徵衍生物MATLAB
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的衍生品的所有實例與它的一階導數,即
subs(fn, sym('diff(y(x), x)'), dy)
哪裏dy
已定義爲
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
term有(h^5*diff(dy(x), x, x, x)
。有沒有辦法做到這一點?
我目前的方法是非常hackish,涉及將sym轉換爲字符串,用dy
替換一階導數,然後轉換回sym並評估以將序列中每個項的順序減1,但它必須是遞歸的,因爲在每個階段dy
的衍生物然後被含有diff(y, ...)
的東西取代。我希望有一個更清晰的方式來處理這個問題。
注意,爲了清楚起見,'diff(y(x),x,x,x,x)'等價於'diff(y(x),x,4)'。 – horchler