用2个变量求解约束方程

时间:2014-02-16 23:15:15

标签: matlab

编辑:

我认为我需要的是应用fmincon,但我不知道如何。我想这样做:

使用fmincon解决:

根据等式约束

最小化a

f(q,z)= 0

通过改变未知数(q,z)。

如何使用fmincon实现此功能?谢谢!

以下是整个功能:

f(q,z) = 60*q^9*z^4 + 120*q^7*z^3 + 80*q^(17/2)*z^3 - 60*q^8*z^3 - 60*q^6*z^3 + 40*q^(15/2)*z^3 + 20*q^(11/2)*z^3 - 20*q^9*z^3 + 175*q^(13/2)*z^2 - 90*q^(15/2)*z^2 + 75*q^5*z^2 - 60*q^6*z^2 - 45*q^(11/2)*z^2 + 40*q^2*z^2 + 30*q^8*z^2 - 30*q^(3/2)*z^2 - 10*q^(17/2)*z^2 + 15*q^(9/2)*z^2 - 20*q^4*z^2 - 10*q^(7/2)*z^2 - 90*q^(11/2)*z + 86*q^(9/2)*z + 75*q^6*z - 45*q^(7/2)*z + 40*q^(3/2)*z - 30*q^7*z - 20*q^(13/2)*z - 24*q^(1/2)*z + 15*q^4*z + 15*q^3*z - 9*q^(5/2)*z - 9*q^5*z + 45*q^4 - 30*q^5 + 30*q^(1/2) - 29*q^3 + 21*q^(5/2) - 10*q^(9/2) - 9*q^2 - 24.

-----原帖-------

我有2个变量qz的函数,如

f(q,z) = 60*q^9*z^4 + 120*q^7*z^3 + 80*q^(17/2)*z^3 - 60*q^8*z^3 - 60*q^6*z^3 + ...

我需要找到

f(q,z) = 0

相对于z,但这不可能是分析性的(导致RootOf)。因此,我希望以数字方式找到最小数字z,而不是找到所有点,以使值对(q,z)满足f(q,z) = 0。任何想法如何做到这一点?

2 个答案:

答案 0 :(得分:1)

我害怕没有最低z ,因为f(q,z) = 0: q↓0 ⇒ z↓-∞

您的原始等式可以写成:

f(q,z)

按照z ABCDE的{​​{1}}的强大功能编写所有条款,您基本上拥有

f(q,z), with substitutions

这是z中的quartic equation,绝对可以是solved analytically。当然,它有点尴尬,但仍然可能。

请注意,A = f(q)B = g(q)C = h(q)D = k(q)E = m(q)并不重要,因为您的目标是表达{{1 }}。

以下是查找z = F(q)所持有的最小z的一种方法:

f(q,z)=0

我的试验表明在function find_minimum_z solution = fminsearch(@F, 3) end function R = F(q) R = roots([ 60.*q.^9 120.*q.^7 + 80.*q.^(17/2) - 60.*q.^8 - 60.*q.^6 + 40.*q.^(15/2) + 20.*q.^(11/2) - 20.*q.^9 175.*q.^(13/2) - 90.*q.^(15/2) + 75.*q.^5 - 60.*q.^6 - 45.*q.^(11/2) + 40.*q.^2 + 30.*q.^8 - 30.*q.^(3/2) - 10.*q.^(17/2) + 15.*q.^(9/2) - 20.*q.^4 - 10.*q.^(7/2) -90.*q.^(11/2) + 86.*q.^(9/2) + 75.*q.^6 - 45.*q.^(7/2) + 40.*q.^(3/2) - 30.*q.^7 - 20.*q.^(13/2) - 24.*q.^(1/2) + 15.*q.^4 + 15.*q.^3 - 9.*q.^(5/2) - 9.*q.^5 45.*q.^4 - 30.*q.^5 + 30.*q.^(1/2) - 29.*q.^3 + 21.*q.^(5/2) - 10.*q.^(9/2) - 9.*q.^2 - 24 ]); R = min(R(imag(R)==0)); if isempty(R) R = NaN; end end 处有一个渐近线,其中解决四次方的最小实数q=0倾向于-∞。

确实,当你制作z

的情节时,你可以看到这一点

enter image description here

答案 1 :(得分:0)

如果第一个词后面的所有词都有,那么它真的很简单:

f(q,z) = 60q⁹z⁴ + 120q⁷z³ + 80q¹⁷/²z³ - 60q⁸z³ - 60q⁶z³ + ...
       = z⁴·(60q⁹) + z³·(120q⁷ + 80q¹⁷/² - 60q⁸ - 60q⁶ + ... )

f(q,z) = 0 
⇒  z⁴ · (60q⁹) = -z³ · (120q⁷ + 80q¹⁷/² - 60q⁸ - 60q⁶ + ...) 
⇒  -z · (60q⁹) = 120q⁷ + 80q¹⁷/² - 60q⁸ - 60q⁶ + ...
⇒  z = -(120q⁷ + 80q¹⁷/² - 60q⁸ - 60q⁶ + ...) / 60q⁹
     = -(2q⁷ + 1⅓q¹⁷/² - q⁸ - q⁶ + ...) / q⁹