В MATLAB, как создать диагональ с целыми числами и нулями везде, используя матрицу nxn - PullRequest
1 голос
/ 02 сентября 2011

Мне нужно создать матрицу nxn с 199, 409, 619, .... 210n-11 по диагонали и нулями везде.

Вот мой файл M, такдалеко:

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

что я делаю не так?Любая помощь будет отличной!

Ответы [ 3 ]

7 голосов
/ 02 сентября 2011

Сначала ваша функция инициализирует матрицу, 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 голосов
/ 02 сентября 2011

Если вы хотите использовать его в качестве функции ...

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

ps. Кредит на это действительно должен пойти на Azim.

0 голосов
/ 28 марта 2013

Вот функция, которая вам нужна:

@( 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 x n с 199, 409, 619, .... 210n-11 по диагонали и нулями повсюду."

Надеюсь, это поможет!

...