Matlab - 象征性地解决不等式

时间:2014-06-25 18:24:02

标签: matlab symbolic-math

所以,我正在尝试为我的模拟建立一些新的稳定性标准,这涉及许多复杂的不等式。我已经手工完成了几次数学计算,而且非常费力;所以,我想找到一种自动化过程的方法(因为我试图从稳定性的角度找到最佳的集成方案)。有没有在Matlab中象征性地解决不等式?这就是我想要解决的问题。在下面的表达式中,x指的是力函数相对于x的渐变,t是时间步长。通常,x < 0t > 0

-(t*x + (2*t^3*x + t^2*x^2 - 2*t*x + 4*t + 1)^(1/2) + 1)/(x*t^2 - 2) < 1

基于我在网上看到的内容,这在MuPAD中似乎是可能的,但使用以下代码并没有给我任何有效的结果:

solve(-(t*x + (2*t^3*x + t^2*x^2 - 2*t*x + 4*t + 1)^(1/2) + 1)/(x*t^2 - 2) < 1, t)

知道我能做些什么来使这项工作和自动化过程?

1 个答案:

答案 0 :(得分:1)

首先,由于Wolfram Alpha为您提供an answer(我认为您已经检查了正确性),我假设您想使用Matlab来解决其他类似的问题。然而,由于多项式的根源,这是一个非常重要的不等式。我还没有能够让Matlab / MuPAD用它做任何事情。正如我所说,在许多情况下,常规Matlab可以解决不等式和均等系统,例如在R2013b中

syms x real;
solve(x^3-1>1,x)

即使Mathematica 9也有问题(可以使用Reduce功能代替它Solve,但输出不易使用。)

然而,您可以通过

解决x < 0t > 0的真正根源
syms x t real;
assume(x<0);
assume(t>0);
f = -(t*x+sqrt(2*t^3*x+t^2*x^2-2*t*x+4*t+1)+1)/(x*t^2-2);
s = solve(f==1,t)

返回:

s =

-(x + (x*(x - 2))^(1/2))/x

这简化为sqrt((x-2)/x)-1。因此t > sqrt((x-2)/x)-1是Wolfram Alpha提供的界限之一。 (另一个更复杂的边界总是小于零,实际上是确保t是真实的条件。)

但是,你甚至需要象征性地解决这个问题吗?在所有x方面,您是否需要针对不同时间间隔的明确表达式?如果不是,这种类型的问题可能更适合数字方法 - 通过根求解(例如,fzero)或最小化(例如,fmincon)。