[wiskunde] Matlab: legendreveelterm

Moderators: ArcherBarry, Fuzzwood

Reageer
Berichten: 2

[wiskunde] Matlab: legendreveelterm

Hallo!

Ik heb een opdracht gekregen ivm Legendreveeltermen in Matlab. Ik ben er aan begonnen en heb al enkele dingen geprobeerd, maar ik kom nooit een goede uitvoer uit.

Mijn opdracht :

Maak een functie M-file opdracht1.m die de Legendreveelterm uitrekent.

Het commando opdracht1(n) moet als resultaat een vector geven met daarin de n +

1 co¨effici¨enten van de n-degraads Legendreveelterm Pn(x), geordend van hoogstegraadsco

¨effici¨ent tot laagstegraadsco¨effici¨ent. De uitvoer voor n = 2 moet bijvoorbeeld zijn

>> 1.5000 0 -0.5000

Een manier waarop dit zou moeten lukken is met de Rodrigues Formule.

Hierin betekent de ceiling-functie ⌈x⌉ de afronding van x naar het kleinste geheel getal

dat groter is of gelijk is aan x, dus bijvoorbeeld ⌈2.1⌉ = 3 en ⌈2⌉ = 2. Als u met deze

voorstelling werkt kan de Matlabfunctie ceil handig zijn.

Dit is wat ik voorlopig in mijn M-file heb staan:

function [p] = opdracht1(n)

k = n/2;

ceil(x)

p = (-1)^(n-k)/(2^n)* (factorial(2*k)) / (factorial(2*k-n)*factorial(k)*factorial(n-k)) * (x^(2*k-n))

sum(sum([p]))

Het enige probleem: Dit werkt niet (:

Zou iemand mij misschien kunnen helpen?

Alvast bedankt!

Gebruikersavatar
Berichten: 7.224

Re: [wiskunde] Matlab: legendreveelterm

Code: Selecteer alles

ceil(x)
x is niet gedefinieerd en het resultaat van ceil(x) wordt nergens gebruikt.

Code: Selecteer alles

sum(sum([p]))
Waar is dit goed voor? En weer: het resultaat wordt nergens opgeslagen.

En waar reken je de verschillende elementen van de vector uit. Je komt nu alleen op een scalar getal uit.
If I have seen further it is by standing on the shoulders of giants.-- Isaac Newton

Berichten: 2

Re: [wiskunde] Matlab: legendreveelterm

Het probleem is meer: Ik heb slechts 3 inleidingssessies gehad met matlab.

m.a.w. Matlab is zo goed als Chinees voor mij.

Onderaan opdracht 1 was er vermeld dat we eventueel met de 'Ceil'functie konden werken (Geen idee hoe dit moet).

Daarom dat ik die er maar even tussen had getypt.

En welkte vectorelementen bedoel je?

Bedankt voor de snelle reactie alleszinds!

Gebruikersavatar
Berichten: 6.905

Re: [wiskunde] Matlab: legendreveelterm

En welkte vectorelementen bedoel je?
"alle" variabelen zijn vectoren.
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.

Berichten: 43

Re: [wiskunde] Matlab: legendreveelterm

zie je vector dan als n (>= 1) dimensionale array ?

Berichten: 7.068

Re: [wiskunde] Matlab: legendreveelterm

Het probleem is meer: Ik heb slechts 3 inleidingssessies gehad met matlab.
Ik denk niet dat dat het probleem is. Voordat je ook maar met Matlab begint zul je eerst een manier moeten verzinnen waarmee je de coefficienten van \(P_n(x)\) kan bepalen voor een gegeven n. Ik vermoed dat je deze methode nog niet hebt. Mocht ik me nu vergissen, geef die methode dan en dan helpen we je wel verder op weg.

Berichten: 43

Re: [wiskunde] Matlab: legendreveelterm

In MATLAB heet Binomial[n,k] --> nchoosek(n,k)

Volgens Wolfram site (heb het niet zelf uitgeprobeerd maar experimenteel lijkt het te kloppen) kun je de Rodrigues formule uitwerken tot:
\(P_n(x) = \frac{1}{2^n} \sum_{k=0}^{\lfloor n/2 \rfloor} (-1)^k {n \choose k} {2n-2k \choose n} x^{n-2k}\)
(zie http://mathworld.wolfram.com/LegendrePolynomial.html)

Dit kun je bijzonder eenvoudig implementeren in welke programmeertaal dan ook. In MATLAB met ingebouwde binom functie natuurlijk nog makkelijker.

In python bv. (indent valt weg):

-----------------------------------------------------------------------------------------------------------------------

#!/usr/bin/python

from math import floor

from operator import mul

def binom(n, m):

return reduce(mul, range(n+1-m, n+1),1)/reduce(mul, range(2, m+1),1)

L = 5

print [2**-L * (-1)**k * binom(L,k) * binom(2*L-2*k,L) for k in range(int(floor(L/2)+1))]

-----------------------------------------------------------------------------------------------------------------------

----> [7.875, -8,75, 1.875]

MATLAB programmeertaal is een van die talen die je binnen +- 10 minuten heb "geleerd" (lees: dit soort dingen in kunt doen) als je ooit C, Python (boven), PHP, Java of verwant en je een beetje serieus inzet (dit in tegenstelling tot Mathematica). De bovenste regel in je .m bestand zegt dat p de output var1 is en n de input var1.

Maak nu een lege lijst p. Dan begin je een for-loop die je ook weer beëindigt:

-------------

for k=0:floor(n/2) ... geef p(k index) waardes via formule ... end

-------------

Verder is het belangrijk dat je na elk commando ; doet anders wordt resultaat steeds geoutput.

Ik neem aan dat je de rest zelf kunt?

EDIT (@evilbro) zijn 'methode' in de beginpost lijkt verdacht veel op een fout overgetypte formule zoals boven in deze post

Gebruikersavatar
Berichten: 157

Re: [wiskunde] Matlab: legendreveelterm

[offtopic]let wel even dat de functie reduce niet meer beschikbaar is in python > 3.0.1[/offtopic]

Reageer