Оптимизация кода Matlab для полиномов Лежандра - PullRequest
2 голосов
/ 08 января 2012

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

function op
t1 = zeros(1,100);
t2 = zeros(1,100);
P1 = zeros(1,10);
for m = 1:100
tic;
% It is neccessary a for loop for the first ten terms (m =1,...,10) of 
% Legendre polynomial with legendre matlab built-in function
for i = 1:10
    A = legendre(i,0);% legendre function determines the associated 
    % Legendre functions
    P1(i) = A(1,1);% Legendre polynomials are the first row of A
end
t1(m) = toc;
tic;
% My own function determines the first ten terms at a time
P2 = legendrep2(0,10);
t2(m) = toc;
end
% Mean time using the Matlab built-in legendre functions
t1_mean = mean(t1),
% Mean time using my own custom legendre polynomial function
t2_mean = mean(t2),

function [Pl] = legendrep2(gamma,fin_suma)
Pl = zeros(1,fin_suma);
Pl(1) = gamma;
Pl(2) = 0.5*(3*gamma*Pl(1)-1);
    for j =3:fin_suma;
        Pl(j) = ((2*j-1)*gamma*Pl(j-1)-(j-1)*Pl(j-2))/j;
    end
end
end

Это мои результаты:

t1_mean =
     0.001621042906210
t2_mean =
      7.536710452587590e-006

Итак, я хотел бы знать, есть ли еще возможность улучшить мой код (функция legendrep2)больше.

1 Ответ

2 голосов
/ 08 января 2012

Попробуйте профилировщик Matlab, чтобы определить узкое место:

Меню -> Рабочий стол -> Профилировщик

Это поможет вам сосредоточиться.

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