Октавная матрица дискретизированных полиномов Лежандра

Мне нужно получить N x столбцов (L) матрицу полиномов Лежандра, оцененных по L для произвольного N.

Есть ли лучший способ вычисления матрицы, чем просто явное вычисление полиномиального вектора для каждой строки? Фрагмент кода для этого подхода (N = 4) находится здесь:

L = linspace(-1,1,800);

# How to do this in a better way?
G = [legendre_Pl(0,L); legendre_Pl(1,L); legendre_Pl(2,L); legendre_Pl(3,L)];

Спасибо, Войта


person vojta havlíček    schedule 02.08.2013    source источник
comment
Во-первых, как вы определяете лучшее, а во-вторых, допустимы ли какие-либо неточности? Например, вы можете просто вычислить L в каждой второй точке и выполнить интерполяцию.   -  person Moonwalker    schedule 02.08.2013
comment
Мне нужно только найти строки legendre_Pl(n, L) над L для n от 1 до N (N — количество строк результирующей матрицы) и сохранить их как матрицу Nxcols(L). Использование n = 1:N в качестве аргумента legendre_Pl здесь не работает. Под лучшим я подразумеваю создание переменной N, поэтому мне не нужно вручную вводить все legendre_Pl. Также желательно не использовать цикл for. Неточности не являются предметом этого вопроса   -  person vojta havlíček    schedule 03.08.2013


Ответы (1)


Создайте анонимную функцию. Документация на http://www.gnu.org/software/octave/doc/interpreter/Anonymous-Functions.html

f = @(x) legendre_Pl(x,L);

Затем используйте arrayfun для применения функции f к массиву [1:N] Документация по адресу http://www.gnu.org/software/octave/doc/interpreter/Function-Application.html

CellArray = arrayfun(f, [1:N], "UniformOutput", false);

Это дает вам массив ячеек. Если вы хотите получить ответ в виде матрицы, используйте cell2mat

G = cell2mat(CellArray);
person Charity Leschinski    schedule 19.10.2013