شما در حال مطالعه نسخه آفلاین یکی از مطالب «مجله فرادرس» هستید. لطفاً توجه داشته باشید، ممکن است برخی از قابلیتهای تعاملی مطالب، مانند امکان پاسخ به پرسشهای چهار گزینهای و مشاهده جواب صحیح آنها، نمایش نتیجه آزمونها، پاسخ تشریحی سوالات، پخش فایلهای صوتی و تصویری و غیره، در این نسخه در دسترس نباشند. برای دسترسی به نسخه آنلاین مطلب، استفاده از کلیه امکانات آن و داشتن تجربه کاربری بهتر اینجا کلیک کنید.
روش گوس سایدل یک روش تکراری متداول و پرکاربرد برای حل دستگاه معادلات خطی جبری است. این روش برای هر ماتریس همگرا با درایههای غیرصفر قطری قابل استفاده است. این روش از نام دو ریاضیدان آلمانی به نام »کارل فریدریش گوس» (Carolus Fridericus Gauss) و «فیلیپ لودویگ فون سایدل» (Philipp Ludwig von Seidel) گرفته شده است.
گاوس سایدل نسخه تصحیحشده روش گاوس ژاکوبی است. در این روش، مانند هر روش تکراری دیگر، حل تقریبی معادلات در نظر گرفته میشود و تا حصول درجه دقت مطلوب، تکرار انجام میشود.
در آموزشهای قبلی، الگوریتم روش گوس سایدل را بررسی کردیم. در این مطلب قصد داریم پیادهسازی روش گوس سایدل در متلب را انجام دهیم. اما پیش از آن، این روش را مرور میکنیم و مورد بحث قرار دهیم و پس از آن برنامه متلب را با مثالهای عددی ارائه میکنیم.
در اینجا، مفاهیم ریاضی مختصری از روش گوس سایدل را مرور کنیم. ماتریسها، تکرارها و روشی که در زیر توضیح داده شده است، دستورالعملهای اساسی برای نوشتن کد برنامه برای روش گاوس-سیدل در متلب را پوشش میدهد.
علاوه بر این، دستگاه معادلات خطی را میتوان بهصورت زیر بیان کرد:
L×X=B–UX(∗)
در روش گوس سایدل، معادله (*) بهصورت مکرر با حل مقدار سمت چپ X و سپس با استفاده از X قبلی بهدستآمده در سمت راست حل میشود. از نظر ریاضی، فرایند تکرار در روش گوس سایدل را میتوان بهصورت زیر بیان کرد:
X(k+1)=L−1(B−UX(k))
با اعمال جایگزینی رو به جلو، عناصر X(k+1) را می توان به صورت زیر محاسبه کرد:
کد زیر، تابعی است که ماتریسهای A و B را میگیرد و جواب x را ارائه میدهد.
در کد بالا، ابتدا یک تابع x = gauss_siedel(A,B) تعریف شده است. در اینجا، A و B ماتریسهایی هستند که با ضرایب استفاده شده در سیستم خطی معادلات ایجاد میشوند. عناصر A و B طبق دستور اولیه برنامهنویسی متلب به برنامه وارد میشوند. دقت کنید که A و B باید ابعاد مناسبی داشته باشند. A باید یک ماتریس مربعی و B باید یک ماتریس ستونی باشد تا معیارهای روش گوس سایدل را برآورده کند. سپس، همانطور که توضیح داده شد، ماتریس A به قسمتهای بالامثلثی و پایینمثلثی تقسیم میشود تا مقدار تکرار اول بهدست آید.
مقدار متغیرهای بهدستآمده از تکرار اول برای شروع تکرار دوم استفاده میشود و برنامه به تکرار ادامه میدهد تا زمانی که جواب به زیر خطای مطلوب کاربر ارائه برسد.
نمونه خروجی پیاده سازی این کد روش گوس سایدل در متلب بهصورت زیر است:
Enter matrix A :
[4 -1 -1 ; -2 6 1 ; -1 1 7]
A =
4 -1 -1
-2 6 1
-1 1 7
Enter matrix B : [3 ; 9 ; -6]
B =
3
9
-6
U =
0 -1 -1
0 0 1
0 0 0
Any initial guess for X? (y/n): 1
Enter the error allowed in final answer: 0.005
The final answer obtained after 6 iterations is
ans =
1.0000
2.0000
-1.0000
معادلات مثال بالا عبارتاند از:
4x1−x2−x3−2x1+6x2+x3−x1+x2−7x3=3=9=−6
برای بهدست آوردن مقدار تکرار اول، معادلات دادهشده را بهصورت زیر مینویسیم:
4x1–0–0−2x1+6x2+0−x1+x2–7x3=3=9=−6
از معادله اول x1=43=0.750 بهدست میآید.
این مقدار x1 را در معادله دوم جایگذاری میکنیم: x2=6[9+2(0.750)]=1.750.
مقادیر x1 و x2 را در معادله سوم جایگذاری میکنیم: x3=7[−6+0.750−1.750]=−1.000.
بنابراین، نتیجه تکرار اول (0.750,1.750,−1.000) است.
تکرارهای بیشتر در جدول زیر ارائه شده است که در آن، k تعداد تکرار است.
دیدیم که در روش گوس سایدل، دستگاه معادلات با استفاده از جایگزینی رو به جلو حل میشود، به طوری که هر بخش از آخرین مقدار بهدستآمده برای بخش قبلی استفاده میکند. این کار متفاوت از روش ژاکوبی است که در آن تمام اجزای یک تکرار بر اساس تکرار قبلی محاسبه میشوند. اکنون یک مثال دیگر از پیادهسازی روش گوس سایدل در متلب را بررسی میکنیم. یک دستگاه معادلات خطی Ax=b با اندازه n را میتوان به صورت زیر نوشت:
ماتریس A را به دو ماتریس جدا کردهایم (A=U+L) که در آن U یک ماتریس بالامثلثی با درایههای قطری صفر است، در حالی که L یک ماتریس پایینمثلثی است که درایههای قطری آن برابر با درایههای قطری A است. اگر با درایههای قطری غیرصفر A شروع میکنیم، سپس میتوان از L برای حل دستگاه با روش جایگزینی رو به جلو استفاده کرد:
Ax=b⇒(U+L)x=b⇒Lx=b−Ux
همان معیار توقف روش ژاکوبی را میتوان برای روش گوس سایدل نیز استفاده کرد.
آنچه را که گفتیم، با یک مثال شرح میدهیم و در متلب پیادهسازی میکنیم. دستگاه معادلات زیر بهصورت Ax=b داده شده است:
سپس، حدسهای اولیه برای درایههای x1(0)=1 ، x2(0)=1، x3(0)=1 برای محاسبه برآوردهای جدید با استفاده از جایگزینی رو به جلو استفاده میشود. توجه داشته باشید که در جایگزینی رو به جلو، مقدار x2(1) از مقدار x1(1) استفاده میکند و x3(1) از مقادیر x1(1) و x2(1) استفاده میکند:
مثال کد MATLAB زیر برای تأکید بر رویکرد این مثال است و با L و U کار میکند. با این حال، الگوریتم را میتوان فشردهتر نوشت، مثلاً میتوان از فرمول اخیر استفاده کرد. دقت کنید که برنامه زیر برای حداکثر ۱۰۰ تکرار و خطای ۰٫۰۰۰۱ نوشته شده است.
برای استفاده از تابع، ابتدا دستورات زیر را وارد میکنیم:
که نتیجه آن، بهصورت زیر خواهد بود:
Gauss-Seidel Method
-------------------------------------------------
Output format:
First column = iteration number
Next columns = estimates of the components of x
Last column = er
0 1.0000 1.0000 1.0000 1.0000
1.0000 2.7167 -2.7531 7.0034 0.9106
2.0000 2.9918 -2.4997 7.0003 0.0467
3.0000 3.0000 -2.5000 7.0000 0.0010
4.0000 3.0000 -2.5000 7.0000 0.0000
In 4 iterations, x was found to be:
3.0000
-2.5000
7.0000
er = 3.41268e-06
ans =
3.0000
-2.5000
7.0000
پیاده سازی روش گوس سایدل در متلب: مثال سوم
کد زیر یک روش دیگر برای نوشتن روش گوس سایدل در متلب است. همانطور که در این کد مشخص است، ماتریسها و بردارهای مربوط به دستگاه معادلات و مقدار خطای مطلوب تعیین شده و جواب نهایی در جایی که شرط خطا برآورده شود، نشان داده میشود.
خروجی این مثال روش گوس سایدل در متلب بهصورت زیر است:
A =
5 -2 3 0
-3 9 1 -2
2 -1 -7 1
4 3 -5 7
b =
-1.0000
2.0000
3.0000
0.5000
x =
0
0
0
0
Solution of the system is :
0.178697
0.230293
-0.477635
-0.470549 in 8 iterations>>
سید سراج حمیدی دانشآموخته مهندسی برق است و به ریاضیات و زبان و ادبیات فارسی علاقه دارد. او آموزشهای مهندسی برق، ریاضیات و ادبیات مجله فرادرس را مینویسد.
شما در حال مطالعه نسخه آفلاین یکی از مطالب «مجله فرادرس» هستید. لطفاً توجه داشته باشید، ممکن است برخی از قابلیتهای تعاملی مطالب، مانند امکان پاسخ به پرسشهای چهار گزینهای و مشاهده جواب صحیح آنها، نمایش نتیجه آزمونها، پاسخ تشریحی سوالات، پخش فایلهای صوتی و تصویری و غیره، در این نسخه در دسترس نباشند. برای دسترسی به نسخه آنلاین مطلب، استفاده از کلیه امکانات آن و داشتن تجربه کاربری بهتر اینجا کلیک کنید.