Инициализировать матрицу с условием - PullRequest
1 голос
/ 13 апреля 2020

Я новичок в MATLAB и мне нужна помощь. Я должен завершить код, который инициализирует матрицу, но я не знаю, с чего начать.

Матрица должна быть в такой форме: enter image description here

Где Yi = i/m для i = 1, ..., m, с m=6.

Код для завершения:

m = 6;
A = [1:m;
     1:m;
     ...];

A = A/m;

Ответы [ 2 ]

4 голосов
/ 13 апреля 2020

Вы можете использовать неявное расширение .

m = 6;
A = ((1:m).'/m).^(0:m);

Объяснение. Сначала создайте вектор-столбец со значениями от y1 до ym.

c = (1:m).'/6;

Затем составьте матрицу, в которой первый столбец будет c в степени 0, второй c в степени 1, et c.

Вы можете легко сделать это с неявным расширением, взять вектор столбца и поднять до степени (по элементам) вектора строки, содержащего 0:m.

A = c.^(0:m); 
2 голосов
/ 13 апреля 2020

Вот два подхода:

  • использование vander + fliplr
A = fliplr(vander((1:m)/m));
  • использование arrayfun + vertcat
C = arrayfun(@(x) x.^(0:m),(1:m)/m, 'UniformOutput', false);
A = vertcat(C{:});

Результат

>> A
A =

   1.000000000   0.166666667   0.027777778   0.004629630   0.000771605   0.000128601   0.000021433
   1.000000000   0.333333333   0.111111111   0.037037037   0.012345679   0.004115226   0.001371742
   1.000000000   0.500000000   0.250000000   0.125000000   0.062500000   0.031250000   0.015625000
   1.000000000   0.666666667   0.444444444   0.296296296   0.197530864   0.131687243   0.087791495
   1.000000000   0.833333333   0.694444444   0.578703704   0.482253086   0.401877572   0.334897977
   1.000000000   1.000000000   1.000000000   1.000000000   1.000000000   1.000000000   1.000000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...