Matlab的解决方案:解决方案不满足等式

时间:2014-05-25 06:23:54

标签: matlab symbolic-math equation-solving

我试图用这段代码解决方程式:

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),它们甚至不满足圆的等式。我该如何纠正这个问题?

1 个答案:

答案 0 :(得分:0)

如果您正在尝试求解立方和圆的交点,即y==poly2sym(a)等于(x-xi)^2+(y-yi)^2==length_OnePart^2solve看起来可能会对某些内容感到困惑圆圈以参数方式表示,而不是单值函数。它也可能与xy不是独立解决方案的事实有关,而后者则取决于前者。在这种情况下,它还可能取决于使用数值解算器。 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之外)之外什么都不做,因为输入不是符号形式多项式方程。