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

Octave符号计算中如何消除近零项?

Octave符号计算中消除近零项的方法

我在进行符号计算时,无论是Matlab还是加载了symbolic包(执行pkg load symbolic)的Octave,运行以下代码都会产生极小的近零项:

syms Zaa Zab Zac Zba Zbb Zbc Zca Zcb Zcc;
Z = [Zaa Zab Zac; Zba Zbb Zbc; Zca Zcb Zcc]
a = -1/2+sqrt(3)/2*1i;
A = [1 1 1; 1 a^2 a; 1 a a^2];
Z012 = inv(A)*Z*A

示例结果:Zaa*(1/3 + i/36028797018963968)
期望结果:Zaa*(1/3)
请问有没有办法让Octave自动把这些近零项转为实际的零?


更新1:
之前在Matlab上用把sqrt(3)替换为sqrt(sym(3))的方案解决了问题,但在Octave中运行以下代码会报错:

syms Zaa Zab Zac Zba Zbb Zbc Zca Zcb Zcc;
Z = [Zaa Zab Zac; Zba Zbb Zbc; Zca Zcb Zcc]
a = -1/2+sqrt(sym(3))/2*1i;  % 此写法在Matlab中有效
A = [1 1 1; 1 a^2 a; 1 a a^2];
Z012 = inv(A)*Z*A
vpa(3*Z012,2)  % 简化显示结果(注意结果需乘以1/3)

报错信息:

Symbolic pkg v3.0.0: Python communication link active, SymPy v1.10.1.
Z = (sym 3x3 matrix)

  [Zaa  Zab  Zac]
  [             ]
  [Zba  Zbb  Zbc]
  [             ]
  [Zca  Zcb  Zcc]

warning: passing floating-point values to sym is dangerous, see "help sym"
warning: called from
    double_to_sym_heuristic at line 50 column 7
    sym at line 379 column 13
    plus at line 53 column 5
    symbolic_similarity_transformation at line 11 column 3

error: octave_base_value::map_value(): wrong type argument 'scalar'

最终更新:
以下代码可在Octave和Matlab中通用,运行后能得到无近零项的一致结果:

syms Zaa Zab Zac Zba Zbb Zbc Zca Zcb Zcc;
Z = [Zaa Zab Zac; Zba Zbb Zbc; Zca Zcb Zcc]
a = -1/2+sqrt(sym(3))/2*1i;  
A = [[1 1 1]; 1 a^2 a; 1 a a^2];
Z012 = inv(A)*Z*A
vpa(3*Z012,2)  % 简化显示结果(注意结果需乘以1/3)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:57:24