matlab - 非线性方程的系统没有给出想要的结果

matlab - nonlinear eqn's system not giving wanted results

所以我不清楚...我认为这个问题太长了。这里是:

原题:

ca=3.96;
c0t(1)=2*ca/10;
c1t(1)=ca;
c2t(1)=20/56;
c3t(1)=20/56;

syms c0 c1 c2 c3 c4 c5 c6 c7 c8
eqn1 = c0(1)+c4(1)+c8(1) == c0t(1);
eqn2 = c1(1)+c4(1)+c5(1)+c6(1)+2*c7(1)+2*c8(1) == c1t(1);
eqn3 = c2t(1)==c2(1)+c5(1);
eqn4 = c3t(1)==c3(1)+c6(1)+c7(1)+c8(1);
eqn5 = c4(1)==c1(1)*c0(1)*10^1.98;
eqn6 = c5(1)==c1(1)*c2(1)*10^2.25;
eqn7 = c6(1)==c1(1)*c3(1)*10^4.04;
eqn8 = c7(1)==c1(1)^2*c3(1)*10^5.38;
eqn9 = c8(1)==c1(1)^2*c0(1)*c3(1)*10^8.1;


sol = solve([eqn1, eqn2, eqn3, eqn4, eqn5, eqn6, eqn7, eqn8, eqn9], [c0, c1, c2, c3, c4, c5, c6, c7, c8]);
c0Sol = sol.c0
c1Sol = sol.c1
c2Sol = sol.c2
c3Sol = sol.c3
c4Sol = sol.c4
c5Sol = sol.c5
c6Sol = sol.c6
c7Sol = sol.c7
c8Sol = sol.c8

结果是这样的

c0Sol =
(...*RootOf(z^9 - (... + (...*z^7)/... - (...*z^6)/... + (...*z^5)/... - (...*z^4)/... + (...*z^3)/... - (...*z^2)/... + ...................

这有几页数字和运算符。除此之外,我还为这个 c0Sol 得到了 8 个东西,所有其他 cxSol 也得到了同样的东西。

我需要的是 1.23 * 10 ^ (-14) 这样的数字。

编辑1: 现在我正在尝试将其转换为 fsolve:

root9d.m
function F = root9d(c0,c1,c2,c3,c4,c5,c6,c7,c8)
F = [ c0+c4+c8-3.96*2;
  c1+c4+c5+c6+2*c7+2*c8-3.96;
  c2+c5-20/56;
  c3+c6+c7+c8-20/56;
  c1*c0*10^(198/100)-c4;
  c1*c2*10^(225/100)-c5;
  c1*c3*10^(404/100)-c6;
  c1^2*c3*10^(538/100)-c7;
  c1^2*c0*c3*10^(81/10)-c8;
  2*c1(1)+c4(1)+c6(1)-2*c2(1)-3*c3(1)-c6(1)-c0(1)
];
end

fun = @root9d;
x0 = [0,0,0,0,0,0,0,0,0];
x = fsolve(fun,x0)

得到

Error using root9d (line 2)
Not enough input arguments.
Error in fsolve (line 219)
        fuser = feval(funfcn{3},x,varargin{:});
Caused by:
Failure in initial user-supplied objective function evaluation. FSOLVE cannot continue. 

编辑2:

我正在尝试 vpasolve

ca=3.96;
c0t(1)=2*ca/10;
c1t(1)=ca;
c2t(1)=20/56;
c3t(1)=20/56;

syms c0 c1 c2 c3 c4 c5 c6 c7 c8
[sol_c0, sol_c1, sol_c2, sol_c3, sol_c4, sol_c5, sol_c6, sol_c7, sol_c8] = vpasolve([c0(1)+c4(1)+c8(1) == c0t(1), c1(1)+c4(1)+c5(1)+c6(1)+2*c7(1)+2*c8(1) == c1t(1), c2t(1)==c2(1)+c5(1), c3t(1)==c3(1)+c6(1)+c7(1)+c8(1), c4(1)==c1(1)*c0(1)*10^1.98, c5(1)==c1(1)*c2(1)*10^2.25, c6(1)==c1(1)*c3(1)*10^4.04, c7(1)==c1(1)^2*c3(1)*10^5.38, c8(1)==c1(1)^2*c0(1)*c3(1)*10^8.1], [c0, c1, c2, c3, c4, c5, c6, c7, c8])

有 9 个这样的结果

sol_c0 =
                                     -2.1773252072885945825011626975607
                                   -0.002452126418901470788857646210148
 - 0.18134710731268774000741555758302 - 0.51377486965659220019753505021528i
                                     -1.7768042958209364363265199765376
                                      1.0547920479103151637363730741365
                                   0.0026459489994495584563346427370604
                                   0.0006200391937591632994332743093457
                                    0.020935185135197845770208454108444
 - 0.18134710731268774000741555758302 + 0.51377486965659220019753505021528i

这些sol_cx每个都有9个结果是什么意思,我只需要9个数字。

无论如何我很高兴我仍然可以在 matlab 中写一些东西...

谢谢你,丹。

解决我的问题的一种方法是这个,但我希望我能找到一个更短的方法....也很抱歉没有说它们应该是积极的....

index = find(sol_c0>=0);
sol_c0 = sol_c0(index);  sol_c1 = sol_c1(index);  sol_c2 = sol_c2(index);  sol_c3 = sol_c3(index);sol_c4 = sol_c4(index);sol_c5 = sol_c5(index);sol_c6 = sol_c6(index);sol_c7 = sol_c7(index);sol_c8 = sol_c8(index);

所有这一切对于每个 sol_