2015-09-11 36 views
-2

這是我的MATLAB代碼:爲什麼兩個有限數的分解返回零?

mu_n = Tnume_mu/Tdeno_mu; 

當我運行此,它顯示0一如既往,雖然可變Tnume_mu = 255Tdeno_mu = 1.7957e4

+0

你確定兩者都是數字嗎? – GameOfThrows

+0

是的,先生們都是數字,但我沒有得到答案。 – Neha

+0

@Neha - 抱歉你的問題很快就關閉了。在我看來,這是一個合理的問題,不應該被低估(除了開頭的真正糟糕的標題外)。我投票重新開放,因爲答案不是微不足道的,至少在MATLAB通常處理雙打而不是int的情況下。 – thewaywewalk

回答

6

你檢查過你的變量類嗎?

>> x = int32(5); 
>> y = int32(10); 
>> class(x) 
int32 
>> class(y) 
int32 
>> x/y 
0 

>> x = 5; 
>> y = 10; 
>> class(x) 
double 
>> class(y) 
double 
>> x/y 
0.5 

整數變量(int8int16int32int64)只能取整數值,並且它們被分裂過程中向零取整,因此,如果其結果將是介於0和1,那麼結果就是0。

+0

非常感謝Mr.Chris ........我得到了正確的值............ – Neha

0

爲了簡化問題,我會更容易使用的變量名稱和編號:

A = 5; 
B = 2; 
C = A/B; 
C = 
    2.5 

/運營商是rdivide一條捷徑。這是兩個標量之間的常規分工。您可以將其展開爲矩陣,例如

A = magic(2); 
B = magic(2).'; 
C = A./B; 
C = 

    1.0000 0.7500 
    1.3333 1.0000 

其中./確保你把聰明元素。

還有另一個部門,即 -divide:ldivide,或簡稱\。這是一個特定的MATLAB運算符,其矩陣乘法通常由C = A^-1 * B表示,其中A^-1是矩陣A的倒數。這個算子的美妙之處在於,它不會明確地計算反向,而是它的******分解,使它更快和更強壯。這不是問題,因爲你很少需要明確的矩陣逆,你可以通過inv創建:

C=A\B 

C = 

    0.7000 -0.2000 
    0.1000 1.4000 

D = inv(A)*B; 
C == D 
    1 
+0

這絕對不能回答這個問題。 – thewaywewalk

+0

嗯,它確實告訴你如何劃分兩個數字 – Adriaan

+0

我懷疑這與數據類型有很大關係,儘管這很好記。 – rayryeng