Help in Bissection algorithm
And have the function return a value. All values
set in the function will be destroyed when the
function is done - you must return something and
the caller must assign the return value to a variable
if you want to keep it.
E.g.,
raiz
function (f, a, b, e)
{
i <- 0
repeat {
if (i > 50) {
break
}
if (abs(a - b) < e) {
m = (a + b)/2
raiz1 = m
}
if (abs(a - b) > e) {
m = (a + b)/2
af = f(a)
if ((af * f(m)) > 0) {
a = m
}
if ((af * f(m)) < 0) {
b = m
}
}
i = i + 1
}
c(a, b) # bounds on estimate of root
}
z <- raiz(function(x)x^4 - 3, -2, -1, 1e-10) z
[1] -1.316074 -1.316074
z^4 - 3
[1] 7.566836e-12 -5.231717e-10 Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com
-----Original Message----- From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Berend Hasselman Sent: Thursday, November 29, 2012 12:13 PM To: finehko Cc: r-help at r-project.org Subject: Re: [R] Help in Bissection algorithm On 29-11-2012, at 16:18, finehko wrote:
I'm trying to make a function witch recieves a function "f", "a" and "b", and the error "e". When I run the algorithm without labeling it a function and typing the values it works, but when I just try to save it in a function It doesn't ' bug but don't do anything.
I don't understand what you mean with this: "doesn't ' bug but don't do anything"
Here's the code, anyone know whats
happening?
raiz=function(f,a,b,e){
repeat{
if(i>50){break}
if(abs(a-b)<e){m=(a+b)/2
raiz1=m}
if(abs(a-b)>e){
m=(a+b)/2
af=f(a)
if((af*f(m))>0){a=m}
if((af*f(m))<0){b=m}}
i=i+1}}
Initialize i before starting the repeat loop. i <- 1 Berend
______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.