我试图在for循环中解决四个代数方程。它正在发出警告“可能是虚假的解决方案”。你可以帮我弄清楚如何删除它。代码附于此处。
a=[1.78E-05 3.39E-04 0.0104 -0.05791 -16.36];
for i=1:R/l0
syms x y l r
[sol_l,sol_r,sol_x,sol_y] = solve(l == (sqrt((x-x0)^2+(y-y0)^2)), r == abs((x+x0)/2),...
poly2sym(a) == y, l*r*t == l0*r0*t0,x,y,l,r, 'Real', true);
for j=1:length(sol_x)
if (sol_x(j)<0)&&(sol_x(j)>x0)
if (sol_y(j)<0)&&(sol_y(j)<y0)
x_req(1,i) = sol_x(j);
y_req(1,i) = sol_y(j);
end
end
end
x0 = x_req(1,i);
y0 = y_req(1,i);
r0 = R-l0*(2*i-1)/2;
end
答案 0 :(得分:2)
如果您将第一个等式更改为此,警告将不再显示:
l^2 == (x-x0)^2+(y-y0)^2
我不确定你是否真的有虚假的价值观。平方根可能会给solvelib::checkSolutions
带来麻烦。
您可能认为在检查时存在虚假值,因为您没有正确输出变量。您指定solve
求解x
,y
,l
,r
(按此顺序),然后将输出变量命名为{{1 }},sol_l
,sol_r
,sol_x
(不同的顺序)。你必须使用相同的顺序,因为`解决不能根据变量的名称进行猜测。
您的代码:
sol_y
检查返回接近零的小值。