You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Maple数值表达式中提取所有根(含复数I)

解决方案

Maple没有专门提取所有根的内置函数,但可以通过组合核心函数高效实现需求,以下是两种对应不同结果形式的实现:

1. 提取所有出现的根形式(对应示例A)

你之前认为indets对数值表达式无效,是因为未指定正确的匹配类型。通过指定幂运算的类型,indets可以精准提取所有根形式:

f:=(3^(2/3)*2^(3/5)+3*I)/(4*2^(2/5)-2*sqrt(5)/7);
# 提取所有幂形式根 + 复数I,仅保留表达式中实际存在的元素
A := indets(f, 'specfunc(anything, `^`)') union {I} intersect indets(f);

关键说明

  • specfunc(anything, ^)匹配所有幂运算表达式(Maple会将sqrt(5)自动解析为5^(1/2))
  • union {I}手动添加复数单位,再通过intersect indets(f)过滤掉未在表达式中出现的I

2. 提取基础根形式(对应示例B)

要将相同底数的不同次幂归一化为最简基础根,需解析指数的分母,生成最小次幂形式:

# 定义辅助函数,将幂形式转换为基础根
get_base_root := proc(p)
    local base, exp, denom;
    if type(p, `^`) then
        base := op(1, p);
        exp := op(2, p);
        denom := denom(exp); # 获取指数的分母(如3/5的分母为5)
        return base^(1/denom);
    elif p = I then
        return I;
    end if;
end proc:

# 提取所有根并归一化
B := map(get_base_root, indets(f, 'specfunc(anything, `^`)')) union {I} intersect indets(f);

关键说明

  • denom(exp)提取指数分数的分母,以此生成该底数的最小次幂根
  • map函数对所有提取的幂形式批量应用归一化逻辑

复杂场景适配

  • 无嵌套根场景:上述代码完全覆盖需求
  • 嵌套根场景(如sqrt(2+sqrt(3))):可将类型匹配扩展为specfunc(anything, sqrt, ^)
  • 近似数值场景(如1.414):需先通过convert(f, radical)转换为精确根形式,再执行提取操作

内容的提问来源于stack exchange,提问作者Robertas Vilkas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 09:05:23