我有 N 行由 y 截距和角度 q 定义。约束是所有 N 条线必须在一个点相交。我可以想出最终得到约束的方程式是:
Y = tan(q(1))X + y(1)
Y = tan(q(2))X + y(2)
...
如果 N = 3 或 4,我可以手动获得约束,但如果 N 大于 4,我只能获得一个约束。如果 N = 3 或 4,那么当我为 X 求解上述方程时,我得到2个方程,然后可以将它们设置为彼此相等。如果 N > 4,我得到超过 2 个等于 X 的方程,我不知道如何将它们压缩为一个约束。如果我不能将它们压缩为一个约束并且能够使用动态创建的多个约束(取决于传入的 N)来解决优化问题,那也很好。
为了更好地理解我在做什么,我将展示如何获得 N = 3 的约束。我从这三个等式开始:
Y = tan(q(1))X + y(1)
Y = tan(q(2))X + y(2)
Y = tan(q(3))X + y(3)
然后我将它们设置为彼此相等并得到这些方程:
tan(q(1))X + y(1) = tan(q(2))X + y(2)
tan(q(2))X + y(2) = tan(q(3))X + y(3)
然后我求解 X 并得到这个约束:
(y(2) - y(1)) / (tan(q(1)) - tan(q(2))) = (y(3) - y(2)) / (tan(q(2)) - tan(q(3)))
请注意我如何有 2 个方程来求解 X。当 N > 4 时,我最终得到的结果超过 2。如果我能够动态创建约束,然后在 MATLAB 中调用将处理多个约束的优化函数,那么这就可以了远没有找到。