Matlab-为什么包含肯定假设会取消肯定答案的资格?

Jol*_*e_F 5 matlab

运行下面的代码将给出两组解决方案。对于一组解决方案,z值都将> = 0(39.4962和0)。对于另一组解决方案,一个z值将小于0(-39.4962和0)。

如果我包括当前被注释掉的“ assumeAlso”行,则不会给出任何解决方案。这不是我所期望的。我假设只有第二套解决方案会被取消资格,因为第一套解决方案不会与假设相抵触。

有人能启发我为什么会这样吗?提前致谢。

points = [0.368,0.02,2.3 ; -0.536,-0.108,2.3];
d = 40;

syms x1 y1 z1 x2 y2 z2 real


% assumeAlso(z1 >= 0)
% assumeAlso(z2 >= 0)


% Conditions L1 must satisfy
line1 = [
    x1/points(1,1) == y1/points(1,2)
    y1/points(1,2) == z1/points(1,3)
];

% Conditions L2 must satisfy
line2 = [
    x2/points(2,1) == y2/points(2,2)
    y2/points(2,2) == z2/points(2,3)
];


distance = [
    ( (x1-x2).^2 + (y1-y2).^2 + (z1-z2).^2 ) == d.^2
];

solved = solve([line1,line2,distance],[x1,y1,z1,x2,y2,z2]);


disp([ 
eval([solved.x1 solved.y1 solved.z1])
eval([solved.x2 solved.y2 solved.z2])
])
Run Code Online (Sandbox Code Playgroud)

JJM*_*sen 1

您正在尝试解决一个有无限解决方案的问题。换句话说,x1 y1 z1 x2 y2 z2您要求解的变量之间存在独立性。求解器似乎仅在约束变量时才发现这种独立性(并且令人困惑的是,如果不这样做,则只会输出有限数量的解决方案):您会发现,即使指定类似的愚蠢内容,您也会收到相同的警告

assumeAlso(z1>=-inf)
assumeAlso(z2>=-inf)
Run Code Online (Sandbox Code Playgroud)

像这样的不平等约束assumeAlso(z1>=0)并不会消除独立性。相反,施加等式约束assumeAlso(z2==0)可以解决问题。然后,您可以指定assumeAlso(z1>=0)查找您正在寻找的一种特定解决方案。即,指定:

assumeAlso(z1>=0)
assumeAlso(z2==0)
Run Code Online (Sandbox Code Playgroud)

但是,请注意,例如,您会找到约束 的另一个可行解决方案assumeAlso(z2==1),甚至 等等assumeAlso(z2==2*z1)......