Matlab - 为什么包含正面假设会取消正面答案?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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])
])
答案

您正在尝试解决具有无限解决方案的问题。换句话说,你正在解决的变量x1 y1 z1 x2 y2 z2之间存在独立性。解算器似乎只有在约束变量时才能找到这种独立性(如果你不这样做,那么只会输出有限数量的解决方案):你会发现你甚至在指定愚蠢的东西时也会得到相同的警告

assumeAlso(z1>=-inf)
assumeAlso(z2>=-inf)

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

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

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

以上是关于Matlab - 为什么包含正面假设会取消正面答案?的主要内容,如果未能解决你的问题,请参考以下文章

算法:正面硬币

具有正面或负面属性的 iOS UIButtons

双面后记 - 强制新页面

正面管教-读书笔记

正面管教-读书笔记

正面管教-读书笔记