我试图用这段代码解决方程式:
a = [-0.0008333 -0.025 -0.6667 -20];
length_OnePart = 7.3248;
xi = -6.4446;
yi = -16.5187;
syms x y
[sol_x,sol_y] = solve(y == poly2sym(a), ((x-xi)^2+(y-yi)^2) == length_OnePart^2,x,y,'Real',true);
sol_x = sym2poly(sol_x);
sol_y = sym2poly(sol_y);
它给出的解决方案集是(-23.9067,-8.7301)和(11.0333,-24.2209),它们甚至不满足圆的等式。我该如何纠正这个问题?
答案 0 :(得分:0)
如果您正在尝试求解立方和圆的交点,即y==poly2sym(a)
等于(x-xi)^2+(y-yi)^2==length_OnePart^2
,solve
看起来可能会对某些内容感到困惑圆圈以参数方式表示,而不是单值函数。它也可能与x
和y
不是独立解决方案的事实有关,而后者则取决于前者。在这种情况下,它还可能取决于使用数值解算器。 solve
似乎可以与您的类似输入正常工作,因此您可以report this behavior to the MathWorks查看他们的想法。
在任何情况下,这是一种更好,更有效的方法来解决这个问题作为根解决问题(与联立方程相反):
a = [-0.0008333 -0.025 -0.6667 -20];
length_OnePart = 7.3248;
xi = -6.4446;
yi = -16.5187;
syms x real
f(x) = poly2sym(a);
sol_x = solve((x-xi)^2+(f(x)-yi)^2==length_OnePart^2,x)
sol_y = f(sol_x)
返回:
sol_x =
0.00002145831413371390464567553686047
-13.182825373861454619370838716408
sol_y =
-20.000014306269544436430325843024
-13.646590348358951818881695033728
请注意,如果您更精确地表示系数和参数,然后只有四位小数,例如0,-20
,则可能会得到稍微更准确的结果(一个解决方案显然位于a = [-1/1200 -0.025 -2/3 -20]
)。事实上,如果您提供准确的陈述,solve
可能会完全找到一个或多个解决方案。
此外,在您的代码中,对sym2poly
的调用除了转换回浮点(double
之外)之外什么都不做,因为输入不是符号形式多项式方程。