2011-12-02 3 views
1

Je construis une matrice nxn en Matlab avec le code suivant:création Matrix 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 

Je teste avec a = 1 b = 10 et n = 10. J'obtenir les résultats escomptés jusqu'à i = 8

i =

8 

A =

les colonnes 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 

colonnes 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 

cependant de i = 9 sur il devient la suivante:

i =

9 

A =

1.0E + 09 *

Les colonnes 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 

Colonne 10

0.0000 
0.0000 
0.0000 
0.0000 
0.0000 
0.0001 
0.0010 
0.0100 
0.1000 
1.0000 

Quelqu'un peut-il me dire ce qui se passe? Je ne suis pas très expérimenté en matlab (j'utilise principalement du C++ ou du python) et jusqu'à présent, je n'arrive pas à le comprendre moi-même.

+0

Désolé, mais qu'attendez-vous pour obtenir? – PengOne

+0

En alternative à votre code, vous pouvez simplement écrire '[value, exponent] = meshgrid (a: b, 0: (n-1)); A = valeur.^Exponent' – Jonas

Répondre

2

C'est juste un problème de formatage pour les grands nombres. Essayez

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

et vous verrez que le nombre est correct. Au moins jusqu'à un certain point, où vous rencontrerez des problèmes de représentation double ...

+0

Merci! Le formatage de sortie Matlab a tendance à me perturber beaucoup. – user381261

1

Parce qu'une mise à l'échelle commune est appliquée à votre affichage de données. Voir dans votre sortie:

A = 

1.0e+09 * 

Un facteur commun de 10^9 a été factorisé sur chaque entrée de votre matrice.

Vous pouvez régler l'affichage de sortie en utilisant:

format short g