Re: Problems in fitting the experimental data with the expression
- To: mathgroup at smc.vnet.net
- Subject: [mg99865] Re: Problems in fitting the experimental data with the expression
- From: Bill Rowe <readnews at sbcglobal.net>
- Date: Sat, 16 May 2009 18:25:12 -0400 (EDT)
On 5/16/09 at 5:19 AM, umamaheswari1973 at gmail.com wrote: <snip data> >fw[w_?NumericQ, L_?NumericQ] := >NIntegrate[ 4*Pi*q^2*Exp[-(L^2*q^2)/(16* Pi^2)]/((w - (520 - >(120*(q/1.15712)^2)))^2 + (3.5/2)^2), {q, a, b}] >I want to fit the value of L. >w : values are taken from the x-data of the experiment. >FindFit[ay, fw[w, L], {L}, {ax[[1]], ax[[84]]}] >I got the error as >General::ivar: 600.58` is not a valid variable. >> The reason you are getting this error is you are not using FindFit correctly. The the basic syntax for FindFit is as follows: FindFit[data, model, parameters, variables] data needs to be a matrix with the dependent variable in the right most column. For your particular case. Setting data to Transpose@{ax,ay} will satisfy this requirement. the model needs to be an expression relating the independent variables to the dependent variable. For example, if you were doing a simple linear fit, this would be m x + b. parameters is a list of the unknown parameters in the model. For the linear model above, the parameters are {m,b} Finally, variables is a list of the independent variables in the model. For the linear model above, this would be x. This list needs to be a list of symbols and should have n-1 members where n is the number of columns in data. You have failed to meet either of these requirements since you are supplying a list of two real numbers for the variables. This is the source of the error. Notice 600.58 is the first value in ax. You simply cannot use this as a variable. So, correct syntax would be FindFit[Transpose@{ax,ay}, fw[w, L], {L}, {w}] However, while this will correct the specific error you got from FindFit, it will not solve your problem. The function you wrote fw will not work as written. In that function you have specified the limits of integration as a,b and nowhere defined a or b. Consequently, NIntegrate cannot work since it needs numeric integration limits.