المحتوى هنا ينقصه الاستشهاد بمصادر، أي معلومات غير موثقة يمكن التشكيك بها وإزالتها.
يرجى إضافة وصلات داخلية للمقالات المتعلّقة بموضوع المقالة.

حذف غاوس-جوردان

من ويكيبيديا، الموسوعة الحرة
اذهب إلى: تصفح، ‏ ابحث
Question book-new.svg
المحتوى هنا ينقصه الاستشهاد بمصادر. يرجى إيراد مصادر موثوق بها. أي معلومات غير موثقة يمكن التشكيك بها وإزالتها. (فبراير 2016)
Arwikify.svg
هذه المقالة تحتاج للمزيد من الوصلات للمقالات الأخرى للمساعدة في ترابط مقالات الموسوعة. فضلًا ساعد في تحسين هذه المقالة بإضافة وصلات إلى المقالات المتعلقة بها الموجودة في النص الحالي. (مارس 2015)

في الجبر الخطي، يعتبر حذف غاوس-جوردان نسخة عن الحذف الغاوسي والذي يضع أصفارا فوق وتحت عنصر المحور عندما يتحرك من أعلى صف في المصفوفة المعطاة إلى الأسفل. أي أنه يعيد المصفوفة إلى الصورة المثلثية.

تعود التسمية إلى كارل فريدريك غاوس ووليام جوردان.

تطبيقات إيجاد المعكوس[عدل]

يمكن استعمال حذف غاوس-جوردان في المصفوفة المربعة لحساب معكوسها كما يلي.

إذا كانت المصفوفة المربعة الأصلية, , معطاة بالتعبير:

حينئذ يمكن بالاستعانة بمصفوفة الوحدة الحصول على:

وبتطبيق عمليات الصف الأساسية على المصفوفة حتى تصل صورة الصف المخفض يمكن في النهاية الحصول على النتيجة:

والان بعكس الوسيط, يمكن الحصول على:

c++ code for matrix inverse[عدل]

#include <cstdlib>
double** gauss(double **matrix, int diminsion)
{
    double **inverse;
    inverse = (double**) malloc(diminsion * sizeof (double *));
    for (int i = 0; i <diminsion; i++)
        inverse[i] = (double*) malloc(diminsion * sizeof (double));

    for (int i = 0; i <diminsion; i++)
        for (int j = 0; j <diminsion; j++)
            inverse[i][j] = 0;

    for (int i = 0; i <diminsion; i++)
        inverse[i][i] = 1;

    for (int k = 0; k <diminsion; k++)
    {
        for (int i = k; i <diminsion; i++)
        {
            double val = matrix[i][k];
            for (int j = k; j <diminsion; j++)
                matrix[i][j] /= val;
            for (int j = 0; j <diminsion; j++)
                inverse[i][j] /= val;
        }
        for (int i = k + 1; i <diminsion; i++)
        {
            for (int j = k; j <diminsion; j++)
                matrix[i][j] -= matrix[k][j];
            for (int j = 0; j <diminsion; j++)
                inverse[i][j] -= inverse[k][j];
        }
    }

    for (int i = diminsion - 2; i>= 0; i--)
    {
        for (int j = diminsion - 1; j> i; j--)
        {
            for (int k = 0; k <diminsion; k++)//this part can be can canceled (the two lines)
                inverse[i][k] -= matrix[i][j] * inverse[j][k]; //
            for (int k = 0; k <diminsion; k++)//this part can be can canceled (the two lines)
                matrix[i][k] -= matrix[i][j] * matrix[j][k]; //
        }
    }
    return inverse;
}
Nuvola apps edu mathematics-ar.svg
هذه بذرة مقالة عن الرياضيات بحاجة للتوسيع. شارك في تحريرها.