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
相关产品推荐
相关产品推荐

