Maple中提取sup算子内表达式的方法(HJB型PDE推导)
Maple提取HJB方程中sup算子内的表达式
需求背景
你在推导HJB型PDE时定义了如下方程:
eq1 := diff(U(t, q), t) + lambda*sup(h(delta)*(U(t, q - 1) - U(t, q)) + (1 - h(delta))*(U(t, q) - U(t, q))+delta, delta) = 0;
需要提取sup算子内的表达式,最终得到:
eq2:=h(delta)*(U(t, q - 1) - U(t, q)) + (1 - h(delta))*(U(t, q) - U(t, q))+delta
解决方案
在Maple中,sup是特殊函数,结构为sup(目标表达式, 变量),可以通过以下步骤提取内容:
- 定位方程中的
sup项:
sup_term := select(type, lhs(eq1), specfunc(anything, sup));
这行代码会从方程左侧筛选出sup类型的项,结果为sup(h(delta)*(U(t, q - 1) - U(t, q)) + (1 - h(delta))*(U(t, q) - U(t, q))+delta, delta)
- 提取
sup函数的第一个参数(即算子内的表达式):
eq2 := op(1, sup_term);
也可以用链式写法简化:
eq2 := op(1, select(type, lhs(eq1), specfunc(anything, sup)));
执行后eq2即为你需要的目标表达式。
原方法无效的原因
indets(eq1, function)仅会列出方程中所有函数(如diff、sup、h),无法直接定位sup的内部参数;select(has,eq1,delta)返回的是包含delta的整个项(即lambda*sup(...)),而非sup算子内的具体表达式。
内容的提问来源于stack exchange,提问作者EdisonKIng
相关产品推荐
相关产品推荐

