你看看roots的原理,也许对你有帮助
function r = roots1(p)
n = numel(p)-1;
A = diag(ones(n-1,1),-1);
A(1,:) = -p(2:n+1)./p(1);
r = eig(A, 'balance');
end
当然还是建议使用vpasolve
clc; clear
syms x
p = [0.04142+0.0136i;
-22177.0-4395.0i;
3.339e9+2.077e8i;
-1.02e14+1.409e13i];
q = poly2sym(p, x);
x = vpasolve(q);
roots_3 = x;
roots_3.^3*(0.04142 + 0.0136i) - roots_3.^2*(22177.0 + 4395.0i) + ...
roots_3.*(3.339e9 + 2.077e8i) - (1.02e14 - 1.409e13i)
结果:
ans =
0.0000000000000000000000000032311742677852643549664402033983i
0.00000000000000000000000020679515313825691871785217301749 - 0.000000000000000000000000025849394142282114839731521627186i
0.00000000000000000000000020679515313825691871785217301749 + 0.00000000000000000000000003877409121342317225959728244078i