2013-08-02 1 views
3

Je dois obtenir N colonnes x matrice (L) de polynômes de Legendre évalués sur L pour N.Octave Matrice des polynômes de Legendre discrétisées

arbitraire est-il une meilleure façon de calculer la matrice que simplement évaluer explicitement le vecteur polynôme pour chaque rangée? L'extrait de code pour cette approche (N = 4) est ici:

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)]; 

Merci, Vojta

+0

D'abord, comment définissez-vous le « meilleur » et le second sont des inexactitudes acceptables? Vous pouvez par exemple simplement calculer L en un point sur deux et interpoler. – Moonwalker

+0

J'ai juste besoin de trouver les lignes de legendre_Pl (n, L) sur L pour n de 1 à N (N est le nombre de lignes de la matrice résultante) et les garder comme une matrice de Nxcols (L). Utiliser n = 1: N comme argument de legendre_Pl ne fonctionne pas ici. Par "meilleur", je veux dire faire N variable, donc je n'ai pas besoin de taper manuellement tout legendre_Pl manuellement. De plus, de préférence n'utilisant pas de boucle. Innacuracies ne sont pas le sujet de cette question –

Répondre

2

Créer une fonction anonyme. Documentation à http://www.gnu.org/software/octave/doc/interpreter/Anonymous-Functions.html

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

Utilisez ensuite arrayfun pour appliquer la fonction, f à un tableau [1:N] Documentation à http://www.gnu.org/software/octave/doc/interpreter/Function-Application.html

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

Cela vous donne une matrice de cellules. Si vous voulez la réponse dans une matrice, utilisez cell2mat

G = cell2mat(CellArray);