Matlab numerieke methode
-
- 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!
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
Ik voer nu dit in: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.
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
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
Ik heb nu dit: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
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');
-
- Berichten: 102
Re: Matlab numerieke methode
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.Axioma91 schreef: ↑vr 18 mei 2012, 13:37Sorry, 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?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');
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');
-
- Berichten: 102
Re: Matlab numerieke methode
dankje 'k zal er ook nog eens wat gaan proberenAxioma91 schreef: ↑vr 18 mei 2012, 13:48Zoiets? Bij die eerste voorwaarde kreeg ik trouwens wel een constante som . Hmm bij nader inzien denk ik toch dat er ergens iets niet klopt. Ze convergeren namelijk wel naar een constant resultaat..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');
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.
Nu wel
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');
-
- Berichten: 102
Re: Matlab numerieke methode
Enorm bedankt!!Axioma91 schreef: ↑vr 18 mei 2012, 14:36
Ah ja, hij vergeet (ik) de eerste stap. Die plotmatrix bevat niet de beginvoorwaarde inderdaad.
Nu welCode: 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');