Matlab

2012-05-06 14 views
5

में वैज्ञानिक नोटेशन का एक्सपोनेंट कैसे प्राप्त करें जब संख्याएं वास्तव में छोटी होती हैं, तो मैटलैब स्वचालित रूप से उन्हें वैज्ञानिक नोटेशन में स्वरूपित दिखाता है।Matlab

उदाहरण:

A = rand(3)/10000000000000000; 

A = 

    1.0e-016 * 

    0.6340 0.1077 0.6477 
    0.3012 0.7984 0.0551 
    0.5830 0.8751 0.9386 

वहाँ कुछ में निर्मित समारोह जो प्रतिपादक देता है? कुछ ऐसा है: getExponent(A) = -16?

मुझे पता है कि यह एक बेवकूफ सवाल है, लेकिन मुझे सैकड़ों मैट्रिस की जांच करने की आवश्यकता है और मुझे इसे समझने की प्रतीत नहीं हो रही है।

आपकी मदद के लिए धन्यवाद।

उत्तर

12

बुनियादी गणित आप बता सकते हैं कि:

floor(log10(N)) 

एक नंबर के लॉग आधार 10 आपको बताता है कि लगभग कितनी दशमलव से पहले कई अंक है कि संख्या में हैं।

उदाहरण के लिए, 99987123459823754, 9.998E+016

log10(99987123459823754)16.9999441 है जिनमें से मंजिल 16 है - जो मूल रूप से आप बता सकते हैं "वैज्ञानिक अंकन में प्रतिपादक, 16 बहुत 17 होने के करीब"।

मंजिल हमेशा की तरह, नीचे दौर तो आप छोटे एक्स्पोनेंट्स बारे में चिंता करने की जरूरत नहीं है:

0.000000000003754 = 3.754E-012 
log10(0.000000000003754) = -11.425 
floor(log10(0.000000000003754)) = -12 
3

आप log10(A) उपयोग कर सकते हैं। प्रिंट आउट के लिए इस्तेमाल किया प्रतिपादक ए में सबसे बड़ा परिमाण प्रतिपादक आप पर इनकी संख्या कम (< 1) के बारे में परवाह है, तो हो जाएगा, आप

min(floor(log10(A))) 

उपयोग कर सकते हैं, लेकिन अगर यह संभव है उन्हें बहुत बड़ी होने के लिए, आप मुझे कुछ चाहिए:

a = log10(A); 
[v i] = max(ceil(abs(a))); 
exponent = v * sign(a(i)); 

यह अधिकतम पूर्ण एक्सपोनेंट पाता है, और उसे वापस देता है। तो यदि A = [1e-6 1e20], यह 20 लौटाएगा।

मुझे वास्तव में यह सुनिश्चित नहीं है कि कैसे मैटलैब निर्णय लेता है कि प्रिंटिंग के दौरान किस एक्सपोनेंट का उपयोग करना है। जाहिर है, अगर ए 1 के करीब है (उदाहरण के लिए A = [100, 203]) तो यह किसी एक्सपोनेंट का उपयोग नहीं करेगा लेकिन यह समाधान वापस आ जाएगा 2. आपको प्रिंटिंग मैट्रिक्स के नियमों के ठीक से काम करने के लिए थोड़ा सा खेलना होगा कर रहे हैं।