روش ژاکوبی

Jacobi iterative method
روش گوس سایدل - Gauss-Seidel Method
معرفی

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

روش ژاکوبی یک روش تکراری مورد استفاده برای حل دستگاه معادلات خطی است. فرض کنید یک دستگاه معادلات خطی n*n به شکل زیر داریم:

delim{[}{A}{]}delim{lbrace}{X}{rbrace}=delim{lbrace}{B}{rbrace}

به طور کلی برای یک دستگاه n*n می توانیم مقدار مولفه های {x_i} ^{(k)} را برای i = 1,2,...,n  و در تکرار kام با استفاده از رابطه ی زیر بدست آوریم:

{x_i}^{(k)} = {sum{j=1, j backslash = i}{n}{(-{a_{ij} {x_j} ^{(k-1)})} + {b_i}}/a_{ii}

اکنون با در نظر گرفتن ماتریس ضرایب delim{[}{A}{]} به صورت:

delim{[}{matrix{4}{4}{a_{11} a_{12} cdots a_{1n} a_{21} a_{22} cdots a_{2n} vdots vdots ~ vdots a_{n1} a_{n2} cdots a_{nn}}}{]}

این ماتریس را به ماتریس های قطری و غیر قطری D, L, U می شکنیم:

A = delim{[}{matrix{4}{4}{a_{11} 0 0 0 0 a_{22} 0 0 ~ ~ ddots ~ 0 0 0 a_{nn}}}{]} - delim{[}{matrix{4}{4}{0 0 0 0 {-a_{21}} 0 0 0 {~} {~} ddots {~} {-a_{n1}} cdots {-a_{n,n-1}} 0}}{]} - delim{[}{matrix{4}{4}{0 {-a_{12}} ~ {-a_{1n}} ~ ~ ddots ~ ~ ~ ~ {-a_{n-1,n}} 0 ~ ~ 0}}{]}

~~ = D - L - U

که در آن D بخش قطری ماتریس delim{[}{A}{]} و ماتریس های -L و -U به ترتیب بخش های پایین مثلثی و بالا مثلثی ماتریس delim{[}{A}{]} می باشند. با توجه به تعریف D,L,U اکنون می توانیم دستگاه معادلات n*n را به صورت ماتریسی زیر بازنویسی کنیم:

x^{(k)} = Tx^{(k)} + c

یا به عبارتی اگر D^{-1} وجود داشته باشد داریم:

x^{(k)} = {T_j}x^{(k-1)} + c_j

که در آن

{T_j} = {D^{-1}}(L+U)

{c_j} = {D^{-1}}b

اکنون با استفاده از این رابطه و یک حدس اولیه x^{(0)} می توانیم x^{(1)} را محاسبه نماییم. سپس با قرار دادن x^{(1)} به جای x^{(k-1)} مقدار پاسخ در تکرارهای بعدی را محاسبه نماییم تا پاسخ ها با دقت مورد نظر ما همگرا گردند.

    برنامه نویسی با MATLAB

    در اینجا با استفاده از نرم افزار متلب (MATLAB) برنامه ای جهت حل دستگاه معادلات خطی n در n به روش ژاکوبی ارائه گردیده است. دو کد برای این منظور در یک فایل فشرده ارائه گردیده است:

    1. کد صریح (explicit) که در خروجی روند حل کامل مسئله را نمایش می دهد

    2. کد غیرصریح (معمولی) که تنها پاسخ نهایی را نمایش می دهد

    لازم به ذکر است که برنامه ی ارائه شده قادر به حل تمامی مثال های قابل حل با روش ژاکوبی بوده و به صورت کاملا عمومی (general) کدنویسی شده است.

    ورودی ها و خروجی ها

    ورودی:

    1. ماتریس ضرایب A در دستگاه Ax=b
    2. بردار ثابت b در دستگاه Ax=b به شکل [b1 ;b2 ;…;bn]
    3. بردار حدس اولیه برای پاسخ به شکل [p1 ;p2 ;…;pn]
    4. تعداد تکرار

    خروجی:

    1. محاسبه ماتریس های D، L و U
    2. محاسبه ماتریس های Tj و Cj
    3. محاسبه ی بردار پاسخ x در تکرار های مختلف

    تصاویر اجرای برنامه

    مشاهده ی ورودی و خروجی برنامه در یک مثال نمونه - صفحه 1

    مشاهده ی ورودی و خروجی برنامه در یک مثال نمونه - صفحه 2

    مشاهده ی ورودی و خروجی برنامه ی غیر صریح در یک مثال

    این برنامه با نسخه های متلب/MATLAB سال های 2010-2013 تست شده است. در صورت استفاده از نسخه ی سال های دیگر لایبریکا تضمین کننده ی اجرای صحیح برنامه نمی باشد.