Matlab numerieke methode

Moderators: jkien, Xilvo

Reageer
Berichten: 102

Matlab numerieke methode

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!

Berichten: 7.068

Re: Matlab numerieke methode

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:
\(u^{n+1} = A \cdot u^{n}\)
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.

Berichten: 102

Re: Matlab numerieke methode

EvilBro schreef: vr 18 mei 2012, 12: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:
\(u^{n+1} = A \cdot u^{n}\)
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.

Berichten: 264

Re: Matlab numerieke methode

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

Berichten: 102

Re: Matlab numerieke methode

Axioma91 schreef: vr 18 mei 2012, 12:39
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'

Berichten: 264

Re: Matlab numerieke methode

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

Berichten: 102

Re: Matlab numerieke methode

Axioma91 schreef: vr 18 mei 2012, 13: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
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

Berichten: 264

Re: Matlab numerieke methode

Code: Selecteer alles




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, :) =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.

Berichten: 102

Re: Matlab numerieke methode

Axioma91 schreef: vr 18 mei 2012, 13:37

Code: Selecteer alles




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, :) =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?

Berichten: 264

Re: Matlab numerieke methode

Code: Selecteer alles




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, :) =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..

Berichten: 102

Re: Matlab numerieke methode

Axioma91 schreef: vr 18 mei 2012, 13:48

Code: Selecteer alles


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, :) =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..

Berichten: 264

Re: Matlab numerieke methode

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

Code: Selecteer alles




clc

clear all

close all



N=10;%Stapjes

u = [10;2;3];

PlotMatrix = zeros(N,3);

PlotMatrix(1, :) =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, :) =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

Berichten: 102

Re: Matlab numerieke methode

Axioma91 schreef: vr 18 mei 2012, 14:36
Ah ja, hij vergeet (ik) de eerste stap. Die plotmatrix bevat niet de beginvoorwaarde inderdaad.

Code: Selecteer alles




clc

clear all

close all



N=10;%Stapjes

u = [10;2;3];

PlotMatrix = zeros(N,3);

PlotMatrix(1, :) =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, :) =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!!

Berichten: 264

Re: Matlab numerieke methode

Graag gedaan!

Reageer