Matlab SDIRK2 < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Aufgabe | http://jones.math.unibas.ch/~harbrech/teaching/nde/blatt4.pdf
Es geht um die Programmieraufgabe 4. |
Wäre jemand so lieb und könnte sie mir korrigieren?
Die Funktion:
function [mm] [y_1,y_2]=SDIRK(y_0,n,alpha,tol,f)
[/mm]
h=5/n;
t=5*(0:n)/n;
[mm] y_1=[y_0(1);zeros(n,1)];
[/mm]
[mm] y_2=[y_0(2);zeros(n,1)];
[/mm]
Df=@(t,yt) [alpha*(1-yt(2)),-alpha*yt(1);yt(2),yt(1)-1];
alpha=[(2-sqrt(2))/2;1];
beta=[(2-sqrt(2))/2,0;sqrt(2)/2,(2-sqrt(2))/2];
gamma=[sqrt(2)/2,(2-sqrt(2))/2];
for i=1:n
[mm] Y=[y_1(i);y_2(i)];
[/mm]
g=[1;1];
k=[1;1];
for j=1:2
if j==1
a=Y;
else
[mm] a=Y+h*beta(2,1)*k_1;
[/mm]
end
b=h*beta(j,j);
while norm(g)>tol
[mm] g=(eye(2)-b*Df(t(i)+h*alpha(j),a+b*k))\(-(k-f(t(i)+h*alpha(j),a+b*k)));
[/mm]
k=k+g;
end
if j==1
[mm] k_1=k;
[/mm]
else
[mm] k_2=k;
[/mm]
end
end
[mm] y_1(i+1)=y_1(i)+h*gamma*[k_1(1);k_2(1)];
[/mm]
[mm] y_2(i+1)=y_2(i)+h*gamma*[k_1(2);k_2(2)];
[/mm]
end
die main Datei
clear all
close all
clc
n = 10;
[mm] y_0 [/mm] = [3;1];
alpha = 10;
tol = 10^(-10);
f1 = @(t,yt) [alpha*yt(1)*(1-yt(2));yt(2)*(yt(1)-1)];
f2 = @(t,yt) [-500.5,499.5;499.5,-500.5]*yt;
f = @(t,yt) f1(t,yt);
x = 5*(0:n)/n;
[mm] [y_1,y_2]=SDIRK(y_0,n,alpha,tol,f);
[/mm]
figure(1)
[mm] plot(x,y_1, 'g',x,y_2,'b'),
[/mm]
legend('Beute','Räuber'),
n = 100000;
[mm] y_0 [/mm] = [3;1];
alpha = 10;
tol = 10^(-10);
f1 = @(t,yt) [alpha*yt(1)*(1-yt(2));yt(2)*(yt(1)-1)];
f2 = @(t,yt) [-500.5,499.5;499.5,-500.5]*yt;
f = @(t,yt) f1(t,yt);
x = 5*(0:n)/n;
[mm] [y_1,y_2]=SDIRK(y_0,n,alpha,tol,f);
[/mm]
figure(2)
plot(x, [mm] y_1,'g',x,y_2,'b'),
[/mm]
legend('Beute','Räuber')
Es gibt mir kein Plot heraus, da es bei n=10 nicht konvergiert. Wieso? Wo ist der Fehler? Ich suche schon sehr lange. Bei n=100000 gibt es keine Probleme.
Danke schonmal und mfg:)
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 23:20 Mo 15.10.2012 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|