Ich schreibe ein Programm in Bezug auf die folgende Randwertproblem zu lösen mit Schieß Bisektionsmethode:Matlab Plot Vektoren müssen die gleiche Länge haben
y''-y+x=0, y(0)=y(1)=0.
ich wandeln diese erste auf ein System erster Ordnung Gleichungen, set
y'=z
stellen dann lasse ich dydt den Vektor (y 'z'), und kommen mit der Skriptdatei:
function dydt=shoot(t,y)
dydt=[y(2);y(1)-t]
end
Damit ich mit dem folgenden Code dann kommt:
clear
clc
a=0;
b=1;
alpha=0;
beta=0;
s(1)=(beta-alpha)/(b-a);
s(2)=-1
[G,Y]=ode113('shoot',[a b],[alpha;s(1)]);
[G,Z]=ode113('shoot',[a b],[alpha;s(2)])
hold
tol=1e-4
u=s(1);
v=s(2);
while abs(u-v)>tol;
s(3)=(u+v)/2;
[G,W]=ode113('shoot',[a b],[alpha;s(3)]);
if W(end,1)>0
u=s(3);
else
v=s(3);
end
end
[G,W]=ode113('shoot',[a b],[alpha;s(3)])
plot(G,Y(:,1),'-o', G,Z(:,1),'-o',G,W(:,1),'-o')
Dann laufe ich das Programm, sagte MATLAB ich die Handlung Argument falsch bin mit, wo Plot Vektoren die gleichen Längen aufweisen müssen. Ich habe keine Ahnung, wie ich dieses Problem beheben kann. Jede Hilfe wird geschätzt.
Wie groß ist 'G' und wie groß ist' Y (:, 1) '? Sie müssen die gleiche Größe haben. – Suever
Ihre Iteration würde in einem Schritt enden, wenn Sie die Sekantenmethode (oder die Regula-Falsi-Methode für eine Klammervariante) verwenden würden. Das Problem ist linear, daher hängt der zweite Grenzwert linear von dem ersten ab, und diese lineare Funktion kann durch zwei Punkte bestimmt werden. – LutzL
@LutzL Ich glaube ich benutze die Halbierung nach zwei Schießereien. Meinst du meine Schleife endet nach einem Schritt in diesem Fall? –