Always reply-to-all to keep the mailing list informed... I don't do private consulting online.
You look like you have plain text worked out, but we still cannot run your code. Read the Posting Guide and [1]. You cannot attach Excel files here (and many R users can't or won't do that anyway) so you need to figure out dput. You will know you have a reproducible example when you don't read from any files and the code produces the error you are asking about when run in a newly opened R session. I think you should (!) only need the dput of my.data.var, definition of Error.func, and the call to optim if you do it right. [1] http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example -- Sent from my phone. Please excuse my brevity. On June 17, 2016 3:10:41 PM PDT, Narendra Modi <bjpmodi2...@gmail.com> wrote: >how to do that Jeff? I am newbie to R. > >I am posting the whole message again here and I made sure it is in >plain-text format. > > > > > > >my.data.matrix.inj <- as.matrix(my.data) #convert DATA FRAME to MATRIX >my.data.matrix.inj > > >my.data.2 <- readWorksheetFromFile(file,sheet=2,startRow=1) >str(my.data.2) # DATA FRAME >my.data.matrix.time <- as.matrix(my.data.2) #convert DATA FRAME to >MATRIX >my.data.matrix.time > >my.data <- readWorksheetFromFile(file,sheet=3,startRow=1) >str(my.data) # DATA FRAME >my.data.matrix.prod <- as.matrix(my.data) #convert DATA FRAME to >MATRIX >my.data.matrix.prod > > > # my.data.var <- vector("numeric",length = 24) > # my.data.var > >my.data.var <- c(10,0.25,0.25,0.25,0.25,0.25, > 10,0.25,0.25,0.25,0.25,0.25, > 10,0.25,0.25,0.25,0.25,0.25, > 10,0.25,0.25,0.25,0.25,0.25) >my.data.var > >my.data.qo <- c(5990,150,199,996) #Pre-Waterflood Production >my.data.timet0 <- 0 # starting condition for time > >#FUNCTION >Qjk.Cal.func <- function(my.data.timet0,my.data.qo,my.data.matrix.time, > my.data.matrix.inj, >my.data.matrix.prod,my.data.var,my.data.var.mat) >{ > > qjk.cal.matrix <- matrix(,nrow = nrow(my.data.matrix.prod), >ncol=ncol(my.data.matrix.prod)) > > count <- 1 > number <- 1 > for(colnum in 1:ncol(my.data.matrix.prod)) # loop through all PROD >wells columns > { > sum <-0 > for(row in 1:nrow(my.data.matrix.prod)) #loop through all the rows > { > sum <-0 > deltaT <-0 > expo <-0 > > > for(column in 1:ncol(my.data.matrix.inj)) #loop through all >the injector columns to get the PRODUCT SUM > { > sum = sum + >my.data.matrix.inj[row,column]*my.data.var.mat[colnum,number+column] > } > > if(count<2) > { > deltaT<- my.data.matrix.time[row] > } > else > {deltaT <- my.data.matrix.time[row]-my.data.matrix.time[row-1]} > > > expo <- exp(-deltaT/my.data.var.mat[colnum,1]) ># change here too > > if(count<2) > { > qjk.cal.matrix[row,colnum] = my.data.qo[colnum]*expo + (1-expo)*sum > } > else > { > qjk.cal.matrix[row,colnum]=qjk.cal.matrix[row-1,colnum]*expo + >(1-expo)*sum > } > count <- count+1 > } > > count <-1 > } > > qjk.cal.matrix # RETURN CALCULATED MATRIX TO THE ERROR FUNCTION > >} > > ># ERROR FUNCTION - FINDS DIFFERENCE BETWEEN CAL. MATRIX AND ORIGINAL >MATRIX. Miminize the Error by changing my.data.var > >Error.func <- function(my.data.var) >{ > #First convert vector(my.data.var) to MATRIX aand send it to >calculate new MATRIX > my.data.var.mat <- matrix(my.data.var,nrow = >ncol(my.data.matrix.prod),ncol = ncol(my.data.matrix.inj)+1,byrow = >TRUE) > >Calc.Qjk.Value <- >Qjk.Cal.func(my.data.timet0,my.data.qo,my.data.matrix.time, > my.data.matrix.inj, >my.data.matrix.prod,my.data.var,my.data.var.mat) > > > diff.values <- my.data.matrix.prod-Calc.Qjk.Value #FIND >DIFFERENCE BETWEEN CAL. MATRIX AND ORIGINAL MATRIX > > > Error <- ((colSums ((diff.values^2), na.rm = FALSE, dims = >1))/nrow(my.data.matrix.inj))^0.5 #sum of square root of the diff > print(paste(Error)) > > Error_total <- sum(Error,na.rm=FALSE)/ncol(my.data.matrix.prod) # >total avg error > > > Error_total >} > ># OPTIMIZE > >sols<-optim(my.data.var,Error.func,method="L-BFGS-B",upper=c(Inf,1,1,1,1,1,Inf,1,1,1,1,1,Inf,1,1,1,1,1,Inf,1,1,1,1,1), >lower=c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),control=list(maxit >=1000)) >sols > > > > > > >On Fri, Jun 17, 2016 at 4:55 PM, Jeff Newmiller ><jdnew...@dcn.davis.ca.us> wrote: >> >> Your code is corrupt because you failed to send your email in plain >text format. >> >> You also don't appear to have all data needed to reproduce the >problem. Use the dput function to generate R code form of a sample of >your data. >> -- >> Sent from my phone. Please excuse my brevity. >> >> On June 17, 2016 1:07:21 PM PDT, Priyank Dwivedi ><dpriyan...@gmail.com> wrote: >> >By mistake, I sent it earlier to the wrong address. >> > >> >---------- Forwarded message ---------- >> >From: Priyank Dwivedi <dpriyan...@gmail.com> >> >Date: 17 June 2016 at 14:50 >> >Subject: Matrix Constraints in R Optim >> >To: r-help-ow...@r-project.org >> > >> > >> >Hi, >> > >> >Below is the code snippet I wrote in R: >> > >> >The basic idea is to minimize error by optimizing set of values (in >> >this >> >scenario 12) in the form of a matrix. I defined the matrix elements >as >> >vector "*my.data.var" * and then stacked it into a matrix called >> >"*my.data.var.mat" >> >in the error function. * >> > >> >The only part that I can't figure out is "what if the column sum in >> >the *my.data.var.mat >> >needs to be <=1"; that's the constraint/s.. Where do I introduce it >in >> >the >> >OPTIM solver or elsewhere?* >> > >> > >> > >> > >> > >> > >> >*my.data.matrix.inj* <- as.matrix(my.data) #convert DATA FRAME to >> >MATRIX >> >my.data.matrix.inj >> > >> > >> >*my.data.matrix.time* <- as.matrix(my.data.2) #convert DATA FRAME >to >> >MATRIX >> >my.data.matrix.time >> > >> > >> >*my.data.matrix.prod* <- as.matrix(my.data) #convert DATA FRAME to >> >MATRIX >> >my.data.matrix.prod >> > >> > >> >*my.data.var* <- >> >>c(2,0.8,0.5,0.2,0.2,0.1,10,0.01,0.02,0.2,0.1,0.01,2,0.8,0.5,0.2,0.2,0.1,10,0.01,0.02,0.2,0.1,0.01,2,0.8,0.5,0.2,0.2,0.1,10,0.01,0.02,0.2,0.1,0.01) >> >my.data.var >> > >> >*my.data.qo* <- c(5990,150,199,996) #Pre-Waterflood Production >> > >> >*my.data.timet0* <- 0 # starting condition for time >> > >> > >> >*#FUNCTIONQjk.Cal.func* <- >> >function(my.data.timet0,my.data.qo,my.data.matrix.time, >> > my.data.matrix.inj, >> >my.data.matrix.prod,my.data.var,my.data.var.mat) >> >{ >> > >> > qjk.cal.matrix <- matrix(,nrow = nrow(my.data.matrix.prod), >> >ncol=ncol(my.data.matrix.prod)) >> > >> > count <- 1 >> > number <- 1 >> > for(colnum in 1:ncol(my.data.matrix.prod)) # loop through all >PROD >> >wells columns >> > { >> > sum <-0 >> > for(row in 1:nrow(my.data.matrix.prod)) #loop through all the >rows >> > { >> > sum <-0 >> > deltaT <-0 >> > expo <-0 >> > >> > >> > for(column in 1:ncol(my.data.matrix.inj)) #loop through all >the >> >injector columns to get the PRODUCT SUM >> > { >> > sum = sum + >> >my.data.matrix.inj[row,column]*my.data.var.mat[colnum,number+column] >> > } >> > >> > if(count<2) >> > { >> > deltaT<- my.data.matrix.time[row] >> > } >> > else >> > {deltaT <- >my.data.matrix.time[row]-my.data.matrix.time[row-1]} >> > >> > >> > expo <- exp(-deltaT/my.data.var.mat[colnum,1]) > # >> >change here too >> > >> > if(count<2) >> > { >> > qjk.cal.matrix[row,colnum] = my.data.qo[colnum]*expo + >(1-expo)*sum >> > } >> > else >> > { >> > qjk.cal.matrix[row,colnum]=qjk.cal.matrix[row-1,colnum]*expo >+ >> >(1-expo)*sum >> > } >> > count <- count+1 >> > } >> > >> > count <-1 >> > } >> > >> > qjk.cal.matrix # RETURN CALCULATED MATRIX TO THE ERROR >FUNCTION >> > >> >} >> > >> > >> >*# ERROR FUNCTION* - FINDS DIFFERENCE BETWEEN CAL. MATRIX AND >ORIGINAL >> >MATRIX. Miminize the Error by changing my.data.var >> > >> >*Error.func* <- function(my.data.var) >> >{ >> > #First convert vector(my.data.var) to MATRIX aand send it to >calculate >> >new MATRIX >> > *my.data.var.mat* <- matrix(my.data.var,nrow = >> >ncol(my.data.matrix.prod),ncol = ncol(my.data.matrix.inj)+1,byrow = >> >TRUE) >> > >> >* Calc.Qjk.Value* <- >> >Qjk.Cal.func(my.data.timet0,my.data.qo,my.data.matrix.time, >> > my.data.matrix.inj, >> >my.data.matrix.prod,my.data.var,my.data.var.mat) >> > >> > >> > diff.values <- my.data.matrix.prod-Calc.Qjk.Value #FIND >DIFFERENCE >> >BETWEEN CAL. MATRIX AND ORIGINAL MATRIX >> > >> > >> > Error <- ((colSums ((diff.values^2), na.rm = FALSE, dims = >> >1))/nrow(my.data.matrix.inj))^0.5 #sum of square root of the diff >> > print(paste(Error)) >> > >> >Error_total <- sum(Error,na.rm=FALSE)/ncol(my.data.matrix.prod) # >> >total >> >avg error >> > >> > >> > * Error_total* >> >} >> > >> ># OPTIMIZE >> > >> >*optim*(*my.data.var* >> >>,Error.func,method="L-BFGS-B",upper=c(Inf,1,1,1,1,1,Inf,1,1,1,1,1,Inf,1,1,1,1,1,Inf,1,1,1,1,1)) >> > >> > >> > >> >-- >> >Best Regards, >> >PD >> > >> > >> > >> >-- >> >Best Regards, >> >Priyank Dwivedi >> > >> > [[alternative HTML version deleted]] >> > >> >______________________________________________ >> >R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see >> >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. >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see >> 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. [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.