الگوریتم‌های پیداکردن ریشه

از testwiki
پرش به ناوبری پرش به جستجو

مقدمه

اساساً الگوریتم پیدا کردن ریشه یا ریشه‌یابی، یک الگوریتم برای پیدا کردن ریشه‌های توابع پیوسته‌است.

یک ریشه از تابع f هنگامی پیدا می‌شود که x در معادلهٔ f(x)=0 صدق کند و به آن x ریشهٔ تابع fمی‌گوییم یا در معادلهٔ زیر هنگامی ریشهٔ fرا پیدا می‌کنیم که حاصل تفریق دو تابع دیگر برابر ۰ شود.

f(x)=g(x)h(x)=>g(x)f(x)=0=>g(x)=f(x)

به‌طور کلی ریشه‌های بسیاری از توابع را نمی‌توان به صورت دقیق محاسبه کرد و الگوریتم پیدا کردن ریشه (Root-finding algorithm)به ما کمک می‌کند که به صورت تقریبی آنها را محاسبه کنیم.

اکثر الگوریتم‌های ریشه‌یابی با استفاده از انتخاب دنباله‌ای از اعداد امیدوارند که این دنباله به عنوان یک حد به سمت ریشه همگرایی داشته باشد. آنها با استفاده از یک یا چند حدس اولیه از ریشه، به عنوان مقادیر شروع می‌کنند سپس هر تکرار الگوریتم تقریب بهتری از ریشه را برای ما به ارمغان می‌آورد.[۱]

روش‌های براکتی (Bracketing methods)[۲]

در این گونه روش‌ها با تعیین بازه‌های کوچک و استفاده از آنها در برخی فرمول‌ها سعی می‌کنیم که به ریشه دست پیدا کنیم.[۳]

روش تنصیف یا دو بخشی

این روش از ساده‌ترین و قابل اعتمادترین روش‌های تکراری برای حل معادلهٔ غیر خطی است. این روش همچنین به عنوان روش تقسیم باینری(binary chopping) یا نیمه بازه(half-interval method)نیز شناخته می‌شود.

در این روش تابع

f

را به

n

بازهٔ مختلف

[a,b]

تقسیم می‌کنیم تا ریشه‌ای مانند

ϵ

را پیدا کنیم بدین صورت که:

if(f((an+bn)2)=0)thenϵ=(an+bn)2if(f(an)f((an+bn)2)<0)thensetan+1=an  ;  bn+1=(an+bn)2

در غیر این صورت:

setan+1=an+bn2;bn+1=bn

برای فهم بهتر به تصویر زیر توجه کنید:الگو:سخ

در این روش مانند روش قبل تابع مورد نظر را بازه بازه می‌کنیم ولی در این روش سریع تر به این مسئله و رسیدن به ریشه اهمیت می‌دهیم. بدین صورت که:

w=(  f(bi1) ai1f(ai1) bi1 )f(bi1)f(ai1)if (f(an)f(w)0)then set an+1=an ; bn+1=w

در غیر این صورت

an+1=w ; bn+1=bn

برای درک بهتر به تصویر زیر توجه کنید:الگو:سخ

regula falsi

روش تعامل (Interpolation)[۴]

بسیاری از روش‌های پیدا کردن ریشه از این روش استفاده می‌کنند. این روش شامل استفاده از آخرین مقادیر تقریبی محاسبات ریشه برای تقریب تابع توسط یک چندجمله‌ای از درجه پایین است که مقادیر مشابهی را در این ریشه‌های تقریبی می‌گیرد.

سپس ریشهٔ چند جمله ای محاسبه می‌شود و به عنوان یک مقدار تقریبی جدید از ریشه تابع استفاده می‌شود و روند آن تکرار می‌شود.

دو مقدار به ما این امکان را می‌دهد که تابع را با یک چند جمله‌ای درجه یک تطبیق دهیم و سه مقدار یک چند جمله ای درجه دوم را درست می‌کند که گراف تابع را به وسیلهٔ یک سهمی تقریب می‌زند.

و این روش، روش مولر است.

روش‌های Iterative[۵]

با وجود اینکه تمام الگوریتم‌های ریشه‌یابی، به وسیلهٔ تکرار ادامه می‌یابند، یک روش Iterative، معمولاً از تکرار خاصی استفاده می‌کند که شامل تعریف یک تابع کمکی است که برای تقریب جدیدی به آخرین تقریب محاسبات یک ریشه اعمال می‌شود.

روش نیوتن

این روش مبتنی بر مشتقات تکراری است؛ بدین منظور که روش نیوتن فرض می‌کند که تابع f یک مشتق مداوم داشته باشد. اگر با استفاده از روش نیوتن مشتقات شروع به دور شدن از ریشه کند روش نیوتن همگرا نیست و این بدین معناست که از ریشه در حال دور شدن هستیم ولی هنگامی که همگرا می‌شود یعنی در حال نزدیک شدن به ریشه هستیم، این روش معمولاً از روش تنصیف بهتر و سریع تر است. روش نیوتن نیز مهم است زیرا به راحتی به مشکلات بزرگتر پاسخ می‌دهد. روش‌های نیوتن مانند با دستورات بالاتر از همگرایی روش‌های خانه‌دار(Householder's methods) است.[۶]

به عبارت دیگر در این روش ابتدا مشتق تابع را برای نقطه‌ای مانند x0می‌گیریم. سپس برای تابع fریشه را به دست می‌آوریم. ریشه نقطه‌ای مانند x1می‌شود سپس برای نقطهٔ x1از تابع fمشتق می‌گیریم و ریشهٔ این معادلهٔ به دست آمده به عنوان x2ما انتخاب می‌شود و همین روال به صورت تکراری ادامه خواهد داشت.

برای درک بهتر به تصویر زیر توجه کنید:

از آنجائیکه روش‌های دو بخشی و نابجایی با سرعت کمی به سمت ریشه میل می‌کنند، لذا شیوه ای سریعتر برای یافتن ریشه نیاز است. یک چنین شیوه ای، روش وتری نام دارد. مشابه شیوهٔ نابجایی ، اساس این روش نیز بر تقریب زدن ریشه تابع از طریق یک خط مستقیم قرار دارد که دو نقطه از نمودار تابع را به یکدیگر وصل می‌کند، اما نیازی نیست که نقاط حدس اولیه حتماً دارای عالمت مخالف باشند.

  • گام اول:xi+1=xif(xi)(xi1xi)f(xi1)f(xi)
  • گام دوم:en=|xi+1xi|ϵiand/oren=|f(xi+1)|ϵ2
  • گام سوم: اگر شرط فوق برقرار باشد، به مرحله چهار برو، در غیراینصورت داریم:setxi=xi+1,xi1=xi
  • گام چهارم :نمایش xi+1به عنوان ریشه و پایان الگوریتم.

یک شبه کد برای این الگوریتم:The Secant MethodGiven f(x) =0ϵ and two initial points x0,x1;Given max =maximum number of iterations;For i=1 to max:compute  g(xi)=f(xi)(xi1)xixi1;compute  xi+1=xif(xi)g(xi);If |xi+1xi|<ϵ:Solution=xi+1;stop the iterations;endifendfor

منابع

الگو:پانویس

الگو:سخ