كيف يمكنني إنشاء مصفوفة الثلاثي استنادا إلى متجه في MATLAB؟

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

  •  05-07-2019
  •  | 
  •  

سؤال

ودعونا نقول لقد حصلت على ناقلات مثل هذا واحد:

A = [101:105]

والذي هو في الحقيقة:

[ 101, 102, 103, 104, 105 ]

وأود أن استخدام ناقلات الوحيدة / وظائف مصفوفة والمشغلين لتنتج المصفوفة:

101 102 103 104 105
102 103 104 105 0
103 104 105 0   0
104 105 0   0   0
105 0   0   0   0

وأو المصفوفة التالية:

101 102 103 104 105
0   101 102 103 104
0   0   101 102 103
0   0   0   101 102
0   0   0   0   101

وأي أفكار أي شخص؟

و(أنا كثيرا مبتدئا في MATLAB، ولكن لقد تم مثقلة هذه الاشياء ...)

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

المحلول

وسوف hankel(A) تحصل على المصفوفة الأولى

وtriu(toeplitz(A)) سوف تحصل على ثانية واحدة.

و- لورين

نصائح أخرى

ويتم سرد أفضل الحلول التي كتبها <وأ href = "https://stackoverflow.com/questions/1000535/how-can-i-create-a-triangular-matrix-based-on-a-vector-in- ماتلاب / 1000889 # 1000889 "> لورين . ومن الممكن أيضا لإنشاء هذه المصفوفات باستخدام SPDIAGS :

vec = 101:105;
A = full(spdiags(repmat(vec,5,1),0:4,5,5));  % The second matrix
B = fliplr(full(spdiags(repmat(fliplr(vec),5,1),0:4,5,5)));  % The first matrix

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

والطريقة سأذهب عن ذلك هو خلق A مصفوفة:

101 102 103 104 105
101 102 103 104 105
101 102 103 104 105
101 102 103 104 105
101 102 103 104 105

وثم العثور على B مصفوفة بحيث عند ضربها A*B ستحصل على النتيجة التي تريدها. أساسا القيام الجبر الخطي على الورق أولا ومن ثم يكون مطلب قيام الحساب.

لتوليد مثل هذه المصفوفات الثلاثي مع مثل هذا النمط العادي، استخدم الدالة toeplitz، منها مثلا.

m=toeplitz([1,0,0,0],[1,2,3,4])

وبالنسبة لقضية أخرى، واستخدام rot90(m)

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