2012-05-06 30 views
5

Khi các số thực sự nhỏ, Matlab tự động hiển thị chúng được định dạng trong Ký pháp khoa học.Cách lấy Số mũ của ký hiệu khoa học trong Matlab

Ví dụ:

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 

Có một số chức năng trong xây dựng mà trả về số mũ? Một cái gì đó như: getExponent(A) = -16?

Tôi biết đây là một câu hỏi ngu ngốc, nhưng tôi cần phải kiểm tra hàng trăm ma trận và tôi không thể hình dung ra được.

Cảm ơn sự giúp đỡ của bạn.

Trả lời

12

toán cơ bản có thể nói với bạn rằng:

floor(log10(N)) 

Căn cứ log 10 của một số cho bạn biết khoảng bao nhiêu chữ số trước chữ số thập phân là trong số đó.

Ví dụ, 999871234598237549.998E+016

log10(99987123459823754)16.9999441, sàn nhà trong số đó là 16 - mà về cơ bản có thể nói với bạn "số mũ trong ký hiệu khoa học là 16, rất gần với việc 17".

Tầng luôn làm tròn xuống, do đó bạn không cần phải lo lắng về số mũ nhỏ:

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

Bạn có thể sử dụng log10(A). Số mũ sử dụng để in ra sẽ là số mũ tầm quan trọng lớn nhất trong A. Nếu bạn chỉ quan tâm đến số lượng nhỏ (< 1), bạn có thể sử dụng

min(floor(log10(A))) 

nhưng nếu nó có thể cho họ được lớn quá, bạn 'd muốn một cái gì đó như:

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

điều này tìm số mũ tuyệt đối tối đa và trả về giá trị đó. Vì vậy, nếu A = [1e-6 1e20], nó sẽ trả lại 20.

Tôi thực sự không chắc chắn cách Matlab quyết định số mũ để sử dụng khi in ra. Rõ ràng, nếu A gần bằng 1 (ví dụ: A = [100, 203]) thì nó sẽ không sử dụng số mũ nào cả, nhưng giải pháp này sẽ trả về 2. Bạn phải chơi xung quanh nó một chút để tìm ra chính xác quy tắc cho ma trận in là.

Các vấn đề liên quan