【问题标题】:Solving an inequality with Matlab用 Matlab 解决不等式
【发布时间】:2016-03-17 13:29:08
【问题描述】:

我必须解决一个不等式,但手动解决它太难了。因此,我想使用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 = 最大(根([2048, -6912*((x-3)sqrt(var)/skew)^2, 8088((x-3)sqrt(var)/skew)^4, -3600((x-3)sqrt(var)/skew)^6, 375((x-3)*sqrt(var)/skew)^8]));

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

【问题讨论】:

  • 我不知道为什么你需要使用符号数学而不是数字。 max 函数是 ill-defined for symbolic expressions,不能以数字形式减少。有可能解决这个问题,但你问题中的代码并不是真正可运行的......而且你似乎已经解决了这个问题。

标签: matlab symbolic-math equation-solving


【解决方案1】:

错误信息好像是说max()函数不支持sym x z

因为roots()的返回结果包括xz。但是Matlab不知道x的值z,所以它不能计算根的值,然后不能比较它们。

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

【讨论】:

  • 谢谢!但是,我不断收到同样的错误。也许它是由于根函数,但我没有看到解决不平等的另一种方法。
  • 我已经编辑了我的答案。您只会得到四个根,因此您可以手动比较它们或计算每个根的不等式,然后手动决定哪个是真正的解决方案。@Siron
猜你喜欢
  • 2018-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
相关资源
最近更新 更多