MATLAB

2011-08-26 10 views
18

में वैक्टरों की एक सरणी का वेक्टर मानदंड MATLAB में मैट्रिक्स पर norm पर कॉल करते समय, यह वेक्टर मानदंडों की एक सरणी के बजाय "मैट्रिक्स मानदंड" (स्केलर मान) के रूप में जाना जाता है। क्या मैट्रिक्स में प्रत्येक वेक्टर के मानक को लूपिंग और MATLAB के वेक्टरेशन का लाभ उठाने के बिना कोई तरीका प्राप्त करने का कोई तरीका है?MATLAB

+0

योग के बारे में क्या? –

उत्तर

24

आप element-wise arithmetic operators का उपयोग करके मैट्रिक्स के प्रत्येक कॉलम या पंक्ति के मानदंड की गणना कर सकते हैं और दिए गए मैट्रिक्स आयामों (जैसे SUM और MAX) पर संचालित करने के लिए परिभाषित फ़ंक्शंस का उपयोग कर सकते हैं। यहाँ कैसे आप एक मैट्रिक्स M के लिए कुछ स्तंभ-वार मानदंडों की गणना कर सकते हैं:

twoNorm = sqrt(sum(abs(M).^2,1)); %# The two-norm of each column 
pNorm = sum(abs(M).^p,1).^(1/p); %# The p-norm of each column (define p first) 
infNorm = max(M,[],1);   %# The infinity norm (max value) of each column 

इन मानदंडों आसानी से ...,1 से ...,2 के आयाम तर्क बदलकर स्तंभों के बजाय पंक्तियों पर संचालित करने के लिए बनाया जा सकता है।

+3

शायद आपको स्पष्ट रूप से उन आयामों को निर्दिष्ट करना चाहिए जिनके साथ एसयूएम और MAX संचालित होते हैं, इस तरह पंक्ति-वार मानदंडों पर स्विच करना आसान होगा ... – Amro

+0

@Amro: अच्छा सुझाव। किया हुआ! – gnovice

+2

यदि 'एम' में केवल वास्तविक संख्याएं हैं, तो आप 'दो' नाम में 'एम' के साथ' abs '(')' को प्रतिस्थापित कर सकते हैं क्योंकि'।^2 प्रभावी रूप से किसी नकारात्मक संकेत को रद्द कर देता है। – kroimon

1

दो-मानक के लिए मौजूदा कार्यान्वयन में सुधार किया जा सकता है।

twoNorm = sqrt(sum(abs(M).^2,1)); # The two-norm of each column 

abs(M).^2 अनावश्यक वर्ग जड़ों जो सिर्फ वर्ग सीधे प्राप्त की एक पूरी गुच्छा की गणना होने जा रही है।

सुदूर बेहतर करने के लिए:

twoNorm = sqrt( 
       sum(real(M .* conj(M)), 1) 
      ) 

यह कुशलता से संभालती है वास्तविक और जटिल एम

का उपयोग real() सुनिश्चित करता है कि sum और वास्तविक संख्या से अधिक sqrt अधिनियम (0 काल्पनिक घटक के साथ के बजाय जटिल संख्या)।

0

संस्करण 2017 बी के बाद से, आप vecnorm का उपयोग कर सकते हैं।