我试图在Matlab中解决方程组。
方程组定义如下:
B
我尝试使用以下方法解决它:
from __future__ import print_function
class A(object):
def __init__(self):
print("A")
super(A, self).__init__()
class B(object):
def __init__(self):
print("B")
super(B, self).__init__()
class C(A,B):
def __init__(self):
print("C")
super(C, self).__init__()
和
>>> C.mro()
[__main__.C, __main__.A, __main__.B, object]
>> C()
C
A
B
但我收到错误:
syms x1 x2 lambda
Grad =
2*lambda*x1 + (8*x1*(((x2 - 10)^2 + x1^2)^(1/2) - 10))/((x2 - 10)^2 + x1^2)^(1/2) + (4*x1*(((x2 + 10)^2 + x1^2)^(1/2) - 10))/((x2 + 10)^2 + x1^2)^(1/2) - 5
2*lambda*x2 + (4*(((x2 - 10)^2 + x1^2)^(1/2) - 10)*(2*x2 - 20))/((x2 - 10)^2 + x1^2)^(1/2) + (2*(((x2 + 10)^2 + x1^2)^(1/2) - 10)*(2*x2 + 20))/((x2 + 10)^2 + x1^2)^(1/2) - 10
x1^2 + x2^2 - 36
我不明白为什么Matlab会这样做,我有三个带有三个变量的方程式,所以Matlab应该能够找到合适的解决方案吗?
答案 0 :(得分:0)
可以通过将值替换回等式并检查值是否正确来解决答案:
[X1, X2, LAMBDA] = solve([Grad(1) == 0, Grad(2) == 0, Grad(3) == 0],[x1, x2, lambda]);
clc;
X1 = double(X1); X2 = double(X2); LAMBDA = double(LAMBDA);
X1 = real(X1); X2 = real(X2); LAMBDA = real(LAMBDA);
i = 1;
while i < 17
Sub(i,:) = subs(Grad,[x1, x2, lambda],[X1(i),X2(i),LAMBDA(i)]);
if abs(Sub(i,1)) < 0.00001 & abs(Sub(i,2)) < 0.00001 & abs(Sub(i,3)) < 0.00001
I(i,:) = i;
Var(i,1) = X1(i); Var(i,2) = X2(i); Var(i,3) = LAMBDA(3);
end
i = i + 1;
end
我已经知道我的x1和x2值的近似值(来自我使用的另一种优化技术),因此我可以轻松地检查是否找到了正确的值(它们是)。我也知道只有真实的部分是相关的。
FF = find(Var(:,1)>5&Var(:,1)<6&Var(:,2)>1&Var(:,2)<2);
RealVar = Var(FF,:)
这给了我正在寻找的变量。