سؤال

هذا ما لدي حتى الآن لكنني لا أعتقد أنه صحيح.

for (int i = 0 ; i < 5; i++)
{
    for (int j = 0;  j < 5; j++)
    {
        matrix[i][j] += matrix[i][j] * matrix[i][j];
    }
}
هل كانت مفيدة؟

المحلول

لا أعتقد أنك تستطيع ضرب مصفوفة في مكان نفسه.

for (i = 0; i < 5; i++) {
    for (j = 0; j < 5; j++) {
        product[i][j] = 0;
        for (k = 0; k < 5; k++) {
            product[i][j] += matrix[i][k] * matrix[k][j];
        }
    }
}

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

نصائح أخرى

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

الآن، حول التعليمات البرمجية الخاصة بك، إذا كنت ترغب في القيام بمصطلح من خلال المنتج المصطلح، فأنت تفعل ذلك خطأ، ما تفعله هو تعيين كل قيمة، بالإضافة إلى القيمة الأصلية (n*n+n أو (1+n)*n, ، كل ما تريد أفضل)

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

for i in rows:
    for j in cols:
        result(i,j)=m(i,:)·m(:,j)

والمنتج العددية "·"

v·w = sum(v(i)*w(i)) for all i in the range of the indices.

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

أيضا، شرح تعليق Tyler MChenry أيضا، كإنسان من الاضطرار إلى ضرب الصفوف حسب الأعمدة "الأبعاد الداخلية"(لست متأكدا مما إذا كان هذا هو المصطلحات الصحيحة) من المصفوفات يجب أن تتطابق (إذا A هو m x n, B هو n x o و A*C هو m x o)، لذلك في حالتك، يمكن تربيع مصفوفة فقط إذا كان مربع (هو).

وإذا كنت تريد فقط أن تلعب قليلا مع المصفوفات، فيمكنك تجربة اوكتاف، على سبيل المثال؛ تربيع مصفوفة سهلة مثل M*M أو M**2.

هذا ليس تعريف مصفوفة الضرب الذي رأيته في حياتي. التعريف القياسي هو

for (i = 1 to m)
   for (j = 1 to n)
      result(i, j) = 0
      for (k = 1 to s)
         result(i, j) += a(i, k) * b(k, j)

لإعطاء الخوارزمية في نوع من pseudoocode. في هذه الحالة، A هو Matrix AMXS و B هو SXN، والنتيجة هي AMXN، وتبدأ الفرطون ب 1 ..

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

لقد مضى وقت طويل منذ أن فعلت مصفوفة الرياضيات (وأنا فقط فعلت قليلا منه، على القمة)، ولكن += المشغل يأخذ قيمة matrix[i][j] ويضيف إليها قيمة matrix[i][j] * matrix[i][j], ، لا أعتقد أن ما تريد القيام به.

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

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