سؤال

أحاول أن أكتب حلًا عامًا لنظام خطي في Maxima باستخدام linsolve(eqlist, varlist), ، ولكن دون الحاجة إلى تحديد بُعد المشكلة صراحة.

هذا يعمل ، لكنه يعمل على إصلاح البعد إلى 3:

linsolve( [ eq[0],eq[1],eq[2] ], [ a[0],a[1],a[2] ])

هذا لا:

solution(p):=(  
  array(eq,p+1), /* creating arrays of length p+1 */
  array(a,p+1),

  for i:0 thru p do (
    eq[i]: sum(binom(j+1,i)*a[j],j,i,p) = binom(p,i)
  ),

  linsolve(eq,a)
)

أي نظرة ثاقبة حول كيفية جعل هذا العمل؟


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

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

المحلول

على ما يبدو في الحد الأقصى ، فإن القوائم والصفائف ليست هي نفس الكائن الأساسي.

المصفوفات أكثر تعقيدًا وقليلًا من الفوضى للعمل (كما هو مقترح في هذا المنشور إلى القائمة البريدية Maxima).

تختفي المشكلة إذا بقينا بعيدًا عن المصفوفات ونعمل مع القوائم بدلاً من ذلك:

solution(p):= block([a, eq],        /* give subroutine variables local scope */
    v : makelist(a[i], i, 0, p),    /* create list of unknowns (0-indexed) */
   eq : makelist(sum(binom(j+1,i)*a[j],j,i,p) = binom(p,i), i, 0, p),  
                                    /* create list of equations (0-indexed) */
   linsolve(eq, v)
)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top