Seite 1 von 1

Heron-Verfahren mit R definieren

Verfasst: Fr Jan 27, 2017 11:43 am
von Informatikloser
Hallo Leute.
Ich habe von meinem Prof ein Arbeitsblatt bekommen mit Aufgaben zu R das ich lösen muss um Bonuspunkte für mein Studium zu kassieren. Die Aufgaben sind auch relativ einfach (Datensatz einlesen, filtern etc.) aber es gibt eine Aufgabe bei der ich mir schon seit Tagen die Zähne ausbeiße, ich schreib sie mal hier rein:
Das Heron-Verfahren ist ein Näherungsverfahren zur Berechnung von √a für a >
0. Dazu wird für einen beliebigen Startwert x0 6= 0 die Folge

Code: Alles auswählen

xn+1=(1/2)*(xn+(a/xn))
definiert, die für zunehmendes n ∈ N gegen √a konvergiert.
Definieren Sie eine Funktion heron(a, x_0, n), die den Näherungswert von
√a des Heron-Verfahrens mit Startwert x0 nach n Iterationen ausgibt.

Hab auch schon versucht die Funtkion zu definieren und ein paar Bedingungen einzubauen, weiß aber auch nicht ob das richtig ist:

Code: Alles auswählen

> func <- function(a,x_0,n){
+ heron <- x_0+1=(1/2)*(n+(a/n))
+ if(a<=0)
+ heron <- "a<=0, keine Lösung"
+ if(x_0==0)
+ heron <- "x_0=0, keine Lösung"
Ich bedanke mich schonmal bei allen die sich die Zeit dafür genommen haben das hier zu lesen und mir eventuell auch helfen! Bin leider sehr neu auf dem Gebiet der Programmierung.

Re: Heron-Verfahren mit R definieren

Verfasst: Fr Jan 27, 2017 2:16 pm
von jogo
Hallo Informatikloser,

willkommen im Forum! Leider hat das Forum momentan eine kleine Macke, so dass ich den Code nicht mit der geeigneten Formatierung darstellen kann.

Code: Alles auswählen

heron <- function(x0, a, n) {
  if (a<=0) stop("heron: a<=0, keine Lösung")
  if(x0==0) stop("heron: x0=0, keine Lösung")
  while (n>0) {
    x0 <- 0.5*(x0 + a/x0)
    n <- n-1
  }
  return(x0)
}
heron(2, 5, 1)
heron(2, 5, 2)
heron(2, 5, 3)
sqrt(5)
Gruß, Jörg

Re: Heron-Verfahren mit R definieren

Verfasst: Fr Jan 27, 2017 2:38 pm
von Informatikloser
Danke Jörg für deine Antwort! Ich bin jetzt schon ein ganzes Stück weiter, ich werde jetzt versuchen das vielleicht in eine for schleife einzupacken, denke das müsste gehen, vielen dank! Schönen Tag noch

Re: Heron-Verfahren mit R definieren

Verfasst: Fr Jan 27, 2017 3:32 pm
von jogo
dann ist statt der Konstruktion while(...) { } zu schreiben:

Code: Alles auswählen

for (i in 1:n) x0 <- 0.5*(x0 + a/x0)
Gruß, Jörg
p.s. natürlich kann man vorher noch testen, ob n wirklich größer gleich 1 ist