Springen naar inhoud

[wiskunde] probleem splines in matlab


  • Log in om te kunnen reageren

#1

LiesbethDN

    LiesbethDN


  • >25 berichten
  • 96 berichten
  • Ervaren gebruiker

Geplaatst op 30 november 2008 - 18:27

Ik ben bezig aan een opgave waarin we allerlei benaderingstechnieken moeten toepassen en met elkaar vergelijken. Op dit moment ben ik bezig aan een opgave ivm splines.

Ik heb gevonden hoe je in matlab splines berekent, en de grafiek van mijn functie dmv benadering met splines ziet er telkens logisch uit, het is bij de foutenkromme dat het mis gaat.

Ik heb volgend script :

function vierkant_spline = oefening6(m)x = linspace(0, 2*pi);xx = zeros(1, m+1);vierkant = f_theta(x);for i = 1 : m      xx(i) = (2*(i - 1)*pi)/m;endxx(m + 1) = 2*pi;vierkant_spline = spline(x, vierkant, xx);subplot(1,2,1);plot(vierkant_spline.*cos(xx), vierkant_spline.*sin(xx));axis([-3/2, 3/2, -3/2, 3/2]);title('Het vierkant dmv splines');subplot(1,2,2);fout = vierkant - vierkant_spline;plot(xx, fout);axis([0, 2*pi, -1/2, 1/2]);title('De foutenkromme');

Ik weet ook dat het fout gaat omdat vierkant en vierkant_spline niet dezelfde dimensie hebben.
Volgende dingen heb ik al geprobeerd, weliswaar zonder juist resultaat :
  • x = linspace(0, 2*pi, m + 1) ipv gewoon x = 0 : 2*pi;
  • ik heb ook al geprobeerd om de matrix "vierkant" te "herconstrueren" om het zo te noemen, door het grootste en kleinste element te nemen uit de matrix, en hiertussen een interval van m + 1 punten te construeren, dit gaf dus een absurde foutenkromme
Heeft iemand een idee dat mij vooruit kan helpen aub ?

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 30 november 2008 - 18:40

Als je de foutencurve tussen je functie f_theta en de spline wilt bekijken, zul je f_theta(xx) met spline(x, vierkant, xx) moeten vergelijken. Dan vergelijk je immers de werkelijke functie met je geinterpoleerde functie.
If I have seen further it is by standing on the shoulders of giants.-- Isaac Newton

#3

LiesbethDN

    LiesbethDN


  • >25 berichten
  • 96 berichten
  • Ervaren gebruiker

Geplaatst op 30 november 2008 - 18:51

Dat dacht ik ook, maar dan is de foutenkromme altijd constant 0, terwijl er duidelijk door de spline interpolatie geen perfect vierkant komt te staan.

#4

Jan van de Velde

    Jan van de Velde


  • >5k berichten
  • 44869 berichten
  • Moderator

Geplaatst op 30 november 2008 - 20:11

Welkom :D 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:

VAKGEBIED-TAGS
Plaats het vakgebied waarop je vraag betrekking heeft tussen rechte haken in de titel.
bijv: [biologie] of [frans]. Zo blijft dit huiswerkforum overzichtelijk.

Hebben we even voor je gedaan. Denk je er de volgende keer zťlf aan??
ALS WIJ JE GEHOLPEN HEBBEN....
help ons dan eiwitten vouwen, en help mee ziekten als kanker en zo te bestrijden in de vrije tijd van je chip...
http://www.wetenscha...showtopic=59270

#5

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 30 november 2008 - 20:31

Voer de volgende commando's eens uit in Matlab (terzijde: ik gebruik octave i.p.v. Matlab, maar ga ervan uit dat het hetzelfde oplevert):
x = linspace(0, 2*pi);
size(x)
Dit geeft de dimensies van 'x'. Is het wat je verwacht?

Doe hierna eens:
y = 0 : 2*pi;
size(y)
Heeft 'y' dezelfde dimensie als 'x'?

Probeer nu:
x-y
Geeft dit dezelfde foutmelding als je programma?

Als je twee vectoren van elkaar af wilt trekken dan zul je ervoor moeten zorgen dat beide vectoren dezelfde afmetingen hebben. Ik denk ook dat je de functie 'spline' nog eens goed moet bekijken (help spline).

#6

LiesbethDN

    LiesbethDN


  • >25 berichten
  • 96 berichten
  • Ervaren gebruiker

Geplaatst op 01 december 2008 - 09:12

Ik heb ondertussen het verschil door tussen linspace en de andere interval notatie.

Maar ik begrijp niet zo goed wat er fout is aan mijn gebruik van de functie "spline", ik heb het stukje in de helpfile er nog eens op nagelezen, en ik zie niet echt wat er anders zou kunnen gedaan worden.
Toch ben ik er mij van bewust dat de fout daar wel eens kan liggen, want wanneer ik in mijn plot ook het vierkant erbij plot, is er inderdaad geen fout, dus ik begrijp het eventjes niet goed meer wat er fout loopt.

#7

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 01 december 2008 - 09:39

Maar ik begrijp niet zo goed wat er fout is aan mijn gebruik van de functie "spline"

Ik zie dat ik hier verwarring heb gezaaid. Ik bedoelde dat je goed moest kijken hoe de dimensie van de inputs invloed heeft op de dimensie van de output (dat die gelijk is aan die van xx).

Terzijde: waarom maak je een functie van je hele programma?

% aantal samples waarop de spline-benadering gebaseerd wordt.n_samples = 100;% aantal samples waarmee de benadering gecontroleerd wordt.n_check = 1000;t = linspace(0, 2*pi, n_samples);tt = linspace(0, 2*pi, n_check);vierkant_echt = f_theta(tt);vierkant_spline = spline(t, f_theta(t), tt);fout = vierkant_echt - vierkant_spline;

#8

LiesbethDN

    LiesbethDN


  • >25 berichten
  • 96 berichten
  • Ervaren gebruiker

Geplaatst op 01 december 2008 - 10:08

Ok, bedankt, nu werkt het zoals het zou moeten.
Ik denk dat ik inderdaad de functie spline een beetje fout begrepen had qua dimensies etc.

Ik heb een functie gemaakt van het programma, omdat het aantal punten dat je gebruikt voor de spline mee te berekenen variabel moest kunnen zijn, en ik zo een aantal punten kan meegeven.





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures