Как автоматически сгенерировать матрицу с заданным n в matlab - PullRequest
0 голосов
/ 11 октября 2018

Для линейной регрессии я хочу сгенерировать матрицу для полиномов n степени.

, если n равно 1

X=[x(:), ones(length(x),1)]

, если n равно 2

X=[x(:).^2 x(:) ones(length(x),1)]

...

, если n равно 5

X=[x(:).^5 x(:).^4 x(:).^3 x(:).^2 x(:) ones(length(x),1)]

Я не знаю, как кодировать с помощью matlab, если я установил n = 6, и он автоматически сгенерирует требуемую X-матрицу.Надеюсь, вы можете помочь мне.

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

Это легко сделать с помощью bsxfun:

X = bsxfun(@power, x(:), n:-1:0);

Или, в версиях Matlab начиная с R1016b, вы можете использовать неявное расширение :

X = x(:).^(n:-1:0);
0 голосов
/ 12 октября 2018

Если вы напишите edit polyfit, вы увидите, как в MATLAB реализована команда polyfit, которая похожа на то, что вы пытаетесь сделать.Там вы найдете код

% Construct the Vandermonde matrix V = [x.^n ... x.^2 x ones(size(x))]
V(:,n+1) = ones(length(x),1,class(x));
for j = n:-1:1
    V(:,j) = x.*V(:,j+1);
end

, который создает интересующую вас матрицу. Преимущество этого метода перед bsxfun состоит в том, что вы вычисляете только x(:).^n, а затем сохраняете промежуточные результаты.Вместо того, чтобы рассматривать все полномочия как отдельные проблемы, например, x(:)^(n-1) как отдельную проблему для x(:).^n.

0 голосов
/ 11 октября 2018

Проверьте функцию polyval .Я считаю, что это сделает то, что вы ищете.

Чтобы увеличить полином до увеличения степени, вы можете увеличить длину аргумента p, используя цикл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...