티스토리 뷰
Robotics/numerical
[numerical computation] False-Position Method (w/ MATLAB)
robotics.guru 2022. 12. 8. 17:35
False-Position Method
수치해석에서 근을 찾는 방법 Bisection Method와 비슷한 논리를 가진 방법, 가위치법(False Position Method)입니다.
False-Position Method은 Bracketing Method. 이분법과 마찬가지로 새로운 근을 추정한 다음, 또 다시 새로운 구간을 정하며 근을 찾아나가는 방법입니다.
Bisection 과 False-Position Method의 차이점은 Bisection은 구간 끝의 두점을 계속 반으로 잘가며 근을 찾는 방법이라면, False-Position Method는 구간 끝의 두 점을 잇는 선을 그어 근을 찾는 방법입니다. 기존 Bisection Method에 비해 수렴 속도가 더 빠르다라는 장점을 갖고 있습니다.
Algorithm
False-Postion를 통해 근을 계산하는 방법은 다음과 같습니다.
- 탐색 구간 $[x_l, x_u]$과 임계 기준값(tolerance)를 선정합니다.
- 선정된 구간의 양 끝점에서의 함수 값을 곱하여 음수인지 양수인지 확인합니다.
- 가상의 직석의 x절편을 근이라 결정하고 $x_r$로 지정.
- $f(x_r)$을 $f(x_l)$와 $f(x_r)$중 부호가 같은 쪽과 값을 비교.
- 비교된 값의 차이가 임계값안으로 들어오면 해당되는 $x_r$을 근으로 추정.
- 만약, 오차값이 임계 기준값 안으로 들어오지 못하면, $x_r$혹은 $x_l$을 $x_r$로 업데이트하여 4번으로 되돌아가 다시 오차값안으로 들어올때까지 iterate한다.
Result
Bisection Method의 결과 사진(iteration)을 비교해보면 알수 있듯, 보다 빠르게 근에 수렴 하는 것을 확인 할 수 있습니다.
더보기
MATLAB 코드
clc;
clear all;
x_l = 1; x_u = 2; x_r = 0;
tol_x = 0.001;
tol_y = 0.0000001;
y_l = func(x_l);
y_u = func(x_u);
if(func(x_l) * func(x_u) > 0)
fprintf(1, "No root exists\n");
else
iter = 0;
fprintf(1, '\n\n');
fprintf(1,' iter| x_l | x_u | x_r | y_l | y_r \n');
fprintf(1,'------------------------------------------------------------\n');
while(1)
iter = iter + 1;
x_r = (x_l*y_u - x_u*y_l) / (y_u - y_l);
y_r = func(x_r);
fprintf(1,' %d | %f | %f | %f | %f | %f\n',iter, x_l, x_u, x_r, y_l ,y_r);
if(y_l * y_r < 0)
if(abs(x_r - x_u) < tol_x || abs(y_r) < tol_y)
fprintf(1,'Approximate solution c = %.7f\n', x_r);
break;
else
x_u = x_r;
y_u = y_r;
end
else
if(abs(x_r - x_l) < tol_x || abs(y_r) < tol_y)
fprintf(1,'Approximate solution c = %.7f\n', x_r);
break;
else
x_l = x_r;
y_l = y_r;
end
end
end
end
x = linspace(-1, 3);
y = func(x);
figure;
plot([-1,3], [0,0], x,y, '-', x_r, y_r, '*', LineWidth=2);
grid on;
% % set(gca, 'XAxisLocation', 'origin');
set(gca, 'YAxisLocation', 'origin');
function y = func(x)
y = x.^3 - x.^2 - x - 1;
end
'Robotics > numerical' 카테고리의 다른 글
[numerical computation] Bisection Method (w/ MATLAB) (1) | 2022.12.08 |
---|---|
[numerical computation] Numerical Analysis Methods (0) | 2022.12.03 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- control
- repeatability
- manipulator
- NumericalComputation
- visual slam
- trajectory planning
- Mobile Robot
- paper review
- ORB
- Twists
- wrench
- Slam
- Modern Robotics
- lqr control
- Kinematics
- optimal control
- git
- odometry
- inverse kinematics
- LaTeX
- Robotics
- odom
- PID CONTROL
- Localization
- ICP
- Jacobian
- trapezoidal
- Screw
- Configuration Space
- Forward Kinematics
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함