روش گوس سایدل در متلب از صفر تا صد و نکات کاربردی

رتبه: 0 ار 0 رای sssss
گاوس سایدل
نویسنده: تیم تولید محتوا زمان مطالعه 6 دقیقه

روش گوس سایدل یا گاوس سایدل (Gauss-Seidel) یکی از انواع روشهای تکراری (Iterative) رایج برای حل دستگاه معادلات خطی جبری است. این روش را می توان روی هر ماتریس همگرا با عناصر غیر صفر بر روی مورب ها اعمال کرد. نام روش گوس سایدل از نام دو ریاضیدان آلمانی به نام های کارل فردریش گاوس (Carl Friedrich Gauss) و فیلیپ لودویگ فون سایدل (Philipp Ludwig von Seidel) گرفته شده است.

در واقع گوس سایدل روش پیشرفته تر و نسخه ارتقا یافته روش گوس ژاکوبی (Gauss Jacobi) محسوب می شود. در این روش هم درست مثل هر روش تکراری دیگری، معادلات داده شده به صورت تقریبی حل می شوند و تا زمان حصول میزان دقت مطلوب، تکرار انجام می شود.

حتما بخوانید: دانلود رایگان ۱۳ فیلم کاربردی آموزش شبکه عصبی در متلب

در این مطلب ما قصد داریم یک کد برنامه به روش گوس سایدل در متلب (MATLAB) بنویسیم و در کنار آن پیشینه نظری این روش را مورد بررسی قرار بدهیم و در نهایت، نتیجه برنامه متلب را با یک مثال عددی تجزیه و تحلیل کنیم.

 

نظریه روش گوس سایدل

اول از همه بهتر است نگاه مختصری به پیشینه نظری/ ریاضی روش گوس سایدل داشته باشیم. ماتریس ها، تکرارها و روشی که در ادامه به آن اشاره می کنیم دستورالعمل های پایه و اولیه برای نوشتن کد برنامه برای روش گوس سایدل در متلب هستند.

دستگاه معادلات خطی زیر را در نظر بگیرید:

a11x+ a12x+ a13x3 + a14x4 + a15x+ a16x6 ……. + a1nx= b1
a21x+ a22x+ a23x3 + a24x4 + a25x+ a26x6 ……. + a2nx= b2
a31x+ a32x+ a33x3 + a34x4 + a35x+ a36x6 ……. + a3nx= b3
. . . . . . . . . . . . . .  . . . . . . . . .   . . . . . . .  . ….. . . . . . . . ..  . . . . . . . . . . . . ..  . . .. .  . .
. . . . . . . . . . . . . .  . . . . . . . . .   . . . . . . .  . ….. . . . . . . . ..  . . . . . . . . . . . . ..  . . .. .  . .
an1x+ an2x+ an3x3 + an4x4 + an5x+ an6x6 ……. + annx= bn

در این دستگاه aij نشان دهنده ضریب عبارات مجهول xi است.

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

Gauss-Seidel method in MATLAB - Matrix Form

یا اینکه آن را به صورت نوشتاری به شکل [A][X] = [B] در آورد.

حالا با تجزیه ماتریس A به جزء پایین مثلثی و بالا مثلثی این نتیجه را به دست می آوریم:

A = L x U

که در آن:

Gauss-Seidel method in MATLAB - Lower and Upper Triangular Matrix

همچنین این دستگاه معادلات خطی را می توان به صورت زیر هم بیان کرد:

L x X = B – UX     —–(a)

در روش گوس سایدل، معادله (a) با حل مقدار سمت چپ x به صورت تکراری و سپس استفاده از مقدار x به دست آمده برای حل سمت راست معادله، حل می شود.

دانلود کنید: ۷ درس کاربردی آموزش برنامه نویسی در متلب

فرایند تکرار در روش گوس سایدل را از لحاظ ریاضی می توان به صورت زیر نوشت:

X(k+1) = L -1( B –UX(k) )

با استفاده از روش جایگزینی رو به جلو (forward substitution)، عناصر X(k+1) را می توان به صورت زیر محاسبه کرد:

Gauss-Seidel method in MATLAB - Forward Substitution

در برنامه متلب نیز همین روال بالا برای این روش استفاده می شود. روند تکرار تا زمانی ادامه می یابد که تغییرات در مقادیر مجهول (x) قابل اغماض و چشم پوشی باشند و یا اینکه به یک میزان خطای تعیین شده دست پیدا کنیم.

روش گوس سایدل در متلب

% Gauss-Seidel Method in MATLAB

function x = gauss_siedel( A ,B )

disp ( ‘Enter the system of linear equations in the form of AX=B’)

%Inputting matrix A

A = input ( ‘Enter matrix A : n’)

% check if the entered matrix is a square matrix

[na , ma ] = size (A);

if na ~= ma

disp(‘ERROR: Matrix A must be a square matrix’)

return

end

% Inputting matrix B

B = input ( ‘Enter matrix B : ‘)

% check if B is a column matrix

[nb , mb ] = size (B);

if nb ~= na || mb~=1

disp( ‘ERROR: Matrix B must be a column matrix’)

return

end

% Separation of matrix A into lower triangular and upper triangular matrices

% A = D + L + U

D = diag(diag(A));

L = tril(A)- D;

U = triu(A)- D

% check for convergence condition for Gauss-Seidel method

e= max(eig(-inv(D+L)*(U)));

چرب زبان

متلب رو قورت بده! بدون کلاس، سرعت 2 برابر، ماندگاری 3 برابر، حل ساده سخت ترین پروژه ها، شبیه سازیها و مسائل، فوق العاده پولساز، خرید و دانلود!

if abs(e) >= 1

disp (‘Since the modulus of the largest Eigen value of iterative matrix is not less than 1’)

disp (‘this process is not convergent.’)

return

end

% initial guess for X..?

% default guess is [ 1 1 …. 1]

r = input ( ‘Any initial guess for X? (y/n): ‘,’s’);

switch r

case ‘y’

% asking for initial guess

X0 = input(‘Enter initial guess for X :n’)

% check for initial guess

[nx, mx] = size(X0);

if nx ~= na || mx ~= 1

disp( ‘ERROR: Check input’)

return

end

otherwise

X0 = ones(na,1);

end

% allowable error in final answer

t = input ( ‘Enter the error allowed in final answer: ‘);

tol = t*ones(na,1);

k= 1;

X( : , 1 ) = X0;

err= 1000000000*rand(na,1);% initial error assumption for looping

while sum(abs(err) >= tol) ~= zeros(na,1)

X ( : ,k+ 1 ) = -inv(D+L)*(U)*X( : ,k) + inv(D+L)*B;% Gauss-Seidel formula

err = X( :,k+1) – X( :, k);% finding error

k = k + 1;

end

fprintf (‘The final answer obtained after %g iterations is n’, k)

X( : ,k)

در برنامه متلب بالا، ابتدا یک تابع  x = gauss_siedel( A ,B ) تعریف شده است. در اینجا، A و B ماتریس هایی هستند که با ضرایب استفاده شده در دستگاه معادلات خطی ساخته می شوند. عناصر A و B طبق دستور پایه برنامه نویسی متلب به برنامه وارد می شوند.

حتما بخوانید: آموزش نکات پایه ای و مهم سیمولینک در نرم افزار متلب

A و B باید بررسی شوند: A باید یک ماتریس مربع و B باید یک ماتریس ستونی باشد تا با معیارهای روش گوس سایدل مطابقت داشته باشند. سپس همانطور که قبلا توضیح دادیم، ماتریس A به جزء پایین مثلثی و بالا مثلثی تجزیه می شود تا مقدار تکرار اول به دست بیاید.

برای شروع تکرار دوم از مقدار متغیرهای بدست آمده از تکرار اول استفاده می شود و برنامه تا زمانی که به راه حل مطلوب کاربر برسد به تکرار ادامه می دهد.

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

Gauss-Seidel method in MATLAB - Output

مثالی از روش گوس سایدل

ما اینجا برنامه متلب بالا که به روش گوس سایدل بود را به صورت ریاضی حل کرده ایم. معادلات داده شده عبارتند از:

4x1 – x2 –x3 = 3
-2x+ 6x2 + x3 = 9
-x1 + x2 – 7x3 = -6

برای بدست آوردن مقدار تکرار اول، معادلات داده شده را به صورت زیر بیان می کنیم:

4x1 – 0 –0 = 3
-2x+ 6x2 + 0 = 9
-x1 + x2 – 7x3 = -6

از معادله اول داریم: x1 = 3/4 = 0.750

مقدار x1 را در معادله دوم جایگزین می کنیم:  x2 = [9 + 2(0.750)] / 6 = 1.750

مقادیر x1 و x2 را در معادله سوم جایگزین می کنیم: x3 = [-6 + 0.750 − 1.750] / 7 = − 1.000

بنابراین نتیجه تکرار اول خواهد بود: (0.750, 1.750, -1.000)

کل فرایند تکراری که در روش گوس سایدل (و برنامه متلب فوق) ادامه دارد در اینجا آورده شده است:

Gauss Seidel method in Matlab - Iteration

که در آن k تعداد تکرار است.

راه حل نهایی به دست آمده نیز (1.000, 2.000, -1.000) است.

معرفی نرم افزار متلب (۴ کاربرد اصلی و ۳ نقطه قوت)

اگر هنوز هم سوالی درباره روش گوس سایدل یا برنامه متلب دارید، آن را در بخش نظرات همین پست با ما در میان بگذارید.

profile name
تیم تولید محتوا

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

مطالب پیشنهادی برای شما

محصولات مرتبط

مشاهده همه

دیدگاهتان را بنویسید

1 2 3 4 5

0 نظر درباره «روش گوس سایدل در متلب از صفر تا صد و نکات کاربردی»

    هنوز نظری برای این بخش ثبت نشده است
مشاهده همه نظرات
سبد خرید
سبد خرید شما خالی است
× جهت نصب روی دکمه زیر در گوشی کلیک نمائید
آی او اس
سپس در مرحله بعد برروی دکمه "Add To Home Screen" کلیک نمائید