用Matlab解决不等式问题

时间:2016-03-17 13:29:09

标签: matlab symbolic-math equation-solving

我必须解决不平等问题,但手工操作太难了。因此,我想使用Matlab。设a = [(k-3)*sqrt(v)]/sb = 1.08148*a^2-epsilon,其中epsilon = 10^(-6)。需要解决的不平等是:

q(a,b) < s*sqrt(v)

其中sv已知。更准确地说,我想解决k的上述不等式(发生在ab中)。现在,问题是q(a,b)是四次多项式的最大实根:

(48*a^2+16*b)*x^4 - (40*a^3+168*a*b)*x^3+(-45*a^4+225*a^2*b+72*b)*x^3+(27*a^2*b-162*a*b^2)*x+27*b^3

我试图运行这个:

syms x z
  av = ((x-3)*sqrt(v))/s;
 Q = max(roots([48*z^2+16*(1.08148*z-eps), -40*z^3-168*z*(1.08148*z-eps), -45*z^4+225*z^2*(1.08148*z-eps)+72*(1.08148*z-eps)^2, 27*z^3*(1.08148*z-eps)-162*z*(1.08148*z-eps)^2, 27*(1.08148*z-eps)^3]));
 F = compose(Q,av);
solve(F-skew*sqrt(var)<0, x)

但是Matlab不断给出以下错误:

  

使用sym / max时出错(第97行)       输入参数必须是可转换的       到浮点数。

     

Testt出错(第13行)       R = max(根([2048,       -6912 *((X-3)的 SQRT(VAR)/歪斜)^ 2,       8088 ((X-3)的 SQRT(VAR)/歪斜)^ 4,       -3600 ((X-3)的 SQRT(VAR)/歪斜)^ 6,       375 ((X-3)* SQRT(VAR)/歪斜)^ 8]));

也许有人有更好的想法来解决它?最好的方法是,如果我在a和b的函数中有一个明确表达式的四次最大实根q。但是,这个显式表达式太长而无法使用。

1 个答案:

答案 0 :(得分:0)

错误信息似乎表示 max()函数不支持 sym x z

因为 roots()的返回结果包括 x z 。但是Matlab不知道 x的值 z ,因此它无法计算根的值,因此无法比较它们。

也许你应该改进你的算法。