我有一个看起来像这样的符号函数
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
词有(h^5*diff(dy(x), x, x, x)
。有没有办法做到这一点?
我目前的方法非常老套,涉及将 sym 转换为字符串,用 替换一阶导数dy
,然后转换回 sym 并评估以将系列中每个项的顺序减少一个,但它必须是递归的,因为在每个的阶段衍生物dy
然后被包含的东西替换diff(y, ...)
。我希望有一种更清洁的方法来处理这个问题。