[R] NEWTON ALGORITHM

Berend Hasselman bhh at xs4all.nl
Thu Dec 22 11:48:41 CET 2011


delongman wrote
> 
> Hi,
> 
> My name is Curtis and I'm a 1st year student in Biochemistry at the
> University of Geneva. I need some help completing the code for my NEWTON
> ALGORITHM. It is a bonus exercice to our autumn semester maths exam and we
> can hand it in or not. Usually people copy and paste but I decided to sit
> down and review theory and ask for help left right and center.
> 
> My problem is that I cannot get my function to give me the solution. Here
> is my code:
> 
> ## PRIMARY FUNCTION
> f=function(x){
> out=(2/(3))*exp(x^3)-(10)*log(x)
> return(out)
> }
> ## 1ST DERIVATIVE
> fp=function(x){
> out=(2)*(x^2)*exp(x^3)-(10/x)
> return(out)
> }
> ## 2ND DERIVATIVE
> fpp=function(x){
> out=(4)*(x)*exp(x^3)+(6)*(x^4)*exp(x^3)+(10/x^2)
> return(out)
> }
> 
> I am trying to find the "zero" of  "fp",my 1st derivative, with my newton
> algorithm:
> 
> newbon=function(x0,epsi,f,fp){
> 
> ## where "a" corresponds to x^n et
> 
> ## "b" corresponds to x^n+1
> 
> ## We are looking for x^n+1 such that f(x^n+1)=0
> 
> ## NB: fp(a)*(a-b)=f(a) when f(b)=0
> 
>   a=x0
>   b=(fp(a)*a-f(a))/fp(a)
> while(abs(-fp(a)*(b-a))>epsi){
>   a=b
>   b=(fp(a)*a-f(a))/fp(a)
> }
>   out=NULL
>   out=a
> return(out)
> }
> 
> I must admit that my algorithm was painfully congested and I've been
> having
> headaches to get it to work. However, I always get the same error message:
> 
> Erreur dans while (abs(-fp(a) * (b - a)) > epsi) { :
>   valeur manquante là où TRUE / FALSE est requis
> De plus : Message d'avis :
> In log(x) : production de NaN
> 
> Please forgive the French; it is my study language. Quite frankly I don't
> mind if I don't get the bonus marks, what is really important is that I
> understand why it doesn't work and what condition is missing.
> 
> You're help would be kindly appreciated.
> 

As others have told you: no homework.

But to give you some additional hints:

1. are you sure that your function has a solution for f(x)=0?

2. make your code readable: indent and use <- for assignment.

3. Try your newbon-function (shouldn't that be newton?) with this

g <- function(x){
	out <- (2/(3))*exp(x^2)-(20)*log(x)
	return(out)
}

gp <- function(x) {
    out <- (4/3)*exp(x) - 20/x
    return(out)
}

4.  do  curve(f, <number>,<number>) and the same for g.

The rest is up to you if you want to deserve a well-earned bonus.

Berend


--
View this message in context: http://r.789695.n4.nabble.com/NEWTON-ALGORITHM-tp4224558p4224816.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list