TOMM (Harmanic)
07-11-2007, 14:17
Habe bei schrittweite h=0,3 <=> n=3 folgendes für die einzelnen verfahren rausbekommen:
euler(1,6) = 2,26923
verb_euler(1,6) = 2,339959
rungekutta(1,6) = 2,35193181
.. allerdings weiß ich noch nicht wie ich das beispiel exakt lösen kann :wein:
mir fehlt hier wohl die kreativität für die trennung der variablen
Blöde Frage vielleicht, aber ich dachte wir haben y(1) = 1 angegeben. Wir sollen nun y(1.6) ausrechnen, ist bei n = 3 unser h dann nicht 0.2?? oder hab ich das was falsch/gar nicht verstanden??
Lg
Spite
Ja wär interessant zu wissen wie man das trennen kann :(
Ich probier da auch schon einige Zeit herum.
Lg
Spite
edit:
Wobei mir so einfällt:
ist y/x nicht tan(y)?
edit2:
nah Blödsinn....
Zum Evaluieren: Maple kommt zu dem Ergebnis
y(x) = ( ln(x) + 1) * x
Die exakte Lösung ist dann: y(1.6) = 2.352005806
Aber wie man das 'händisch' löst, darauf bin ich auch noch nicht gekommen.
Hm.. ich rechne jetzt schon ne ewigkeit rum... und komm irgendwie immer auf andere Werte...
Was verwendet ihr denn jeweils für die xi?? ist mir klar.. xi+1 = xi + h.. aber bei welchem xi fangt ihr an? :confused:
Wär cool wenn mir wer helfen könnt! ;-)
x_0 = 1
x_n = 1.6
n = 3
==> h = (x_n - x_0)/n = 0.2
x_0 = 1
x_1 = 1.2
x_2 = 1.4
x_3 = 1.6
berechnungen mit n=3 (h = 0.2)
EP: 2.29524 rel Fehler 0.0241
VEP: 2.34629 rel Fehler 0.00243
RK: 2.35199 rel Fehler 0.00000674
homogene lösung:
y_h'-\frac{1}{x}y_h=0
\frac{y_h'}{y_h}=\frac{1}{x}
ln(y_h)=ln(x)+c_0
y_h=c*x
partikuläre lsg:
y_p=c(x)*x
y_p'=c(x)'*x+c(x)
y_p'-\frac{1}{x}y_p=1
c(x)'*x+c(x)-\frac{1}{x}*c(x)*x=1
c(x)'*x=1
c(x)'=\frac{1}{x}
c(x)=ln(x)
y_p=c(x)*x=ln(x)*x
allg. lsg:
y=c*x+ln(x)*x
y(1)=1
1=c+ln(1)
c=1
y=x+ln(x)*x=x*(1+ln(x))
y(1.6)=2.352006
und als extra, ein R script, dass das alles ausrechnet:
f <- function(x,y) return(1+y/x)
ep <- function(a, b, n, f, y0) {
h <- (b-a)/n
xi <- a
yi <- y0
for (i in 1:n) {
yi <- yi + h*f(xi,yi)
xi <- xi + h
}
return(yi)
}
vep <- function(a, b, n, f, y0) {
h <- (b-a)/n
xi <- a
yi <- y0
for (i in 1:n) {
k1 <- f(xi,yi)
k2 <- f(xi+h,yi+h*k1)
yi <- yi + h/2*(k1+k2)
xi <- xi + h
}
return(yi)
}
rk <- function(a, b, n, f, y0) {
h <- (b-a)/n
xi <- a
yi <- y0
for (i in 1:n) {
k1 <- f(xi,yi)
k2 <- f(xi+h/2,yi+h/2*k1)
k3 <- f(xi+h/2,yi+h/2*k2)
k4 <- f(xi+h,yi+h*k3)
yi <- yi + h/6*(k1+2*k2+2*k3+k4)
xi <- xi + h
}
return(yi)
}
y_dgl <- (log(1.6)*1.6+1.6)
y_ep <- ep(1,1.6,3,f,1)
y_vep <- vep(1,1.6,3,f,1)
y_rk <- rk(1,1.6,3,f,1)
cat("Eulersches Polygonzugverfahren:\nWert:",y_ep,"\nFehler:",abs(y_ep-y_dgl)/y_dgl)
cat("\nVerbessertes Eulersches Polygonzugverfahren: \nWert:",y_vep,"\nFehler:",abs(y_vep-y_dgl)/y_dgl)
cat("\nRunge-Kutta-Verfahren: \nWert:",y_rk,"\nFehler:",abs(y_rk-y_dgl)/y_dgl)
vBulletin® v3.7.1, Copyright ©2000-2009, Jelsoft Enterprises Ltd.