[wiskunde] Matlab: legendreveelterm
Moderators: ArcherBarry, Fuzzwood
-
- 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!
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!
- Berichten: 7.224
Re: [wiskunde] Matlab: legendreveelterm
Code: Selecteer alles
ceil(x)
Code: Selecteer alles
sum(sum([p]))
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!
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!
- Berichten: 6.905
Re: [wiskunde] Matlab: legendreveelterm
"alle" variabelen zijn vectoren.En welkte vectorelementen bedoel je?
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
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.Het probleem is meer: Ik heb slechts 3 inleidingssessies gehad met matlab.
-
- 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:
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
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
- Berichten: 157
Re: [wiskunde] Matlab: legendreveelterm
[offtopic]let wel even dat de functie reduce niet meer beschikbaar is in python > 3.0.1[/offtopic]