Springen naar inhoud

[wiskunde] Matlab: legendreveelterm


  • Log in om te kunnen reageren

#1

UndefinedMistake

    UndefinedMistake


  • 0 - 25 berichten
  • 2 berichten
  • Gebruiker

Geplaatst op 22 maart 2009 - 11:53

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!

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Bart

    Bart


  • >5k berichten
  • 7224 berichten
  • VIP

Geplaatst op 22 maart 2009 - 12:19

ceil(x)

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

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

#3

UndefinedMistake

    UndefinedMistake


  • 0 - 25 berichten
  • 2 berichten
  • Gebruiker

Geplaatst op 22 maart 2009 - 12:32

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!

#4

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 22 maart 2009 - 13:09

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.

#5

Lunae

    Lunae


  • >25 berichten
  • 43 berichten
  • Gebruiker

Geplaatst op 22 maart 2009 - 13:15

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

Veranderd door Lunae, 22 maart 2009 - 13:29


#6

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 22 maart 2009 - 14:27

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 LaTeX 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.

#7

Lunae

    Lunae


  • >25 berichten
  • 43 berichten
  • Gebruiker

Geplaatst op 22 maart 2009 - 15:12

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:
LaTeX
(zie http://mathworld.wol...Polynomial.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

Veranderd door Lunae, 22 maart 2009 - 15:17


#8

Chip

    Chip


  • >100 berichten
  • 157 berichten
  • Ervaren gebruiker

Geplaatst op 25 maart 2009 - 00:30

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

Veranderd door Wouser, 25 maart 2009 - 00:31






0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures