روش نیوتون-رافسون جهت بهینه سازی توابع

در این پست نحوه‌ی کدنویسی الگوریتم نیوتن-رافسون در نرم‌افزار متلب ارائه می‌گردد.

ابتدا برای بدست آوردن نقطه جدید \( x_{k+1} \) بایستی سه المان محاسبه شود؛ نقطه فعلی \( x_{k} \) و مشتق اول \( f'(x_k) \) و دوم \( f”(x_k) \) به ازای نقطه فعلی. نقطه جدید توسط رابطه تکراری زیر بدست می‌آید:
$$x_{k+1} = x_{k} – \frac {f'(x_k)} {f”(x_k)} $$

فرایند زمانی متوقف می‌شود که رابطه \( |x_{k+1}-x_k|<\epsilon \) (فاصله نقطه فعلی از نقطه بعدی کوچکتر از مقدار اپسیلون شود) یا \( f'(x_k)<\epsilon \) ارضا شود.

کد نرم‌افزار متلب این الگوریتم به شرح زیر می‌باشد:

% Newton Method
% Author: M. Namakshenas

% myFunction --> function is taken by user
% a --> Starting Point

%sample#1: x^4/4 + x^2 - 100*x -cos(x)
clc;clear
format short g
syms x;
myFunction = input('Enter Function in terms of x: ');
a = input('Enter Starting Point: ');
maxerr = input('Enter Maximum Error: ');
f = inline(myFunction);
%calculate the frst derivitive of input function
diffFunction = diff(f(x));
df = inline(diffFunction);
%calculate the second derivitive of input function
diff2Function = diff(diffFunction);
df2 = inline(diff2Function);
b = a - df(a)/df2(a); % Newton formula to find the next point
disp('-------------------------');
disp(' Xn f(Xn)');
disp('-------------------------');

while (abs(a-b) > maxerr) %termination crterion
 disp([b f(b)]);
 a = b; %finding next point based on the previous point
 b = a - df(a)/df2(a);
end
0 Comments
Inline Feedbacks
View all comments