Matlab 使用solve求解方程,出现未知数z和root

在使用Matlab求非线性方程的解析解时,遇到的奇怪的问题,给出的解中出现未知数z,同时还含有root,也是看得一头雾水
求解的方程为
x ( t ) = c 1 + ( c x 0 − 1 ) e − r t x(t)=\frac{c}{1+(\frac{c}{x_0}-1)e^{-rt}} x(t)=1+(x0c1)ertc
求出 c c c r r r

实现代码为

equ1= c/(1+(c/60.2-1)*exp(-5*d))==67.2;
equ2= c/(1+(c/60.2-1)*exp(-20*d))==90.9;
[c,d]=solve(equ1,equ2,c,d);

输出的c和d结果形式非常复杂,还有未知数z以及root表达式

c = (16359952*root(z^3 - (1515*z^2)/3397 - (1515*z)/3397 - 1515/3397, z, 1)^2)/227329 + (10966032*root(z^3 - (1515*z^2)/3397 - (1515*z)/3397 - 1515/3397, z, 1))/227329 + 101107104/1136645
d = log(root(z^3 - (1515*z^2)/3397 - (1515*z)/3397 - 1515/3397, z, 1))/5

在使用double转换后,可以的到实数解

>> double(c),double(d)

ans =

  241.9599


ans =

    0.0299

似乎不同版本的Matlab结果会不一样,有的版本会直接给出上述复数(实数)域的解,而在求解方程比较复杂,比如变量次数较高的时候,会出现上述问题
在网上找了半天没有找到靠谱的解释,于是直接到Matlab的官方文档里找,终于明白问题所在了
网址:https://ww2.mathworks.cn/help/symbolic/solve.html
官方文档里的描述如下:

Numerically Approximating Symbolic Solutions That Contain root
When solving polynomials, solve might return solutions containing root. To numerically approximate these solutions, use vpa. Consider the following equation and solution.

意思是说,在求解多项式时,求解可能返回含有根的解。要用数字近似这些解,请使用vpa()
文档给出了以下例子:

syms x
eqn = x^4 + x^3 + 1 == 0;
s = solve(eqn, x)
s =
 root(z^4 + z^3 + 1, z, 1)
 root(z^4 + z^3 + 1, z, 2)
 root(z^4 + z^3 + 1, z, 3)
 root(z^4 + z^3 + 1, z, 4)
 
 vpa(s)
 ans =
 - 1.0189127943851558447865795886366 - 0.60256541999859902604398442197193i
 - 1.0189127943851558447865795886366 + 0.60256541999859902604398442197193i
     0.5189127943851558447865795886366 - 0.666609844932018579153758800733i
     0.5189127943851558447865795886366 + 0.666609844932018579153758800733i

另外,文档里还说“When you solve a higher order polynomial equation, the solver might use root to return the results.”在解高次方程的时候也会遇到这种问题

你可能感兴趣的:(Matlab/数值计算)