2014-02-12 3 views
2

for 루프에서 4 개의 대수 방정식을 풀려고합니다. 그것은 '아마도 가짜 해결책'이라고 경고합니다. 그것을 제거하는 방법을 알아 내려고 도와주세요. 코드 첨부. 당신이 당신의 첫번째 방정식을 변경하는 경우경고 : 아마도 가짜 솔루션 일 수 있습니다. [solvelib :: checkSolutions]

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 
+1

어떤 언어입니까? 그에 따라 태그하십시오. – PinnyM

+0

for 루프 내부에서'해결 '되는 이유는 무엇입니까? 그것의 어떤 것도'i'에 의존하지 않습니다. 문제를 설명하기 위해 해당 코드를 모두 표시 할 필요는 없으며 질문을 편집하여 관련없는 모든 비트를 제거하십시오. 모든 i에 대해 – horchler

+0

, x0, y0 및 r0의 값이 변경됩니다. 따라서 매 반복마다 솔루션이 변경됩니다. – Ankush

답변

2

는 경고가 더 이상 돌발 없습니다 :

l^2 == (x-x0)^2+(y-y0)^2 

나는 당신이 실제로 비록 가짜 값이 있는지 모르겠어요. 제곱근이 solvelib::checkSolutions에 문제를 일으킬 수 있습니다.

변수를 올바르게 출력하지 않았기 때문에 검사했을 때 가짜 값이 있다고 생각했을 수 있습니다. 당신은 solve 해결 지정에 대한 x, y, l, (순서대로) r,하지만 당신은 sol_l, sol_r, sol_x, sol_y (다른 순서)로 출력 변수의 이름을 지정합니다. `solve는 변수의 이름에 기초를 추측 할 수 없다. '와 같은 순서를 사용해야한다.

귀하의 코드 :

R=30; 
x0=-R; 
y0=0; 
l0=R/100; 
t0=1.2; 
t=0.7071; 
r0=R-l0/2; 
a=[1.78E-05 3.39E-04 0.0104 -0.05791 -16.36]; 

[sol_x,sol_y,sol_l,sol_r] = solve(l^2 == (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) 
% Check 
sol_l2.^2 - (sol_x2-x0).^2+(sol_y2-y0).^2 
sol_r - abs((sol_x+x0)/2) 
[subs(poly2sym(a),x,sol_x(1));subs(poly2sym(a),x,sol_x(2));... 
subs(poly2sym(a),x,sol_x(3));subs(poly2sym(a),x,sol_x(4))]-sol_y; 
sol_l2.*sol_r2*t - l0*r0*t0 

체크가 작은 값을 가까운 0을 반환합니다.

+0

왜 l = sqrt()가 아닌^2 =()와 경고가 주어지는 지 이해할 수있게 도와 주시겠습니까? – Ankush

+0

@Ankush :'sqrt'는 0에서 불연속이고 음수 값의'sqrt'는 복잡합니다. 'solve'는 숫자 방식을 사용하기 때문에 숫자 오류가있을 수 있으며'sqrt'의 특성에 의해 증폭 될 수 있습니다. 이 경우 내 최선의 추측입니다. 'abs' 함수의 비선형 성은 또한 더 많은 에러를 가져올 수도 있습니다 - 또는 최소한 솔루션을 얻기가 더 어렵게 만듭니다. – horchler