簡體   English   中英

如何在Matlab中得到科學記數的指數

[英]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告訴您大約在該數字前面的小數位數。

例如, 999871234598237549.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM