سؤال

قرأت في أماكن قليلة (في المستند وفي منشور المدونة هذا: http://blogs.mathworks.com/loren/2007/05/16/purpose-of-inv/ ) أن استخدام inv في MATLAB لا ينصح به لأنه بطيء وغير دقيق.

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

شكرًا !

هل كانت مفيدة؟

المحلول

عدم الدقة التي ذكرتها هو مع الطريقة Inv ، وليس تنفيذ Matlab لها. يجب أن تستخدم QR أو LU أو طرق أخرى لحل أنظمة المعادلات لأن هذه الأساليب لا تتطلب عادةً تربيع رقم شرط النظام المعني. يتطلب استخدام Inv عادة عملية تفقد الدقة عن طريق تربيع رقم الحالة للنظام الأصلي.

-لورين

نصائح أخرى

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

inv() بالتأكيد أبطأ من \ ما لم يكن لديك عدة متجهات جانبية يمين لحلها. ومع ذلك ، فإن نصيحة MathWorks المتعلقة بعدم الدقة ترجع إلى حدود محافظة للغاية في نتيجة الجبر الخطي العددي. بعبارات أخرى، inv() ليس غير دقيق. يوضح الرابط أكثر: http://arxiv.org/abs/1201.6035

تقود العديد من الكتب المدرسية المستخدمة على نطاق واسع القارئ إلى الاعتقاد بأن حل نظام خطي للمعادلات AX = B عن طريق ضرب المتجه B بواسطة Inv (A) غير دقيق. تقريبا جميع الكتب المدرسية الأخرى حول التحليل العددي والجبر الخطي العددي النصيحة ضد استخدام العكس المحسوب دون ذكر ما إذا كان هذا دقيقًا أم لا. في الواقع ، بموجب الافتراضات المعقولة حول كيفية حساب العكسي ، فإن x = inv (a)*b دقيقة مثل الحل المحسوب من قبل أفضل الحلول المستقرة للخلف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top