wolfram-mathematica - 求解 6 个不工作的变量的 6 个非线性方程
问题描述
我正在尝试为 6 个变量求解 6 个非线性方程组,但笔记本连续运行 2 天。我究竟做错了什么?(附笔记本)
exp1 = ExpandAll[(xd1 - x1)^2 + (yd1 - y1)^2 + z1^2 == h1^2];
exp2 = ExpandAll[(xd2 - x2)^2 + (yd2 - y2)^2 + z2^2 == h2^2];
exp3 = ExpandAll[(xd3 - x3)^2 + (yd3 - y3)^2 + z3^2 == h3^2];
exp4 = ExpandAll[((x1 - x2)^2 + (y1 - y2)^2 + (z1 - z2)^2)^(1/2) + ((x2 - x3)^2 + (y2 -y3)^2 + (z2 - z3)^2)^(1/2) == ((x1 - x3)^2 + (y1 - y3)^2 + (z1 - z3)^2)^(1/2)];
exp5 = ExpandAll[((z2 - z1)/(((x1 - x2)^2 + (y1 - y2)^2 + (z1 - z2)^2)^(1/2))) == ((z3 - z2)/(((x2 - x3)^2 + (y2 - y3)^2 + (z2 - z3)^2)^(1/2)))];
exp6 = ExpandAll[((z3 - z1)/(((x1 - x3)^2 + (y1 - y3)^2 + (z1 - z3)^2)^(1/2))) == ((z3 - z2)/(((x2 - x3)^2 + (y2 - y3)^2 + (z2 - z3)^2)^(1/2)))];
NSolve[{exp1, exp2, exp3, exp4, exp5, exp6}, {x1, y1, x2, y2, x3, y3}, Reals]
解决方案
(不是答案,但评论太长了。)
让xk, yk, zk
定义点Pk
,然后由三角形不等式的相等情况exp4
意味着三个点P1, P2, P3
共线,P2
介于P1
和之间P3
。
这等价于P2 = a P1 + (1-a) P3
for some a ∈ [0,1]
,并且在这种情况下exp5
并exp6
遵循,所以最后两个等式是多余的。
a
然后,可以从zk
坐标确定比率为a = (z3 - z2) / (z3 - z1)
。当计算值a
落在允许区间 内[0,1]
时,其余方程为:
(xd1 - x1)^2 + (yd1 - y1)^2 + z1^2 == h1^2
(xd2 - a x1 - (1-a) x3)^2 + (yd2 - a y1 - (1-a) y3)^2 + z2^2 == h2^2
(xd3 - x3)^2 + (yd3 - y3)^2 + z3^2 == h3^2
这是一个有 4 个未知数的 3 个方程组{x1, y1, x3, y3}
。在一般情况下,它可以没有、几个或无限多个解,尽管计算起来不一定很漂亮。
推荐阅读
- ada - 添加派生类型是接口的重大更改吗?
- java - 对象转换的功能/目的是什么?
- paypal-adaptive-payments - Paypal Adaptive Payments 查找应用程序 ID
- html - CSS过滤器:反转不适用于背景色
- java - junit 中的 ArrayList 相等性不起作用,尽管预期和实际相似
- image - 当 stride>1 时使用 FFT-Convolution
- amazon-web-services - 为每个应用程序用户动态创建 IAM 角色
- sql - 需要对一列进行分组添加获取 Hive 中其他列的计数
- swift - 属性别名(可以说是 Identifiable 最优雅的解决方案)
- c - 将正确的参数传递给 strtok