2011-12-02 219 views
1

我建立一個NxN矩陣在MATLAB用下面的代碼:矩陣生成MATLAB

x = linspace(a,b,n); 

for i=1:n 
    for j=1:n 
     A(i,j) = x(j)^(i-1); 
    end 
    A 
    i 
    b(i) = (1/i)*x(n)^i - (1/i)*x(1)^i; 
end 

我正在與一個= 1 B = 10和n = 10測試它。我得到預期的結果最多爲i = 8

I =

8 

A =

列1至7分

 1   1   1   1   1   1   1 
     1   2   3   4   5   6   7 
     1   4   9   16   25   36   49 
     1   8   27   64   125   216   343 
     1   16   81   256   625  1296  2401 
     1   32   243  1024  3125  7776  16807 
     1   64   729  4096  15625  46656  117649 
     1   128  2187  16384  78125  279936  823543 
     1   256  6561  65536  390625  1679616  5764801 

列8至10

 1   1   1 
     8   9   10 
     64   81   100 
    512   729  1000 
    4096  6561  10000 
    32768  59049  100000 
    262144  531441  1000000 
2097152  4782969 10000000 
16777216 43046721 100000000 

但是從i = 9開始它成爲這樣:

I =

9 

A =

1.0E + 09 *

列1至9

0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0001 
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0001 0.0003 0.0005 
0.0000 0.0000 0.0000 0.0000 0.0001 0.0003 0.0008 0.0021 0.0048 
0.0000 0.0000 0.0000 0.0001 0.0004 0.0017 0.0058 0.0168 0.0430 
0.0000 0.0000 0.0000 0.0003 0.0020 0.0101 0.0404 0.1342 0.3874 

柱10

0.0000 
0.0000 
0.0000 
0.0000 
0.0000 
0.0001 
0.0010 
0.0100 
0.1000 
1.0000 

有人可以告訴我發生了什麼?我在matlab方面並不是很有經驗(我主要使用C++或python),至今似乎無法自己弄清楚。

+0

很抱歉,但你有什麼期待得到什麼? – PengOne

+0

作爲代碼的替代方法,您可以簡單地編寫'[value,exponent] = meshgrid(a:b,0:(n-1)); A =價值^指數' – Jonas

回答

2

這只是一個格式問題,對於更大的數字。試試

sprintf('%20.0f', A(end,end)) 

你會看到數字是正確的。至少在某些情況下,您將遇到雙重表示問題...

+0

謝謝! Matlab輸出格式實際上會讓我困惑不已。 – user381261

1

由於常用縮放應用於您的數據顯示。請參閱您的輸出:

A = 

1.0e+09 * 

10矩陣中的每個條目都包含10^9的共同因子。

您可能需要使用調整輸出顯示:

format short g