روش حذفی گوس با محوریت نسبی

Partial Pivoting Gauss Elimination
حل دستگاه معادلات خطی به روش مستقیم
معرفی

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

در معرفی روش حذفی گوس، بیان شد هنگامی که درایه ی لولا در ماتریس افزوده ی ضرایب، a_{ii}، صفر باشد سطر آن را با سطر دیگری که درایه ی آن در ستون i  ام غیر صفر باشد جابجا می کنیم و آن را به شکل (E_i)leftright(E_p) نمایش می دهیم. در اینجا p شماره ی اولین سطر بعد از سطر i است که درایه ی a_{pi} در آن غیر صفر است.

برای کاهش خطای ناشی از گردکردن و استفاده از تعداد محدود رقم اعشار، لازم است که عملیات جابجایی سطرها را حتی زمانی که المان لولا مقداری غیر صفر دارد نیز انجام دهیم. اگر a_{ii} در مقایسه با a_{ki} مقداری کوچک داشته باشد (قدر مطلق آن کوچک باشد)، آنگاه مقدار ضریب m_{mi}

m_{ki} = a_{ki}/a_{ii}

بسیار بزرگتر از 1 خواهد شد. بنابراین مقدار خطای گرد کردن در محاسبه ی هر کدام از درایه های سطر i ام در عدد m_{ki} ضرب خواهد شد. همچنین در جایگذاری بازگشتی (backward substitution) و محاسبه ی مقدار x_{i} به علت وجود a_{ii} در مخرج که عدد کوچکی است، خطای گردکردن بخاطر کوچک بودن مخرج به طرز محسوسی افزایش خواهد یافت.

برای جلوگیری از بروز این مشکل، از تکنیک لولاگیری یا محورگیری (pivoting) استفاده می گردد. به این طریق که در انتخاب المان لولا، المان a_{pi} که مقدار قدر مطلق آن از a_{ii} بزرگتر است و همچنین در ستون i ام بزرگترین مقدار را دارد به عنوان المان لولا انتخاب کنیم و سطر i ام را با سطر i ام جابجا نماییم:

(E_i)leftright(E_p)

به این تکنیک لولاگیری یا محوریت نسبی (Partial pivoting) می گویند.

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

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

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

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

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

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

    ورودی:

    1. ماتریس ضرایب دستگاه معادلات خطی Ax=b
    2. بردار ثابت b در دستگاه Ax=b به شکل [b1 ;b2 ;…;bn] (ماتریس افزوده ی A که از به هم پیوستن بردار b و ماتریس A ایجاد می گردد در خود برنامه ساخته می شود و نیازی به دادن آن در ورودی نیست)

    خروجی:

    1. نمایش کامل عملیات ها و محاسبات لازم در روند حل روش حذفی گوس
    2. محاسبه و نمایش پاسخ نهایی

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

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

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

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