• مهم : ولأول مرة الآن يمكنك استخدام وتجربة تقنية الذكاء الاصطناعي في ملتقى المهندسين العرب ، كل ماعليك هو كتابة موضوع جديد في أي قسم من أقسام الملتقى ووضع سؤالك أو مناقشتك ، وسوف يجيب عليك المهندس الذكي مباشرة ، كما يمكنك اقتباس رد الذكاء الاصطناعي (المهندس الذكي ) ومناقشته وسؤاله لمزيد من التوضيحات.

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

عبد الجواد

عضو جديد
إنضم
27 أغسطس 2006
المشاركات
507
مجموع الإعجابات
82
النقاط
0

كنت قد بدأت في شرح خوارزمية لحل الجوائز الشبكية المستوية 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

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

 

عبد الجواد

عضو جديد
إنضم
27 أغسطس 2006
المشاركات
507
مجموع الإعجابات
82
النقاط
0

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

لنفرض أنه لدينا جملة المعادلات التالية:
alg03-01.gif


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

سنسمي المصفوفة التالية مصفوفة الأمثال:
alg03-02.gif


وسنسمي المصفوفة التالية مصفوفة الأمثال الموسعة:
alg03-03.gif


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

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

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

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

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

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


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

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

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

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


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

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

ويمكننا ترجمة ذلك بشكل رمزي كما يلي:
alg03-06.gif


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

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

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

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


ونترجم ذلك بشكل رمزي كما يلي:
alg03-08.gif


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

الآن يمكننا حساب المجاهيل بسهولة كما يلي:
alg03-09.gif


أي بشكل رمزي:
alg03-10.gif


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

إن عمليات التحويل تصبح بالشكل:
alg03-11.gif


أي أنه لدينا ثلاث حلقات متداخلة:
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 في نفس سطرها في عمود العنصر المحور ومقسومة على العنصر المحور) أي كما في الشكل:
alg03-12.gif


أما حساب x في الحالة العامة فهو بالشكل:
alg03-13.gif


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

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

عبد الجواد

عضو جديد
إنضم
27 أغسطس 2006
المشاركات
507
مجموع الإعجابات
82
النقاط
0

مثال يدوي:

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

alg03-ex-01.gif


الحل:

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

alg03-ex-02.gif


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

alg03-ex-03.gif


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

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

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

كود:
L2 = L2 - 1/4 * L1 => -4 – 1/4 * 5 = -5.25

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

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

alg03-ex-04.gif


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

alg03-ex-05.gif



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

alg03-ex-06.gif



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

سأترك الآن المجال مفتوحاً للأسئلة ريثما أنتهي من كتابة البرنامج إن شاء الله.
 
إنضم
20 مارس 2007
المشاركات
5,380
مجموع الإعجابات
1,608
النقاط
113
السلام عليكم ورحمة الله وبركاته
بانتظار البرنامج استاذ عبد الجواد...أظن انه اصبح من اللازم تنزيل اللغة المستخدمة فهل هناك نسخة من الQbasic تنصحون بها؟ أستخدم ويندوز 7
بالنسبة لموضوع اليوم هناك فكرة اخرى لتطبيق طريقة جاوس Gauss وفكرتها تحويل مصفوفة الامثال الى مصفوفة الوحدة وبالتالي يكون العمود الأخير هو الحل مباشرة بدلا من أن تكون مصفوفة مثلثية عليا ومن ثم نتحصل على الحل بالتعويض العكسي من الاسفل...
برمجيا يمكن الحصول على الفكرة الاولى بتحريك حلقة أوامر التصفير loop (وهي الحلقة الثانية كما فهمت) من البداية يعني من اول معادلة بدلا من اسفل المعادلة قيد النظر ( المعادلة k) مع استثنائها نفسها من العملية حتى لا تتحول هي الاخرى الى صفر...أرجو ان تكون الفكرة واضحة..أما الفكرة الثانية فهي الطريقة المتبعة في شرحكم
سؤالي استاذنا على اي اساس نقوم بالتفضيل بين الطريقتين...أو بمعنى اخر كيف نفاضل بين الطريقتين من حيث الكفاءة...؟
 
التعديل الأخير:

مصطفى المطني

عضو جديد
إنضم
10 مارس 2008
المشاركات
96
مجموع الإعجابات
3
النقاط
0
السيد عبد الجواد المحترم
هل يمكن تزويدي بطريقة واضحة لحساب محدد مصفوفة يحتوي على مجهول
 

محمود الصقار

عضو جديد
إنضم
12 سبتمبر 2006
المشاركات
718
مجموع الإعجابات
534
النقاط
0
السلام عليكم و رحمة الله و بركاته

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

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

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

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

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

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

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

محمود الصقار
 

عبد الجواد

عضو جديد
إنضم
27 أغسطس 2006
المشاركات
507
مجموع الإعجابات
82
النقاط
0
السلام عليكم:

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

والإجابة عن التساؤلات المطروحة من قبل الأستاذ خالد:
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 معادلة مثلاً.

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

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

عبد الجواد

عضو جديد
إنضم
27 أغسطس 2006
المشاركات
507
مجموع الإعجابات
82
النقاط
0

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

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

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

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

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

alg03-code-01.gif


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

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

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

alg03-code-02.gif


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

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

alg03-11.gif


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

alg03-code-03.gif


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

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

كود:
Dim k, i, j As Integer

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


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

alg03-13.gif


alg03-code-04.gif


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

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

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

alg03-code-05.gif


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

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

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

alg03-code-06.gif


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

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

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

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

alg03-code-07.gif


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

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

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

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

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

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

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

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

alg03-code-08.gif


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

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

alg03-code-09.gif


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

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

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

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

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

المرفقات

  • EquationsGauss.zip
    14.5 KB · المشاهدات: 283

محمود الصقار

عضو جديد
إنضم
12 سبتمبر 2006
المشاركات
718
مجموع الإعجابات
534
النقاط
0
السلام عليكم و رحمة الله و بركاته

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

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

محمود الصقار
 

ahmedalihu

عضو جديد
إنضم
8 أبريل 2011
المشاركات
7
مجموع الإعجابات
0
النقاط
0
احمدعلي

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

عبد الجواد

عضو جديد
إنضم
27 أغسطس 2006
المشاركات
507
مجموع الإعجابات
82
النقاط
0
السلام عليكم:

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

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

ahmedalihu

عضو جديد
إنضم
8 أبريل 2011
المشاركات
7
مجموع الإعجابات
0
النقاط
0
السلام عليكم
هل يمكن استخدام الطريقة في ال clustring
 

mecheil.edwar

إستشاري الهندسة المدنية
إستشاري
إنضم
6 سبتمبر 2009
المشاركات
2,639
مجموع الإعجابات
3,541
النقاط
113
موضوع ممتاز
 

ahmedalihu

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

عبد الجواد

عضو جديد
إنضم
27 أغسطس 2006
المشاركات
507
مجموع الإعجابات
82
النقاط
0
السلام عليكم:

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

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

المهندسة أسما

عضو جديد
إنضم
16 أبريل 2010
المشاركات
36
مجموع الإعجابات
0
النقاط
0
السلام عليكم ورحمة الله
بارك الله فيك وزادك من العلم والخير الكثيير
 
أعلى