[wiskunde] legendreveelterm in matlab

Moderators: ArcherBarry, Fuzzwood

Reageer
Berichten: 6

[wiskunde] legendreveelterm in matlab

Hallo,

Ik zit al twee dagen mijn hoofd te breken over de volgende code:

Code: Selecteer alles

function L = opdracht1(n) %Functie L aanroepbaar in matlab met opdracht1(n) met n = graad van veelterm

if n == 0; %Bij graad 0, L = 0

L = 1;

elseif n == 1; %Bij graad 1, L = [1 

   %

  0]

L = [1 

 0];

else

x = zeros (n+1,1) %nulvector creëren

k = n/2;

j = 2*k-n;

ceil (j);

m = j - n;

end

if mod(n,2); %mod(m,2): 0 = even, 1 = oneven.

a = 0 %als m oneven

else %m is even

a = (((-1)^((n-j)/2))./(2^n).*(factorial(n + j))./((factorial (j)).*(factorial((n+j)/2)).*(factorial((n-j)/2))))

sum (0,n)

L = a*(x^j)

end
Deze code wil ik gebruiken om een legendre veelterm Pn(x) te berekenen nadat de gebruiker de code 'opdracht1(n)' invoert. Ik maak hiervoor gebruik van de Rodrigues formule. Het onderscheid tussen een even en oneven resultaat voor n-j is gemaakt omdat de uitkomst van a nul moet zijn, als n-j oneven is. De ceil functie gebruik ik om het getal m af te ronden zodat ik mod kan gebruiken.

Graag wat reacties want ik vermoed dat er heel wat schort aan deze code. Voornamelijk de uitkomst als vector weergeven is een groot probleem. (Hiervoor gebruik ik de functie zeros).

Gebruikersavatar
Berichten: 24.578

Re: [wiskunde] legendreveelterm in matlab

Welkom op het forum Huiswerk en Practica.

Jij wilt vlot hulp. Dat is alleen goed mogelijk als je daar zelf wat voor doet.

Naast de algemene regels van dit forum hebben we voor dit huiswerkforum een paar speciale regels en tips.

Die vind je in de huiswerkbijsluiter

In die huiswerkbijsluiter staat bijvoorbeeld:

Quote[td] [color="#808080"][b][u]VAKGEBIED-TAGS[/u][/b] [i]Plaats het vakgebied waarop je vraag betrekking heeft tussen rechte haken in de titel. bijv: [biologie] of [frans]. Zo blijft dit huiswerkforum overzichtelijk.[/i] [/color] [/td]
Hebben we even voor je gedaan. Denk je er de volgende keer zelf aan?[/color]
"Malgré moi, l'infini me tourmente." (Alfred de Musset)

Berichten: 6

Re: [wiskunde] legendreveelterm in matlab

Sorry, die had ik nog niet gezien. Ik zal er in het vervolg aan denken!

Berichten: 7.068

Re: [wiskunde] legendreveelterm in matlab

Deze code wil ik gebruiken om een legendre veelterm Pn(x) te berekenen nadat de gebruiker de code 'opdracht1(n)' invoert. Ik maak hiervoor gebruik van de Rodrigues formule.
Geef de formule die je gebruikt. Leg vervolgens het algoritme uit dat je wilt gebruiken. Mocht je dan een specifieke vraag hebben dan geven wij wel hulp.

Berichten: 6

Re: [wiskunde] legendreveelterm in matlab

De formule zit in bijlage bij deze reactie, deze wil ik dus gebruiken om de legendre veeltermen te laten berekenen.
Bijlagen
form.jpg
form.jpg (14.33 KiB) 251 keer bekeken

Berichten: 7.068

Re: [wiskunde] legendreveelterm in matlab

Probeer het volgende om te zetten naar werkelijke code:

Code: Selecteer alles

Maak een vector met alleen maar nullen van de juiste lengte.

Laat de waarde van j lopen van 0 tot n,

	als n-j oneven is, dan doe je niks (want er staat dan toch al een nul in de vector).

	als n-j even is, dan reken je a_j uit en zet deze op de juiste plek in de vector.

geef de uiteindelijke vector terug als het antwoord.

Berichten: 6

Re: [wiskunde] legendreveelterm in matlab

Bedankt ;) , ben juist met 'for' command beginnen experimenteren.

Dit heb ik:

Code: Selecteer alles

x = zeros (n+1,1); %nulvector creëren

for j = 0:n;

if mod(n-j,2)==0;

a(j) = (((-1).^((n - j)/2))./(2^n).*(factorial(n + j))./((factorial (j)).*(factorial((n+j)/2)).*(factorial((n-j)/2))));

end
Alleen vindt ik dus niet hoe ik deze nu op de juiste plaats kan zetten in de vector, zoals jij aanhaalt.

Graag nog met helpende reacties. Ik wil dit mysterie doorgronden :P

EDIT: Kan ik de plaats voor het invoegen ook besturen met j?

Berichten: 6

Re: [wiskunde] legendreveelterm in matlab

Zou dit werken? Sorry dat ik het niet zelf probeer maar matlab geeft nog wat andere errors.

Code: Selecteer alles

x = zeros (n+1,1); %nulvector creëren

for j = 0:n;

if mod(n-j,2)==0;

a(j) = (((-1).^((n - j)/2))./(2^n).*(factorial(n + j))./((factorial (j)).*(factorial((n+j)/2)).*(factorial((n-j)/2))));

L = x(j) + a

Berichten: 6

Re: [wiskunde] legendreveelterm in matlab

Nogmaals een update:

Code: Selecteer alles

function L = opdracht1(n) %Functie L aanroepbaar in matlab met opdracht1(n) met n = graad van veelterm

if n == 0; %Bij graad 0, L = 0

L = 1

elseif n == 1; %Bij graad 1, L = [1 

   %

  0]

L = [1; 

0]

else

x = zeros (n+1,1); %nulvector creëren

for j = 0:n;

if mod(n-j,2)==0;

a(j) = (((-1).^((n - j)/2))./(2^n).*(factorial(n + j))./((factorial (j)).*(factorial((n+j)/2)).*(factorial((n-j)/2))));

L = x(j) + a

end

end

end
Ik vraag me alleen af hoe ik deze kan laten uitvoeren zonder error. Zolang ik van nul begin te tellen heeft a immers geen oplossing voor de eerste berekening met j=0. Als ik van j = 1 begin te tellen bekom ik voor n=2:

0 1.5000

Dit klopt want het juiste resultaat moet zijn:

-0.5000 0 1.5000

Alleen die nul blokkeert het dus.

Berichten: 7.068

Re: [wiskunde] legendreveelterm in matlab

x(j) is het j-de element van de vector x. Probeer de volgende code eens:

Code: Selecteer alles

A = [1 2 3]

size(A)

size(A(2))


Als je in Matlab dingen optelt moeten ze dezelfde dimensies hebben. Bekijk de dimensies eens van de volgende statement in je code:

Code: Selecteer alles

L = x(j) + a

Reageer