Springen naar inhoud

Matlab numerieke methode


  • Log in om te kunnen reageren

#1

Vogeltjes

    Vogeltjes


  • >25 berichten
  • 100 berichten
  • Ervaren gebruiker

Geplaatst op 18 mei 2012 - 10:55

Hallo,
ik zit met een matlab-probleem. Ik heb geen idee hoe ik het volgende kan plotten:

u1n+1 = u1n + 2u2n - 2u1n+1
u2n+1 = u2n + 2u1n + 2u3n - 4u2n+1
u3n+1 = u3n + 2u2n -2u3n+1

Dit alles moet in 1 plot komen, en dan ook nog daarin de lijn waarbij deze bovenstaande 3 'lijnen' bij elkaar zijn opgeteld.

Het ging om een differentiaalvergelijking, waarvan je een plot wilt van de Eulermethode, maar dan iets aangepast. Je hebt dus een vector(u1,u2,u3) en u1n+1 staat dan voor de 1e component, op tijdstip n+1. Overigens kan die '2' ook een ander getal zijn, maar wel groter dan 1.(en de 4 moet dan ook worden aangepast, hij moet 2x zo groot zijn als het andere getal (hier dus 2)).

Ik heb al overal lopen zoeken, met beschrijvingen van hoe je zoiets zou moeten kunnen doen, maar ik kom niet echt wat verder. Hopelijk kan iemand helpen!

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

#2

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 18 mei 2012 - 11:20

Voor de gegeven vergelijkingen. Breng de (n+1)-termen naar links. Deel beide kanten van elke vergelijking zodat er aan de linkerkant geen factor meer voor de u(n+1) staat. Schrijf het geheel als een matrixvermenigvuldiging:
LaTeX
Hiermee kan je simpel de volgende u berekenen gebaseerd op de huidige u. Doe dit voor de tijdspanne waarnaar je wilt kijken en plot het resultaat.

#3

Vogeltjes

    Vogeltjes


  • >25 berichten
  • 100 berichten
  • Ervaren gebruiker

Geplaatst op 18 mei 2012 - 11:29

Voor de gegeven vergelijkingen. Breng de (n+1)-termen naar links. Deel beide kanten van elke vergelijking zodat er aan de linkerkant geen factor meer voor de u(n+1) staat. Schrijf het geheel als een matrixvermenigvuldiging:
LaTeX


Hiermee kan je simpel de volgende u berekenen gebaseerd op de huidige u. Doe dit voor de tijdspanne waarnaar je wilt kijken en plot het resultaat.

Ik voer nu dit in:
u(n+1) = [1/3 2/3 0;2/5 1/5 2/5;0 2/3 1/3]u(n)
maar dan klaagt hij : Error: Unexpected MATLAB expression.
Komma's tussen de getallen helpt niet, en ipv / heb ik ook ./ geprobeerd, maar dat helpt ook niet.

Veranderd door Vogeltjes, 18 mei 2012 - 11:34


#4

Axioma91

    Axioma91


  • >250 berichten
  • 264 berichten
  • Ervaren gebruiker

Geplaatst op 18 mei 2012 - 11:39

Je moet het * teken tussen ] en u(n) niet vergeten

#5

Vogeltjes

    Vogeltjes


  • >25 berichten
  • 100 berichten
  • Ervaren gebruiker

Geplaatst op 18 mei 2012 - 11:59

Je moet het * teken tussen ] en u(n) niet vergeten

Ojah! Dankje. Alleen nu zegt ie:
Undefined function 'u' for input arguments of type 'double'

#6

Axioma91

    Axioma91


  • >250 berichten
  • 264 berichten
  • Ervaren gebruiker

Geplaatst op 18 mei 2012 - 12:14

Heb je een randvoorwaarde opgegeven? Zoiets als u(1) = [1;1;1]; ? (Als dat niet werkt even de ; uit die regel weghalen. (En hij moet ook wel weten wat die n is, staat dat stukje in een for-loop?) - Misschien kan je de rest van je code hier ook even plakken

Veranderd door Axioma91, 18 mei 2012 - 12:18


#7

Vogeltjes

    Vogeltjes


  • >25 berichten
  • 100 berichten
  • Ervaren gebruiker

Geplaatst op 18 mei 2012 - 12:27

Heb je een randvoorwaarde opgegeven? Zoiets als u(1) = [1;1;1]; ? (Als dat niet werkt even de ; uit die regel weghalen. (En hij moet ook wel weten wat die n is, staat dat stukje in een for-loop?) - Misschien kan je de rest van je code hier ook even plakken


Ik heb nu dit:

for n=1:4
u(n+1) = [1./3 2./3 0;2./5 1./5 2./5;0 2./3 1./3]*u(n);
u(1)=[1;1;1];
end

#8

Axioma91

    Axioma91


  • >250 berichten
  • 264 berichten
  • Ervaren gebruiker

Geplaatst op 18 mei 2012 - 12:37


clc
clear all
close all

N=10;%Stapjes
u = [1;2;3];
PlotMatrix = zeros(N,3);
for n=1:N
	u = [1/3 2/3 0;2/5 1/5 2/5;0 2/3 1/3]*u;
	PlotMatrix(n,<img src='http://www.wetenschapsforum.nl/public/style_emoticons/<#EMO_DIR#>/icon_smile.gif' class='bbc_emoticon' alt=':)' />=u;
end
X = 1:N;
plot(X, PlotMatrix(:,1),'b',X, PlotMatrix(:,2),'r',X, PlotMatrix(:,3),'g');
Sorry, die u(1)=[...] is een ongeldige expressie. u(1) leest matlab als vectorwaarde, niet als vector. Het kan wel als je u(1, : ) definieert, maar dit werkt ook.

Veranderd door Axioma91, 18 mei 2012 - 12:43


#9

Vogeltjes

    Vogeltjes


  • >25 berichten
  • 100 berichten
  • Ervaren gebruiker

Geplaatst op 18 mei 2012 - 12:44


clc
clear all
close all

N=10;%Stapjes
u = [1;2;3];
PlotMatrix = zeros(N,3);
for n=1:N
	u = [1/3 2/3 0;2/5 1/5 2/5;0 2/3 1/3]*u;
	PlotMatrix(n,<img src='http://www.wetenschapsforum.nl/public/style_emoticons/<#EMO_DIR#>/icon_smile.gif' class='bbc_emoticon' alt=':)' />=u;
end
X = 1:N;
plot(X, PlotMatrix(:,1),'b',X, PlotMatrix(:,2),'r',X, PlotMatrix(:,3),'g');
Sorry, die u(1)=[...] is een ongeldige expressie. u(1) leest matlab als vectorwaarde, niet als vector. Het kan wel als je u(1, : ) definieert, maar dit werkt ook. Alleen; de stapgrootte is nu 1 met de Euler voorwaarts - is dat wat je wilt?

Wauw, ontzettend bedankt! De stapgrootte maakt niet zoveel uit. Het gaat erom dat ik een plot kon maken waaruit bleek dat de som van die lijnen niet constant is.
Deze plot moet ik dus zien als de waarden van u op ''tijdstippen'' 1,2,3 tm 10?
En als ik ook hierin de plot van de sommen hiervan wil hebben, wat kan ik dan doen?

#10

Axioma91

    Axioma91


  • >250 berichten
  • 264 berichten
  • Ervaren gebruiker

Geplaatst op 18 mei 2012 - 12:48


clc
clear all
close all

N=10;%Stapjes
u = [2;2;3];
PlotMatrix = zeros(N,3);
for n=1:N
		u = [1/3 2/3 0;2/5 1/5 2/5;0 2/3 1/3]*u;
		PlotMatrix(n,<img src='http://www.wetenschapsforum.nl/public/style_emoticons/<#EMO_DIR#>/icon_smile.gif' class='bbc_emoticon' alt=':)' />=u;
end
X = 1:N;
SomVector = PlotMatrix(:,1)+PlotMatrix(:,2)+PlotMatrix(:,3)
plot(X, PlotMatrix(:,1),'b',X, PlotMatrix(:,2),'r',X, PlotMatrix(:,3),'g',X,SomVector,'m');
Legend('u1','u2','u3','u1+u2+u3');
Zoiets? Bij die eerste voorwaarde kreeg ik trouwens wel een constante som :P. Hmm bij nader inzien denk ik toch dat er ergens iets niet klopt. Ze convergeren namelijk wel naar een constant resultaat..

Veranderd door Axioma91, 18 mei 2012 - 12:52


#11

Vogeltjes

    Vogeltjes


  • >25 berichten
  • 100 berichten
  • Ervaren gebruiker

Geplaatst op 18 mei 2012 - 13:11


clc
clear all
close all

N=10;%Stapjes
u = [2;2;3];
PlotMatrix = zeros(N,3);
for n=1:N
		u = [1/3 2/3 0;2/5 1/5 2/5;0 2/3 1/3]*u;
		PlotMatrix(n,<img src='http://www.wetenschapsforum.nl/public/style_emoticons/<#EMO_DIR#>/icon_smile.gif' class='bbc_emoticon' alt=':)' />=u;
end
X = 1:N;
SomVector = PlotMatrix(:,1)+PlotMatrix(:,2)+PlotMatrix(:,3)
plot(X, PlotMatrix(:,1),'b',X, PlotMatrix(:,2),'r',X, PlotMatrix(:,3),'g',X,SomVector,'m');
Legend('u1','u2','u3','u1+u2+u3');
Zoiets? Bij die eerste voorwaarde kreeg ik trouwens wel een constante som :P. Hmm bij nader inzien denk ik toch dat er ergens iets niet klopt. Ze convergeren namelijk wel naar een constant resultaat..

dankje :) 'k zal er ook nog eens wat gaan proberen

edit: die u=[2;2;3], dat zijn toch de beginvoorwaarden? Die zie ik niet terug in de plot..

Veranderd door Vogeltjes, 18 mei 2012 - 13:21


#12

Axioma91

    Axioma91


  • >250 berichten
  • 264 berichten
  • Ervaren gebruiker

Geplaatst op 18 mei 2012 - 13:36

Ah ja, hij vergeet (ik) de eerste stap. Die plotmatrix bevat niet de beginvoorwaarde inderdaad.

clc
clear all
close all

N=10;%Stapjes
u = [10;2;3];
PlotMatrix = zeros(N,3);
PlotMatrix(1,<img src='http://www.wetenschapsforum.nl/public/style_emoticons/<#EMO_DIR#>/icon_smile.gif' class='bbc_emoticon' alt=':)' />=u;
for n=1:N-1    
        u = [1/3 2/3 0;2/5 1/5 2/5;0 2/3 1/3]*u;
        PlotMatrix(n+1,<img src='http://www.wetenschapsforum.nl/public/style_emoticons/<#EMO_DIR#>/icon_smile.gif' class='bbc_emoticon' alt=':)' />=u;
end
X = 1:N;
SomVector = PlotMatrix(:,1)+PlotMatrix(:,2)+PlotMatrix(:,3)
plot(X, PlotMatrix(:,1),'b',X, PlotMatrix(:,2),'r',X, PlotMatrix(:,3),'g',X,SomVector,'m');
Legend('u1','u2','u3','u1+u2+u3');
Nu wel

Veranderd door Axioma91, 18 mei 2012 - 13:37


#13

Vogeltjes

    Vogeltjes


  • >25 berichten
  • 100 berichten
  • Ervaren gebruiker

Geplaatst op 18 mei 2012 - 14:09

Ah ja, hij vergeet (ik) de eerste stap. Die plotmatrix bevat niet de beginvoorwaarde inderdaad.


clc
clear all
close all

N=10;%Stapjes
u = [10;2;3];
PlotMatrix = zeros(N,3);
PlotMatrix(1,<img src='http://www.wetenschapsforum.nl/public/style_emoticons/<#EMO_DIR#>/icon_smile.gif' class='bbc_emoticon' alt=':)' />=u;
for n=1:N-1	
		u = [1/3 2/3 0;2/5 1/5 2/5;0 2/3 1/3]*u;
		PlotMatrix(n+1,<img src='http://www.wetenschapsforum.nl/public/style_emoticons/<#EMO_DIR#>/icon_smile.gif' class='bbc_emoticon' alt=':)' />=u;
end
X = 1:N;
SomVector = PlotMatrix(:,1)+PlotMatrix(:,2)+PlotMatrix(:,3)
plot(X, PlotMatrix(:,1),'b',X, PlotMatrix(:,2),'r',X, PlotMatrix(:,3),'g',X,SomVector,'m');
Legend('u1','u2','u3','u1+u2+u3');
Nu wel

Enorm bedankt!!

#14

Axioma91

    Axioma91


  • >250 berichten
  • 264 berichten
  • Ervaren gebruiker

Geplaatst op 18 mei 2012 - 14:11

Graag gedaan!





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures