2013-11-28 3 views
1

Для заданного (м по п) матрица poly Я хотел бы генерировать свои строки со следующим выражением:октаву функция векторизовать приложения

poly(i, :) = [X(i) X(i)^2 X(i)^3 ... X(i)^p]

Я дан (м на 1) X вектор и значение p. Мое текущее решение:

poly(:,1) = X; 
for i = 2:p 
    poly(:,i) = X.^i; 
end; 

Мой вопрос: есть ли способ их для дальнейшего векторизации это? Я также сгенерировал массив ячеек функций, которые можно было применить к матрице подряд за строкой, но мне все еще пришлось петли.

ТИА

ответ

1

Конечно, это возможно, используя (например) встроенный помощник функциональных единиц().

Шаг через раствор:

poly = ones(size(X,1),p ); 
poly = poly .* X; 
powers = 1:p; 
poly = poly .^ powers; 

Однострочник:

poly = (ones(size(X,1),p) .* X) .^[1:p]; 
+0

Я получил ваш X dimenstion неправильно, я думаю. Ред. – uvesten

+0

Пробовал, для зацикленной версии с X = [1: 10^3] 'и p = 10^3 время, прошедшее на моем компьютере, составляло 2,757 секунды. Векторизованная версия заработала в 0.004 секунд, довольно быстрота! – uvesten

+0

Я пробовал ваш код, и он, похоже, не работает. Заметим, что poly является матрицей (m по n). Число столбцов n = p + 1, где весь столбец один совпадает с X. X является вектором m на 1. Хотя он, кажется, не подходит, дал мне идеи по использованию repmap и преобразованию результата в матрица. – user2051561

Смежные вопросы