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

Maxima如何编写自定义规则实现点积的自动识别与简化

Maxima 二维向量点积自动识别与简化实现方案

失败原因说明

  • 尝试1仅硬编码了a、b两个变量名,规则无法适配其他变量名的向量,也无法识别混有其他独立项的表达式
  • 尝试2的匹配规则逻辑错误:lambda([x], length(x)=2)是判断匹配到的符号本身的长度,而非判断该符号作为向量存在索引1、2,因此匹配始终不生效,规则无法触发

可行实现代码

首先定义通用匹配规则,使用%%开头的模式变量匹配任意向量符号,同时覆盖项顺序颠倒的场景:

/* 声明模式变量可匹配任意符号 */
matchdeclare (%%vec1, symbolp);
matchdeclare (%%vec2, symbolp);

/* 匹配点积项顺序为vec1[i]*vec2[i]的场景 */
tellsimpafter (%%vec1[1]*%%vec2[1] + %%vec1[2]*%%vec2[2], dot(%%vec1, %%vec2));
/* 匹配点积项顺序为vec2[i]*vec1[i]的场景,适配加法交换的情况 */
tellsimpafter (%%vec2[1]*%%vec1[1] + %%vec2[2]*%%vec1[2], dot(%%vec1, %%vec2));

使用方法

定义规则后,对需要简化的表达式调用applyb1即可触发规则,示例测试效果:

  1. 测试不同变量名的点积:
    输入:applyb1(v[1]*w[1] + v[2]*w[2])
    输出:dot(v, w)
  2. 测试混有其他项、点积项顺序颠倒的场景:
    输入:applyb1(w[2]*v[2] + 123 + v[1]*w[1])
    输出:dot(v, w) + 123

如果需要全局自动应用规则,可将applyb1加入全局简化钩子,或在每次计算后主动调用即可。

扩展支持高维向量

如果需要适配三维及以上的向量,按相同逻辑新增对应维度的匹配规则即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:09:00