用 Matlab 求解不等式
Solving an inequality with Matlab
我必须解决一个不等式,但是手工解决太难了。因此,我想使用 Matlab。让 a = [(k-3)*sqrt(v)]/s
和 b = 1.08148*a^2-epsilon
,其中 epsilon = 10^(-6)
。需要解决的不等式为:
q(a,b) < s*sqrt(v)
其中 s
和 v
是已知的。更准确地说,我想解决 k
的上述不等式(发生在 a
和 b
中)。现在,问题是 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 一直报错:
Error using sym/max (line 97)
Input arguments must be convertible
to floating-point numbers.
Error in Testt (line 13)
R = max(roots([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()函数不支持sym x z.
因为roots()的返回结果包括x和z。但是Matlab不知道x和z的值,所以无法计算根的值,进而无法比较。
也许你应该改进你的算法。
我必须解决一个不等式,但是手工解决太难了。因此,我想使用 Matlab。让 a = [(k-3)*sqrt(v)]/s
和 b = 1.08148*a^2-epsilon
,其中 epsilon = 10^(-6)
。需要解决的不等式为:
q(a,b) < s*sqrt(v)
其中 s
和 v
是已知的。更准确地说,我想解决 k
的上述不等式(发生在 a
和 b
中)。现在,问题是 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 一直报错:
Error using sym/max (line 97) Input arguments must be convertible to floating-point numbers.
Error in Testt (line 13) R = max(roots([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()函数不支持sym x z.
因为roots()的返回结果包括x和z。但是Matlab不知道x和z的值,所以无法计算根的值,进而无法比较。
也许你应该改进你的算法。