On 11/02/2014 2:10 PM, David Winsemius wrote:
On Feb 9, 2014, at 2:45 PM, Andrea Graziani wrote:

> Hi everyone,
>
> I previously posted this question but my message was not well written and did 
not contain any code so I will try to do a better job this time.
>
> The goal is to perform a non-linear regression on complex-valued data.
> I will first give a short description of the data and then describe the 
complex-valued non-linear function.
>
> ***The Data
> Obtained from mechanical tests performed at 5 loading frequencies 0.1, 0.25, 
1, 0.4 and 12 Hz, and at 5 temeperatures.
> The independent variable used in the regression is:
> f_data <- rep(c(0.1,0.25,1,4,12),5)
>
> The measured values of the response variable are:
> E <- c(289.7411+ 225.0708i , 386.4417+ 303.5021i ,  671.5132+ 521.1253i , 
1210.8638+ 846.6253i , 1860.9623+1155.4139i ,
> 862.8984+ 636.2637i , 1159.0436+ 814.5609i , 1919.0369+1186.5679i , 
3060.7207+1573.6088i  , 4318.1781+1868.4761i  ,
> 2760.7782+1418.5450i , 3306.3013+1612.2712i , 4746.6958+1923.8662i , 
6468.5769+2148.9502i , 8072.2642+2198.5344i  ,
> 6757.7680+2061.3110i , 7591.9787+2123.9168i , 9522.9471+2261.8489i , 
11255.0952+2166.6411i , 12601.3970+2120.7178i ,
> 11913.6543+2016.0828i , 12906.8294+2030.0610i , 14343.7693+1893.4877i , 
15942.7703+1788.0910i , 16943.2261+1665.9847i)
>
> To visualize the data:
> plot(f_data,Re(E),log="xy")
> plot(f_data,Im(E),log="xy")
> plot(E)
>
> ***Non-linear regression function:
> Obtained from an analytical model
>
> E_2S2P1D <- function(f,logaT,Eg,Ee,k,h,delta,logbeta,logtau)
>           Ee+(Eg-Ee)*(
>           1+delta*(2i*pi*10^(logtau)*f*10^logaT)^-k +
>                   (2i*pi*10^(logtau)*f*10^logaT)^-h +
>                   (2i*pi*10^(logtau)*f*10^logaT*10^(logbeta))^-1
>                     )^-1

Others have pointed out the theoretical difficulties regarding curve fitting on 
the complex plane. My concern looking at this is that you have apparently lapse 
into mathematical notation rather than functional programming notation above:

This
2i*pi*10^(logtau)*f*10^logaT

Would need to be this:

  2*i*pi*10^(logtau)*f*10^logaT

You would start getting parser errors since '2i' is not a valid token name. I 
would also worry about negative powers. They can sometimes be numerically 
unstable.

2i is fine:  it is the same as 0+2i, which is how it normally prints.

Duncan Murdoch


And you have not offered the values for temperatures which I suspect are the 
items in your start list: loga40=-3.76,loga30=-2.63,loga20=-1.39,loga0=1.68. I 
would think these are fixed rather than something to be optimized. You can 
leave them in the global environment or build them into the function but I 
don't think they should be in your start list. (Frede Aakmann Tøgersen noted 
that issue but did not build a solution that incorporated addressed that 
concern.)

To examine that relationship you would:

loga40=-3.76;loga30=-2.63;loga20=-1.39;loga0=1.68
logaT <- c(rep(loga40,5),rep(loga30,5),rep(loga20,5),rep(0,5),rep(loga0,5))
  # To visualize the data:

  plot(logaT,Re(E), log="y")
  plot(logaT,Im(E), log="y")


______________________________________________
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