7

数値が非常に小さい場合、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

これは一種のばかげた質問だと思いますが、何百もの行列をチェックする必要があり、理解できないようです。

ご協力ありがとうございました。

4

2 に答える 2

19

基本的な数学はあなたにそれを伝えることができます:

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
于 2012-05-06T14:00:41.890 に答える
3

を使用できます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を返します。行列を印刷するためのルールを正確に理解するには、少し試してみる必要があります。 。

于 2012-05-06T14:03:05.410 に答える