# الخوارزميات: حل جملة معادلات خطية بطريقة غوص (شرح، مثال، برنامج)



## عبد الجواد (29 مايو 2010)

كنت قد بدأت في شرح خوارزمية لحل الجوائز الشبكية المستوية Truss على هذا الرابط:
http://www.arab-eng.org/vb/t167083.html

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

كما أود أن أنوه أيضاً إلى أنني وضعت مشاركة سابقة تشرح كيفية حل مجموعة معادلات خطية (عدد المعادلات يساوي عدد المجاهيل) باستخدام إكسل على هذا الرابط:
http://www.arab-eng.org/vb/t99589.html#post817324

كما كنت قد بدأت منذ مدة بشرح بعض الخوارزميات على هذين الرابطين:
http://www.arab-eng.org/vb/t28998.html
http://www.arab-eng.org/vb/t29253.html

وهذا الموضوع هو استمرار للموضوعين السابقين، وبسم الله أبدأ.
​


----------



## عبد الجواد (29 مايو 2010)

خوارزمية حل جملة معادلات خطية (عدد المعادلات يساوي عدد المجاهيل) باستخدام طريقة الحذف لغوص:

لنفرض أنه لدينا جملة المعادلات التالية:






ونريد إيجاد قيم المجاهيل x1 و x2 و x3

سنسمي المصفوفة التالية مصفوفة الأمثال:





وسنسمي المصفوفة التالية مصفوفة الأمثال الموسعة:





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

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

ملاحظة: نقول أن مصفوفة الأمثال شاذة إذا كان معينها (محددها) يساوي الصفر.

وقبل البدء سأذكّر بالتحويلات الأولية التي يمكننا تطبيقها على جملة المعادلات بحيث نحصل على جملة معادلات مكافئة، أي لها نفس الحل، وهذه التحويلات هي:
1- تبديل معادلتين: وهذا واضح أنه لا يغير الحل
2- ضرب طرفي معادلة بعدد لا يساوي الصفر: إذا كان لدينا طرفان متساويان فإنه بضرب كل طرف بنفس العدد سنحصل أيضاً على طرفين متساويين.
3- إضافة معادلة مضروبة بعدد إلى معادلة ثانية: أيضاً إذا كان لدينا طرفان متساويان وأضفنا إلى كل طرف عدداً ما نحصل على طرفين متساويين.

مبدأ طريقة التحويلات لغوص:

إن مبدأ الطريقة هو تحويل جملة المعادلات السابقة إلى جملة معادلات مكافئة بالشكل التالي:





أي تحويل جملة المعادلات إلى شكل مثلثي يسهل معه حساب قيم المتحولات.

ففي جملة المعادلات المكافئة، من المعادلة الثالثة نحصل على x3 بسهولة، ونعوضها في المعادلة الثانية لنحصل على x2 ونعوض القيمتين في المعادلة الأولى لنحصل على x1.

إجراء التحويلات:

إذا قسمنا المعادلة الأولى من جملة المعادلات الأولى على a11 (بفرض a11 لا يساوي الصفر) وضربناها ب a21 ثم طرحناها من المعادلة الثانية (أي طبقنا التحويل الثالث على المعادلة الثانية)، ونفس الشيء فعلناه مع المعادلة الثالثة أي قسمنا الأولى على a11 وضربناها ب a31 ثم طرحناها من الثالثة فإننا نحصل على جملة المعادلات المكافئة التالية:





إن الرقم بين قوسين فوق الحد يدل على رقم عملية التحويل.

أي أننا بهذه العملية اختصرنا الحد الأول من المعادلتين الثانية والثالثة، وسنسمي الحد a11 محور المعادلة رقم 1.

ويمكننا ترجمة ذلك بشكل رمزي كما يلي:





ولكن ماذا لو كان a11=0؟
نقوم عندها بتبديل المعادلة الأولى مع أي من المعادلات التي تليها بحيث يكون الحد ai1 لا يساوي الصفر حيث i هو رقم السطر.

فإن لم نجد، وكانت كلها تساوي الصفر؟
عندها نحكم أن مصفوفة الأمثال شاذة وليس لجملة المعادلات حل وحيد، والسبب أن إحدى المعادلات (أو أكثر) مرتبطة خطياً بمعادلات أخرى.

نعود إلى جملة المعادلات الأخيرة وسنحاول حذف (a32(1 الجديد من المعادلة الثالثة.

نكرر العملية بأن ننسى المعادلة الأولى وتصبح لدينا المعادلتين الثانية والثالثة بمجهولين، أي أننا نقسم المعادلة الثانية (الجديدة) على محورها وهو (a22(1 ونضربها ب (a32(1 ونجمعها إلى الثالثة فنحصل على جملة المعادلات المكافئة التالية:





ونترجم ذلك بشكل رمزي كما يلي:





وهكذا حذفنا الحد الثاني أيضاً من المعادلة الثالثة.

الآن يمكننا حساب المجاهيل بسهولة كما يلي:





أي بشكل رمزي:





تعميم الحالة على n معادلة:

إن عمليات التحويل تصبح بالشكل:





أي أنه لدينا ثلاث حلقات متداخلة:
1- الحلقة الأولى هي حلقة k وتبدأ من 1 وحتى n-1 وفيها نختار المحور akk
2- الحلقة الثانية وهي ضمن الأولى وهي حلقة i وتبدأ من السطر الذي يلي سطر المحور k، أي تبدأ من k+1 وتنتهي في السطر n، وهي تمثل السطر الذي سنقوم بعملية التحويل له.
3- الحلقة الثالثة وهي ضمن الثانية وهي حلقة j وتبدأ من رقم العمود الذي يلي رقم عمود المحور وهو k، أي تبدأ من k+1 وتنتهي في آخر عمود وهو n+1، على اعتبار أن كل العناصر في السطر i قبل العمود k+1 تساوي الصفر.

ملاحظة: فرضنا أن akk لا تساوي الصفر، فإن كانت كذلك نقوم بتبديل السطر k بسطر آخر يليه بحيث يكون akk الجديد لا يساوي الصفر، فإن لم يوجد قلنا أن جملة المعادلات لا تملك حلاً وحيداً، كما وضحنا ذلك سابقاً.

ملاحظة2: سيتم توضيح هذه الحلقات في البرنامج لاحقاً.

أما تفسير علاقة حساب aij فهي:
إن قيمة aij الجديدة تساوي قيمتها القديمة التي حصلنا عليها من الحساب السابق مطروحاً منها (قيمة a في نفس عمودها في سطر العنصر المحور مضروبة في قيمة a في نفس سطرها في عمود العنصر المحور ومقسومة على العنصر المحور) أي كما في الشكل:





أما حساب x في الحالة العامة فهو بالشكل:





وهنا لدينا حلقتان متداخلتان:
1- الأولى هي حلقة i وتبدأ من n وتنتهي ب 1، وهي تدل على رقم المجهول المراد حساب قيمته.
2- حلقة ضمنها وهي حلقة j وهي تستخدم للجمع، وتبدأ من i+1 وتنتهي ب n

أرجو أن يكون الشرح واضحاً، وسيتوضح أكثر إن شاء الله عند حل مثال، وأكثر عند ترجمة الخوارزمية إلى برنامج حاسوبي إن شاء الله.​


----------



## عبد الجواد (29 مايو 2010)

مثال يدوي:

المطلوب حل جملة المعادلات التالية:






الحل:

نقوم أولاً بتشكيل مصفوفة الأمثال الموسعة:






نجري التحويلات الأولى على اعتبار أن العنصر المحور هو العنصر في السطر والعمود الأول وهو الرقم 4.






في الشكل السابق، الطرف الأيسر يدل على التحويلات التي قمنا بها، حيث L يدل على السطر.
قمنا في هذه التحويلات بحذف أمثال x1 من جميع المعادلات التي تحت السطر رقم 1.

نلاحظ أن المحور هو العنصر الأول في السطر الأول وهو الرقم 4 والذي قمنا به أننا طرحنا من كل سطر (بعد سطر المحور)، طرحنا منه السطر الأول (سطر المحور) مقسوماً على المحور (الرقم 4) مضروباً بالعنصر الذي في نفس السطر الذي نريد إجراء التحويل عليه والموجود أيضاً في نفس عمود المحور.

فمثلاً العنصر في السطر الثاني والعمود الرابع من جملة المعادلات الأساسية وهو -4 ، نجري عليه التحويل المبين أعلاه كما يلي:


```
L2 = L2 - 1/4 * L1 => -4 – 1/4 * 5 = -5.25
```

قد يبدو الكلام معقداً، ولكن بالعودة إلى الشكل السابق والنظر إلى التحويلات وبالتأكد يدوياً يمكن فهم الفكرة بسهولة.

نعيد نفس الكرة، ونحذف أمثال x2 في المعادلات التي تلي المعادلة الثانية، وفي هذه الحالة نعتمد جملة المعادلات الأخيرة ويكون المحور هو العنصر الموجود في السطر الثاني والعمود الثاني وهو 1.75






نعيد نفس الكرة، ونحذف أمثال x3 في المعادلات التي تلي المعادلة الثالثة، وفي هذه الحالة نعتمد جملة المعادلات الأخيرة ويكون المحور هو العنصر الموجود في السطر الثالث والعمود الثالث وهو 3.1429







الآن فإن حل جملة المعادلات الأصلية هو نفسه حل جملة المعادلات الأخيرة المكافئة لها، ونبدأ بإيجاد x4 ثم x3 وهكذا:







وهو الحل المطلوب، ويمكن التأكد بالتعويض في جملة المعادلات الأساسية أو أي جملة معادلات مكافئة.

سأترك الآن المجال مفتوحاً للأسئلة ريثما أنتهي من كتابة البرنامج إن شاء الله.​


----------



## خالد الأزهري (29 مايو 2010)

السلام عليكم ورحمة الله وبركاته
بانتظار البرنامج استاذ عبد الجواد...أظن انه اصبح من اللازم تنزيل اللغة المستخدمة فهل هناك نسخة من الQbasic تنصحون بها؟ أستخدم ويندوز 7
بالنسبة لموضوع اليوم هناك فكرة اخرى لتطبيق طريقة جاوس Gauss وفكرتها تحويل مصفوفة الامثال الى مصفوفة الوحدة وبالتالي يكون العمود الأخير هو الحل مباشرة بدلا من أن تكون مصفوفة مثلثية عليا ومن ثم نتحصل على الحل بالتعويض العكسي من الاسفل...
برمجيا يمكن الحصول على الفكرة الاولى بتحريك حلقة أوامر التصفير loop (وهي الحلقة الثانية كما فهمت) من البداية يعني من اول معادلة بدلا من اسفل المعادلة قيد النظر ( المعادلة k) مع استثنائها نفسها من العملية حتى لا تتحول هي الاخرى الى صفر...أرجو ان تكون الفكرة واضحة..أما الفكرة الثانية فهي الطريقة المتبعة في شرحكم 
سؤالي استاذنا على اي اساس نقوم بالتفضيل بين الطريقتين...أو بمعنى اخر كيف نفاضل بين الطريقتين من حيث الكفاءة...؟


----------



## مصطفى المطني (29 مايو 2010)

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


----------



## محمود الصقار (30 مايو 2010)

السلام عليكم و رحمة الله و بركاته

لا أملك سوى أن أدعو لأخينا و أستاذنا المهندس عبد الجواد بالتوفيق

و أتكلم فى 3 نقاط

1- بالنسبة لأخينا المهندس خالد الأزهرى : فقد أوضح أن هناك طريقة أخرى لبرمجة حل معادلات فى مجاهيل بنفس طريقة gaus elimination , و لعل أستاذنا الدكتور عاطف العراقى قد تناولها فى شرحه لل qb 
و هى تعتمد على إبقاء فقط المتغير (المتحول) و معامله يساوى واحد - مصفوفة الوحدة- , أى قمنا بتصفية المعادلات ليصبح فقط x1=1
x2=2
x3=3
x4=4

و لكن أنا سعيد جدا بهذه الطريقة , التى أضافت لى كثيرا عند قرأة أى برنامج , و سعيد أكثر بالشرح الأكثر من رائع لأستاذنا المتميز مهندس عبد الجواد - الذى يثبت كل يوم أنه يعرفه فلسفة الحل - ليس الحل فقط, فجزاه الله عنا خيرا

2 - النقطة الثانية : و التى أعتقد أننى الأن بها فهمت فلسفة ال unstability -إلى حد كبير-و هى وجود معادلة لا تفيد - مكررة أو مضاعفات أحد المعادلات الأخرى- , و لم أقرأها قبل ذلك , و قبلها تحاول تبديل معادلتين لتتأكد أن كل المعادلات لا تحتوى هذا المتغير , أذن فهو مجهول زيادة 

3- أما طريقة شرحك للإلتفافات فهى أكثر من رائعة

فجزاك الله عنا كل خير

محمود الصقار


----------



## عبد الجواد (30 مايو 2010)

السلام عليكم:

أشكر الجميع على المشاركة، وإغناء الموضوع بمزيد من المعلومات والتساؤلات.

والإجابة عن التساؤلات المطروحة من قبل الأستاذ خالد:
1- أنصحك بلغة برمجة حديثة مثل VB.Net أو #C أو لغة أقدم مثل VB6، أما QB فلا أنصحك بها، وإن كنت أحياناً أشرح فكرة ما عن طريق هذه اللغة فلإيضاح الفكرة ليس إلا.
وبالنسبة للبرنامج هنا سأكتبه بلغة VB6 إن شاء الله، مع العلم أنه يمكن تطبيقه على VB.Net و تعديله بسهولة ليعمل على VB5 و QB.
وبما أنك تستخدم ويندوز 7 فعليك ب VB2008 Express وهي مجانية (وهي نفسها VB.Net ولكنها إصدار 2008) أو استخدام لغة VBA، وهي نفسها VB6 ولكنها مدمجة مع برامج مايكروسوفت وأوتوكاد وبرامج أخرى.
وإن كنت تفضل لغة C فعليك ب C#2008 Express وهي مجانية أيضاً.

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

أما كيف أفضل طريقة على أخرى، فهو بعدد العمليات الحسابية التي أجريها لأصل إلى الحل.
وهنا ندخل في مجال آخر، فهناك طرق مثل كولسكي تكون أكثر فاعلية من غوص في بعض الحالات والعكس صحيح في حالات أخرى، كما أن هناك طرق خاصة من أجل المصفوفات الشريطية المتناظرة (عرض الشريط 3 مثلاً ونحصل عليها في طريقة العزوم الثلاثة مثلاً) وغيرها.

وقد اخترت هذه الطريقة هنا لأنها طريقة سهلة وعامة، ويمكن استخدامها يدوياً بسهولة، ولكن قد لا تكون الأكثر فاعلية من أجل جملة معادلات كبيرة جداً من مرتبة 10.000 معادلة مثلاً.

أما عن سؤال الأستاذ مصطفى، في الحقيقة لم أفهمه وحبذا لو وضحت بمثال.

أخ محمود شكراً لك مرة أخرى، ويسعدني متابعتك.


----------



## عبد الجواد (30 مايو 2010)

تحويل الخوارزمية إلى برنامج بلغة Visual Basic 6:

بعد أن قمنا بدراسة الخوارزمية السابقة يمكننا بسهولة تحويلها إلى أي لغة برمجة، وقد اخترت لغة Visual Basic لانتشارها الواسع أولاً، ولخبرتي فيها ثانياً!
وهنا سأستخدم لغة VBA المدمجة مع إكسل لوجودها على كل جهاز تقريباً...

وقبل البدء أنصح بشدة الرجوع إلى الموضوع التالي:
http://www.arab-eng.org/vb/t136515.html

سنقوم أولاً بإنشاء تابع اسمه EquationsGauss، نمرر له مصفوفة الأمثال الموسعة، فيعيد لنا شعاع حل المعادلات، وفي حال كانت جملة المعادلات لا تملك حلاً وحيداً، سيقوم هذا التابع بإصدار خطأ.

نضيف العبارتين التاليتين لتعريف التابع:






إن أي سطر نضيفه سيكون بين السطرين السابقين.

نلاحظ أننا قمنا بتمرير مصفوفة الأمثال الموسعة للبرنامج ومن المفيد أن نعلم عدد المعادلات.

نقوم أولاً بحجز متحول اسمه n سيدل على عدد المعادلات ثم سنستخدم التابع UBound الذي يعطينا الحد الأعلى للمصفوفة، كما يلي:






ملاحظة: إن القيمة 1 في التابع السابق UBound تعني البعد الأول للمصفوفة وهو في حالتنا عدد الأسطر.

نريد الآن ترجمة العبارة الرمزية السابقة وهي:






إلى برنامج، لذلك نقوم بتعريف المتحولات k,i,j ثم نضع الحلقات التي تم شرحها سابقاً، كما يلي:






ملاحظة: لم نقم هنا باختبار إن كانت قيمة (a(k,k تساوي الصفر وافترضناها لا تساوي الصفر، لتسهيل فهم البرنامج، وسنعالج هذا الأمر لاحقاً.

ملاحظة2: نلاحظ من البرنامج السابق أننا حددنا نوع المتحول k ثم حددنا نوع المتحول i وأيضاً المتحول j، ففي لغة Visual Basic الإصدار السادس وما قبله لا يكفي أن نكتب:


```
Dim k, i, j As Integer
```

كما في لغات البرمجة الأخرى، أما في لغة Visual Basic .Net تكفي العبارة الأخيرة.

الآن سنقوم بحساب قيم المجاهيل كما في العبارة الرمزية السابقة وهي:











نلاحظ أننا عرفنا متحولاً s من أجل حساب المجموع المبين في المعادلة، ويجب دائماً أن نجعل قيمته صفراً قبل حلقة j حتى لا يحتفظ بقيمته السابقة.

في نهاية البرنامج قمنا بإسناد قيمة x إلى EquationsGauss وهو اسم التابع، وهي خطوة ضرورية ليعلم التابع أي قيمة سيعيد.

يصبح البرنامج كله حتى هذه النقطة:






تحسين البرنامج ومعالجة الأخطاء:

قلنا أنه أحياناً يكون العنصر (a(k,k مساوياً للصفر لذلك لا يمكن التقسيم عليه، وقلنا أننا نبحث عن سطر i تحت السطر k يكون فيه (a(i,k لا يساوي الصفر، فإن وجد قمنا بالتبديل بين السطرين i و k وإلا نصدر رسالة خطأ تفيد بأن جملة المعادلات هذه لا يوجد لها حل وحيد.

إن عملية الاختبار هذه نضعها بعد السطر الذي يبدأ حلقة k وهذه العملية تتم كما يلي:






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

أيضاً نلاحظ أننا إذا وجدنا سطراً فيه (a(i,k لا يساوي الصفر نقوم بعملية التبديل، ثم نخرج من حلقة البحث i عن طريق الأمر Exit For، فإن لم نجد سيتم الخروج من الحلقة تلقائياً عندما تصل قيمة i إلى n+1 أي عندما تزيد عن الحد النهائي لها، وهكذا نختبر إن كانت قيمة i تساوي n+1 فإن جملة المعادلات لا تملك حلاً وحيداً لذلك نصدر رسالة خطأ رقمها 1000 مثلاً، عن طريق الأمر Err.Raise 1000

إن عملية التبديل تتم عن طريق تعريف متحول مؤقت tmp كما هو موضح أعلاه.

يصبح البرنامج النهائي كما يلي:






تطبيق البرنامج:

كما قلت أعلاه فإن هذا البرنامج قد كتب بلغة Visual Basic 6 وحتى يتسنى لكل من تسول له نفسه ... أقصد لكل من أراد أن يجرب البرنامج ولم يكن عنده هذه اللغة، فقد قمت بوضع البرنامج ضمن ملف Excel أي كتبته باستخدام لغة Visual Basic for Application الخاصة بإكسل وهي نسخة مصغرة من لغة Visual Basic 6.

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

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

ولاستخدامه نحتاج إلى إنشاء هذه المصفوفة، وطريقة إنشاء المصفوفة تختلف من برنامج إلى آخر.

ففي برنامج الجوائز الشبكية المشار إليه أعلاه، يقوم البرنامج بإنشاء مصفوفة الأمثال الموسعة (مصفوفة الصلابة مع الحمولات والمساند) بشكل تلقائي بناءً على نمذجة المستخدم.

أو ربما في برامج أخرى يكون الإدخال بشكل مباشر كما سنقوم الآن:

سنقوم في الخلية B2 من صفحة إكسل بإدخال عدد المعادلات، وسنقوم بإدخال مصفوفة الأمثال الموسعة ابتداءً من الخلية A3 ومن الضروري الالتزام بهذه الخلايا (إلا إذا قمنا بتعديل البرنامج).
راجع الشكل لمزيد من التوضيح.






بالضغط على زر "حساب المجاهيل" يقوم البرنامج بحساب قيمة المجاهيل وعرضها في عمود مستقل بعد مصفوفة الأمثال.

أما البرنامج خلف هذا الزر فهو:






إن الأمر ReDim يقوم بتعريف أبعاد المصفوفة أو الشعاع.

أما السطر On Error Resume Next، فهو يخبر Visual Basic بأنه في حال حصول خطأ تابع إلى الخطوة التالية وخزن رقم الخطأ في الكائن Err.

لذلك نختبر الخاصية Value لهذا الكائن، فإن كانت صفر، فإنه يوجد حل ويقوم بطباعته، وإلا فإنه يظهر رسالة تفيد بأنه لا يوجد حل.

انتهى بعون الله، وأرجو أن أكون قد وفقت في الشرح.

البرنامج في المرفقات، ولكن لا تنس إذا قمت بفتحه أن تسمح لإكسل أن يقوم بتفعيل البرنامج أو الماكرو كما يسميه.​


----------



## محمود الصقار (31 مايو 2010)

السلام عليكم و رحمة الله و بركاته

ربنا يبارك لنا فيك و فى أمثالك يابشمهندس عبد الجواد

ننتظر منك المزيد و المزيد , فأنت أهل لذلك

محمود الصقار


----------



## شادي يس (31 مايو 2010)

اللهم بارك له في علمه


----------



## ahmedalihu (8 أبريل 2011)

*احمدعلي*

السلام عليكم ورحمة الله وبركاته
مشكور اخي على هذا الشرح الرائع.. ارجوا احد يوضح اين يمكن الاستفادة من هذه الطرق يعني التطبيق العملي لهذه الطرق..وهل يمكن ان نحصل على قيم متشابهة من حل هذه المعادلات او مطابقة تلك القبم الناتجة الى قيم مفترضة .. وشكرا


----------



## عبد الجواد (8 أبريل 2011)

السلام عليكم:

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

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


----------



## ahmedalihu (9 أبريل 2011)

السلام عليكم 
هل يمكن استخدام الطريقة في ال clustring


----------



## عبد الجواد (9 أبريل 2011)

في الحقيقة لا أعلم ماذا تقصد ب clustring، أرجو التوضيح.


----------



## mecheil.edwar (9 أبريل 2011)

موضوع ممتاز


----------



## ahmedalihu (9 أبريل 2011)

السلام عليكم
اقصد العنقدة ، مثلا اذا كان لدينا اربع كائنات (أ،ب،ج،د) المطلوب تقسيم هذه الكائنات الى مجاميع متشابهه ، بعض الخوارزميات تفترض ان هناك مجموعتين غير متشابهة (2-cluster ) وبعدها تعمل على حساب المسافة الاقليدية بين كل كائن والمجموعة المفترضة (كما في خوارزمية K-Means ) في النتيجة مفروض الكائنات اعلاه تنتمي اما الى Cluster1 او Cluster2 . منذ فترة وانا احاول ايجاد بعض المعادلات الرياضية لحل تلك المسالة وعدم الاعتماد على حساب المسافة الاقليدية ولكن كما تعلم استاذي الكريم المعادلات الرياضية متشعبة ولا يمكنني البحث في كل الخيارات الممكنة لقلت خبرتي في هذا المجال ، اتأمل من جنابكم الكريم مساعدتي في هذا الموضوع..شكرا


----------



## عبد الجواد (9 أبريل 2011)

السلام عليكم:

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

ولكن ربما هذه الصفحة تفيدك وفيها برنامج بلغة VB حول خوارزمية K-Means، مع شرح الفكرة النظرية له.
http://people.revoledu.com/kardi/tutorial/kMean/download.htm


----------



## ahmedalihu (9 أبريل 2011)

مشكور اخي العزيز


----------



## المهندسة أسما (14 يونيو 2011)

السلام عليكم ورحمة الله
بارك الله فيك وزادك من العلم والخير الكثيير


----------



## nabeel73 (21 أغسطس 2011)

السلام عليكم 
هلا ساعدتموني في هذا الموضوع 
http://www.arab-eng.org/vb/t280476.html#post2326261
جزاكم الله خيراً


----------



## mahdi_q2001 (6 فبراير 2012)

بارك الله فيك


----------



## robocon (25 مارس 2013)

جزاك الله خيرا


----------



## misaki techan (5 يناير 2015)

السلام عليكم
بلا زحمة عندي 3 اسئلة ببرنامج الفيجوال بيسك وما جاي اعرف لحلهن ممكن تساعدوني بحلهن
بنهاية هذه المحاضرة
https://www.google.iq/url?sa=t&rct=j...Cq2E5hr5lrj4wA


(Exercise (1)

(Exercise (2)
(Exercise (3)

ما اعرف لحلهن ياريت تساعدوني
وشكرااا
​
​​


----------



## najdat52 (6 يناير 2015)

السلام عليكم
لو تكرمت ان تشرح طريقة determinat
eigen value eigen vector في الاكسل


----------

