2011-09-02 28 views
1

我必須創建一個矩陣,其中199,409,619,... 210n-11沿着對角線和零點遍及其他地方。在MATLAB中,如何使用nxn矩陣在其他地方使用整數和零來創建對角線

這裏是我的M檔至今:

function A = MyDiagMatrix(n) 
    A = zeros(n,n); 
    for i =199:210:210n-11 
      eye(i); 
    end 
end 

我究竟做錯了什麼?任何幫助將是偉大的!

+0

等待,所以你只是想創建一個N×N大小的矩陣,在對角線上它將全部爲零。什麼是199:210:210n-11 – Kevin

+0

Rook解決了你的問題,Azim解釋了它的工作原理。還要注意,'210n'在MATLAB中不起作用,而不是你需要明確說出'210 * n'的隱含乘法。 –

回答

7

首先你的函數初始化矩陣,A,但是之後什麼都不做。您需要修改A的條目以使函數返回比零矩陣更多的東西。

您可以使用MATLAB的函數diag,該函數根據矢量創建對角矩陣。例如

d=1:n; %# create vector 1,2,...,n 
A = diag(d) %# create diagonal matrix with entries A(i,i) = i with i=1,2,...,n; 

修改輸入向量d如果你想把它當作一個函數適合您的需求

3

...

function [ a ] = MyDiagonalMatrix(n) 
a = diag(199:210:210*n-11); 
end 

附:這應該歸功於Azim。

0

以下是你需要的功能:

@(n) diag(199:210:210*n-11) 

而如調用它的:

MyDiagonalMatrix(3) 
在MATLAB R2012a

實際測試:

>> MyDiagonalMatrix = @(n) diag(199:210:210*n-11) 

MyDiagonalMatrix = 

    @(n)diag(199:210:210*n-11) 

>> MyDiagonalMatrix(3) 

ans = 

    199  0  0 
    0 409  0 
    0  0 619 

>> MyDiagonalMatrix(5) 

ans = 

     199   0   0   0   0 
      0   409   0   0   0 
      0   0   619   0   0 
      0   0   0   829   0 
      0   0   0   0  1039 

它們符合您的要求: 「n×n的矩陣,199,409,619,... 210N-11的向下對角線和其他地方的零點。「

希望有幫助!

相關問題