Yes, missing * is the problem. Thank you a lot. Do you mean I need to 
incorporate all expression of Rg0sq, Rg etc. into the final Pfit function?

Qiuyang 

Date: Sat, 11 Aug 2012 21:18:03 -0700
From: ml-node+s789695n4640077...@n4.nabble.com
To: stephen...@hotmail.com
Subject: Re: What's wrong with my code?



        
stephenxqy wrote
It is a complex function, functions are quoted frequently, you may read from 
bottom up

The independent variable for final fit is q


%%Rg0 is a function of L and b

Rg0sq<-function(L,b)L*b/6*(1-3/2*b/L+3/2*(b/L)^2-3/4*(b/L)^3*(1-exp(-2*L/b)))


%%alpha is a defined function

alpha<-function(x)(1+(x/3.12)^2+(x/8.67)^3)^(0.176/3)


%%w is a defined function

w<-function(x)(1+tanh(x-1.523)/0.1477)/2


%%It is Rg^2

Rgsq<-function(L,b)(alpha(L/b)*Rg0sq(L,b))


%%This is Rg

Rg<-function(L,b)(Rg0sq(L,b))^0.5


%%A debye function of q, the parameters are L and b

PDebye<-function(L,b)2*(exp(-q^2*Rg0sq(L,b))+q^2*Rg0sq(L,b)-1)/q^4/(Rg0sq(L,b))^2


%%Another function of q that quote w, PDebye, Rg, parameters are v, L and b

Pexv<-function(v,L,b)w(q*Rg(L,b))*PDebye(L,b)+(1-w(q*Rg(L,b)))(1.22*(q*Rg(L,b))^(-1/v)+0.4288*(q*Rg(L,b))^(-2/v)-1.651*(q*Rg(L,b))^(-1/v))


%%Another defined function

cf<-function(L,b,pa,pb)pa/(L/b)^pb


%%A function of q, quote Pexv, Rgsq, cf

Psfcex<-function(v,L,b,pa,pb)Pexv(v,L,b)+cf(L,b,pa,pb)*b/L/15*(4+7/q^2/Rgsq(L,b)-(11+7/q^2/Rgsq(L,b))*exp(-q^2*Rgsq(L,b)))


%%non-linear fit

Pfit<-function(p)sum((I-Psfcex(p[1],p[2],p[3],p[4],p[5]))^2)

wavefit<-nlm(Pfit,c(1.5,500,5,1,0.1),hessian=TRUE)


error code: Error in c(1.5, 500, 5, 1, 0.1) : unused argument(s) (0.1)

the fifth parameter is pb, which goes from Psfcex to cf, actually pa which only 
exist in cf is used, why not pb?


1. What language is this? # starts a comment line in R not %%.

2. no data for q

3. what is I in Pfit?

4. Pexv: missing * or + or ... The expression in the function Pexv should 
probably read


    
w(q*Rg(L,b))*PDebye(L,b)+(1-w(q*Rg(L,b)))*(1.22*(q*Rg(L,b))^(-1/v)+0.4288*(q*Rg(L,b))^(-2/v)-1.651*(q*Rg(L,b))^(-1/v))
 


I have inserted  * after    (1-w(q*Rg(L,b))) assuming that is what you want.


Your code is not reproducible since you have not provided data for q or I.

Generating some random data and assuming I is an identity matrix with 


set.seed(123)

q <- rnorm(20) + 5 

I <- diag(length(q))


adding wavefit at the end of the script and changing the %% to # your script 
runs with no errors but with warnings.

So I can't tell you why you  get the error message you got.


Finally: this is very inefficient code. There are repeated evaluations of same 
thing e.g. w(q*Rg(L,b)), Rg(L,b), Rg0sq(L,b) etc.


Berend




        
        
        
        

        

        
        
                If you reply to this email, your message will be added to the 
discussion below:
                
http://r.789695.n4.nabble.com/What-s-wrong-with-my-code-tp4640034p4640077.html
        
        
                
                To unsubscribe from What's wrong with my code?, click here.

                NAML
                                                  



--
View this message in context: 
http://r.789695.n4.nabble.com/What-s-wrong-with-my-code-tp4640034p4640086.html
Sent from the R help mailing list archive at Nabble.com.
        [[alternative HTML version deleted]]

______________________________________________
R-help@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.

Reply via email to