[英]How to get Exponent of Scientific Notation in Matlab
當數字非常小時,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
?
我知道這是一個愚蠢的問題,但我需要檢查數百個矩陣,我似乎無法弄明白。
謝謝您的幫助。
基礎數學可以告訴你:
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
您可以使用log10(A)
。 用於打印輸出的指數將是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。
我實際上不確定Matlab如何確定打印時使用的指數。 顯然,如果A接近於1(例如A = [100, 203]
),那么它根本不會使用指數,但是這個解決方案將返回2.你必須稍微使用它才能確切地計算出來打印矩陣的規則是什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.