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 - 为什么包含正面假设会取消正面答案?的主要内容,如果未能解决你的问题,请参考以下文章