روش نیوتن-رافسون یکی از تکنیکهای معروف و پرکاربرد در حل معادلات غیرخطی است. این روش به ویژه در مسائل عددی که نیاز به دقت بالا و همگرایی سریع دارند، بسیار مفید است. این روش یک ابزار قدرتمند برای حل معادلات غیرخطی است که با استفاده از کدهای متلب به راحتی قابل پیادهسازی و استفاده است. با انتخاب مقدار اولیه مناسب و دقت مورد نظر، میتوان نتایج دقیقی به دست آورد. این روش با استفاده از تقریبهای خطی برای یافتن ریشههای معادله، به حل عددی معادلات غیرخطی پرداخته و معمولاً به سرعت به جوابهای دقیق نزدیک میشود. در انجام پروژه های متلب در زمینه معادلات خطی، روش نیوتن می تواند بسیار کمک کننده باشد.
مراحل عملکرد روش نیوتن-رافسون برای معادله f(x) = 0 به صورت زیر عمل میکند:
1. انتخاب یک تقریبی اولیه x0
2. تکرار رابطه زیر تا رسیدن به دقت مورد نظر:
که در آن f ‘(x) مشتق معادلهf(x) است.
روش نیوتن-رافسون به طور کلی دارای همگرایی خطی است، که به این معنی است که تعداد تکرارها به طور نمایی با افزایش دقت کاهش مییابد. همگرایی روش به خوبی به شرایط اولیه و ویژگیهای تابع بستگی دارد.
شرایط همگرایی در این روش عبارت است از:
1. نزدیکی به ریشه: برای همگرایی سریع، مقدار اولیه باید به ریشه نزدیک باشد.
2. قابلیت مشتقپذیری تابع: تابع باید در اطراف ریشه به خوبی مشتقپذیر باشد.
مزایای این روش:
- همگرایی سریع در نزدیکی ریشه.
- نیاز به تعداد کمی از تکرارها برای رسیدن به دقت بالا.
معایب این روش:
- نیاز به محاسبه مشتق دارد.
- ممکن است در برخی شرایط به جوابهای محلی متوقف شود. یعنی ممکن است روش نیوتن-رافسون که به یک ریشه محلی برسد، از یافتن ریشههای دیگر ناتوان باشد.
- مشتق صفر: اگر مشتق تابع در نقطه تقریباً صفر شود، روش ممکن است به مشکل برخورد کند و همگرایی نداشته باشد.
کاربردهای روش نیوتن رافسون بسیار بالاست. مثلا در تحلیل دادههای علمی، در حل معادلهای که از دادههای علمی به دست آمده است، روش نیوتن-رافسون میتواند برای یافتن ریشههای معادله غیرخطی مناسب باشد. در مدلسازی مهندسی ، ممکن است نیاز به حل معادلات پیچیده برای طراحی قطعات داشته باشید. روش نیوتن-رافسون میتواند در این زمینه کاربردی باشد.
مثال 1- حل معادله f(x) = x^3 – 2x – 5 = 0
clc; clear; close all
% تعریف تابع و مشتق آن
f = @(x) x.^3 – 2*x – 5;
df = @(x) 3*x.^2 – 2;
% مقدار اولیه
x0 = 2;
% دقت مورد نظر
tolerance = 1e-6;
% حداکثر تعداد تکرارها
max_iter = 100;
% روش نیوتن-رافسون
x = x0;
for iter = 1:max_iter
x_new = x – f(x) / df(x)
% بررسی شرط توقف
if abs(x_new – x) < tolerance
break;
end
x = x_new;
end
disp(‘———————–‘);
% نمایش نتیجه
disp([‘ریشه تقریباً برابر است با: ‘, num2str(x)]);
disp([‘تعداد تکرارها: ‘, num2str(iter)]);
خروجی:
x_new =
2.1000
x_new =
2.0946
x_new =
2.0946
x_new =
2.0946
———————–
ریشه تقریباً برابر است با: 2.0946
تعداد تکرارها: 4
توضیح: تابع f و مشتق آن df با استفاده از توابع لامبدا تعریف شدهاند. مقدار اولیه x0 انتخاب شده و الگوریتم با تکرار برای یافتن ریشه ادامه مییابد. در هر تکرار، مقدار جدید x_new محاسبه شده و بررسی میشود که آیا تغییرات کمتر از دقت مورد نظر هستند یا خیر. در این مثال، مقدار تقریباً صحیح ریشه و تعداد تکرارها به وضوح نمایش داده میشود. نتایج نشان میدهد که روش نیوتن-رافسون به سرعت به دقت بالا میرسد.
مثال 2- حل معادله f(x) = sin(x) – x/2 = 0
clc; clear; close all
% تعریف تابع و مشتق آن
f = @(x) sin(x) – x/2;
df = @(x) cos(x) – 1/2;
% مقدار اولیه
x0 = 1;
% دقت مورد نظر
tolerance = 1e-8;
% حداکثر تعداد تکرارها
max_iter = 50;
% روش نیوتن-رافسون
x = x0;
for iter = 1:max_iter
x_new = x – f(x) / df(x)
% بررسی شرط توقف
if abs(x_new – x) < tolerance
break;
end
x = x_new;
end
disp(‘———————–‘);
% نمایش نتیجه
disp([‘ریشه تقریباً برابر است با: ‘, num2str(x)]);
disp([‘تعداد تکرارها: ‘, num2str(iter)]);
خروجی:
x_new =
-7.4727
x_new =
14.4785
x_new =
6.9351
x_new =
16.6357
x_new =
8.3439
x_new =
4.9546
x_new =
-8.3013
x_new =
-4.8173
x_new =
3.7926
x_new =
1.8611
x_new =
1.8962
x_new =
1.8955
x_new =
1.8955
x_new =
1.8955
———————–
ریشه تقریباً برابر است با: 1.8955
تعداد تکرارها: 14
توضیح: تابع f و مشتق آن df برای معادله سینوسی تعریف شدهاند. الگوریتم به همان روش قبل پیادهسازی شده، با مقدار اولیه و دقت متفاوت. در اینجا، با توجه به ویژگیهای تابع سینوسی، نتایج مشابهی با دقت بالاتر حاصل میشود. همچنین تعداد تکرارها به دلیل دقت بالاتر ممکن است بیشتر باشد.
مثال 3: معادله نمایی- حل معادله f(x) = e^x – 2x = 0.
clc; clear; close all
% تعریف تابع و مشتق آن
f = @(x) exp(x) – 2*x;
df = @(x) exp(x) – 2;
% مقدار اولیه
x0 = 0.5;
% دقت مورد نظر
tolerance = 1e-8;
% حداکثر تعداد تکرارها
max_iter = 50;
% روش نیوتن-رافسون
x = x0;
for iter = 1:max_iter
x_new = x – f(x) / df(x);
X(iter)= x_new;
% بررسی شرط توقف
if abs(x_new – x) < tolerance
break;
end
x = x_new;
end
% نمایش نتیجه
disp([‘ریشه تقریباً برابر است با: ‘, num2str(x)]);
disp([‘تعداد تکرارها: ‘, num2str(iter)]);
plot(X,’or’);
grid on
خروجی:
توضیح: تابع f و مشتق آن df برای معادله نمایی تعریف شدهاند و الگوریتم مشابه با دیگر مثالها پیادهسازی شده است.
برای مشاهده بیشتر از مثال های روش نیوتن در متلب، به سایت atozmath مراجعه کنید.
برای آشنایی بیشتر با نرم افزار متلب، مطالعه مقاله های زیر پیشنهاد می شود: