تناسب خط 3D إلى بيانات النقطة ثلاثية الأبعاد في Java؟

StackOverflow https://stackoverflow.com/questions/2352256

  •  23-09-2019
  •  | 
  •  

سؤال

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

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

المحلول

هذا سهل بما فيه الكفاية ، ولكن لكتابته بنفسك ستحتاج إلى حل محلل ذي قيمة أو تحلل فريد. قم بإنشاء مصفوفة NX3 A ، من بيانات (X-XBAR ، Y-YBAR ، Z-ZBAR) كأعمدة. حفظ هذه العمود يعني في وقت لاحق ، سأسميها v0 = [XBAR ، YBAR ، ZBAR].

الآن ، قم بحساب القيم الذاتية و eigenvectors من مصفوفة 3 × 3 التي تم تكوينها من جهاز تم نقله بواسطة A.

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

خذ eigenvector المرتبط بأكبر قيمة الذاتية لـ '*a. ثم إذا كان V هو eigenvector المقابل ، يتم تعريف خط الانحدار المتعامد على أنه

v (t) = v0 + t*v

يمكن إعطاء أي نقطة على هذا الخط ببعض قيمة المعلمة t.

بدلاً من ذلك ، قم بحساب تحلل القيمة المفرد لـ A ، واتخذ ناقل المفرد الصحيح الذي يتوافق مع أكبر قيمة فردية لـ A.

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

نصائح أخرى

Google for "Java Linear Leater Fancares Lendression Library" ويجب أن تجد بعض الخيارات. واحد هو درج. لم أستخدم هذا بنفسي.

تعديل - لست واثقًا من هذا الإجابة على السؤال - لا أعرف ما إذا كانت البيانات ثلاثية الأبعاد مدعومة.

من السهل القيام بذلك إذا كنت تعرف الخدعة: http://www.scribd.com/doc/21983425/least-squares-fit

المزيد من الأبعاد تعني المزيد من المعاملات ، لكنها سهلة بما يكفي لإضافتها. الأفكار كلها متشابهة.

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