Hot answers tagged

8

EvaluationMonitor is going to be called whenever the objective function is being evaluated, that is much more often than StepMonitor. The reason for not getting any points back is that the StepMonitor specification is not propagated to the NMinimize call. Try the following syntax instead nlm = Reap @ NonlinearModelFit[data, Exp[a x/(b + c x)], {a, b, c}, x,...


8

In part, your trouble stemmed from an attempt to determine exact/symbolic results from your data. Even for this modestly-sized set, the objective function you were feeding to Minimize[] is already sufficiently complicated, which is why it takes long. As I previously noted, using NMinimize[] instead will give you the numerical values you need. Less ...


6

Create the list b as you have shown. nst[n_] := Length[NestWhileList[If[EvenQ[#], #/2, 3 # + 1] &, n, # > 1 &]] b = With[{stps = Array[nst, nn]}, Table[Max[Take[stps, n]], {n, nn}]]; It looks like ListPlot[b, PlotStyle -> Blue] It is apparent that we want to locate the first point in each group of horizontal points and use that in the ...


6

Start here to see what statistics functionality is available: http://reference.wolfram.com/language/guide/Statistics.html http://reference.wolfram.com/language/guide/ProbabilityAndStatistics.html Fitting is done with EstimatedDistribution or FindDistributionParameters. You want to fit a ParetoDistribution for continuous data or a ZipfDistribution for ...


6

As J.M. suggests, NonlinearModelFit is your friend. Using the data you have and the starting values given: curve = NonlinearModelFit[data, y0 + a*x0*Tanh[(t - x0)/b], {{x0, -33}, {y0, 126}, {a, 115}, {b, 25.5}}, t]; Show[ListPlot[data], Plot[curve[t], {t, -70, 10}]] You can find the converged values of the fit by curve


5

I extracted the data from the image using "Recovering data points from an image". ListPlot[extractedData, PlotRange -> All, PlotTheme -> "Detailed"] Then I applied NonLinearModelFit over that data for a list of sinusoids (and a constant): baseFuncs = Prepend[Table[Sin[k x Pi/5.25], {k, 1, 30}], 1]; vars = Array[a, Length[baseFuncs]]; nf = ...


5

I had the same idea as Jim Baldwin, as constraints are often implemented as penalty functions. Here is one that severely penalized any negative residual. The parameter scale might need to be adjusted to be a significant fraction of the range of the data values. ClearAll[penalty]; penalty[residuals_?VectorQ, scale_: 10] := scale*Length@residuals*(1 - ...


4

Updated with new model equations from OP Simultaneous NonlinearModelFit[] da1 = Transpose[{data[[All, 1]], data[[All, 2]]*Cos[data[[All, 3]]]}]; da2 = Transpose[{data[[All, 1]], (data[[All, 2]]*Sin[data[[All, 3]]])}]; r[f_] := A - (x y - 4 (f - f0)^2)/(4 (f - f0)^2 + y^2); i[f_] := B + (2*(f - f0) (x + y))/((4 (f - f0)^2 + y^2)); Clear[A, B, x, y, f, f0, ...


4

So, I think this is what you actually wanted: d2 = {{{0.5, 0.0142}, {2.5, 0.00223}, {7., 0.00158}, {12., 0.00151}, {17., 0.0035}, {22., 0.0054}, {27., 0.00751}, {32., 0.01028}, {37., 0.01604}, {42., 0.02347}, {47., 0.03576}, {52., 0.05677}, {57., 0.07494}, {62., 0.11366}, {67., 0.16382}, {72., 0.23114}, {77., 0.32861}, {82., 0.44569},...


3

You can make an interpolating function for both px and py from the data you have: data = Import["Downloads/lyap_4d.dat", "Table"]; d00 = data[[All, {1, 2}]]; pyfunc = Interpolation[{{#1, #2}, #4} & @@@ data, InterpolationOrder -> 1]; pxfunc = Interpolation[{{#1, #2}, #3} & @@@ data, InterpolationOrder -> 1]; That answers the question ...


3

I think you should work with the available options. And see How to | Fit Models with Measurement Errors. Set up and have some Data (see Error bars from lists @MarcoB): Needs["ErrorBarPlots`"] data = Table[{x, 2 x + 3 + RandomReal[{-0.5, 0.5}], RandomReal[{0.3, 0.5}]}, {x, -2, 2, 0.2}]; data2 = Table[{x, 2 x + 5 + RandomReal[{-0.5, 0.5}], RandomReal[{0.3, ...


3

I think I know what you want and here is the code: {{xmin, xmax}, {ymin, ymax}} =MinMax /@ Transpose[l1~Join~l2]; f1 = Interpolation@l1; f2 = Interpolation@l2; {crmin, crmax} = x /. FindRoot[#[x] == 0, {x, 1}] & /@ {f1, f2}; Needs["ErrorBarPlots`"] Show[ErrorListPlot[{withErrorl1, withErrorl2}, Prolog -> {Opacity@.3, Red, Rectangle[{xmin, ymin}, {...


3

The e in the non-linear fit should be Exp[] or it needs to be a variable x = Clip[r[t], {0, 1}]; y = Clip[rpp[t], {0, 1}]; tdata = NDSolve[{r'[t] == -L1*rpp[t] + c, rpp'[t] == L2*rpp[t] (1 - (rpp[t]/(r[t] + rpp[t]))) + L3*r[t], r[0] == 1, rpp[0] == 0} /. {L1 -> 0.5, c -> 0.001, L2 -> 0.91, L3 -> 0.05}, {r[t], rpp[t]}, {t, 0, 10}...


3

Another follow up, specifically to @Jim Baldwin's comment. Instead of plotting the full curve, we can also plot a certain number of points and see how they vary with the parameter t, i.e.: Clear[v] th = Array[v, Length[trainComposed[[1]]] - 1]; lwrPlot = Manipulate[ Show[listPlot, With[{x = #}, With[{bounds = Values@NMinimize[ ...


3

Just a follow-up to @J.M.'s answer to show the effect of the value of t: trainX = {100, 320, 213, 512, 58, 84, 113, 142, 93, 121, 421, 432, 249, 254}; trainY = {140000, 400000, 241000, 489000, 78000, 123000, 139000, 143000, 97000, 134000, 392000, 458000, 311000, 378000}; rX = MinMax[trainX]; rY = MinMax[trainY]; Manipulate[ (* Make a table of ...


3

This is not an answer, but an extended comment. Quite frankly, what you encountered is not (yet) a Mathematica-related problem: instead, you either have very poor starting points for your fitting, or a bad model altogether. You really MUST produce more reasonable starting values for your parameters. After all, you chose a very specific functional form, so ...


3

Usually we'll tend to fit linear system, and in this situaiton, add Log to data's y-axis will help: Log[a E^(b x)]=Log[a]+b x Truely, after this transformation, the points lay on a line~ great for fitting! It seems that this method could really do the work, so naturally, here comes the following code for fitting using normal linear fitting method: ldata ...


3

My attempt: (I re-labeled re to real and im to imag) comp = Transpose[{real[[All, 1]], real[[All, 2]] + I imag[[All, 2]]}]; Clear[a, b, c] c = -7*^-6; model = a + b/(1 + I x c); fit = NonlinearModelFit[comp, model, {a, b}, x] Show[ ListPlot[{real, imag}], Plot[{Re[fit[x]], Im[fit[x]]}, {x, 0, 3*^6}, PlotRange -> All] ] I hope this helps!


3

In such cases you can provide an initial guess. You can get an idea of the value from the other set. For example FindFit[Table[{p436UIe[[1]][[i]], p436UIe[[2]][[i]]}, {i, 1, 4}], a*(Exp[(x - b)/c] - 1), {a, b, c}, x] {a -> 62.2442, b -> -1.3725, c -> 0.219432} Which you know gives correct result. For the other set it is FindFit[...


3

As often when things go wrong, this is a question of initial values. Plugging in the approximate parameter values from f436 gives us: f436["BestFitParameters"] {a -> 62.2442, b -> -1.3725, c -> 0.219432} f436Gitter = NonlinearModelFit[ Table[{p436GitterUIe[[1]][[i]], p436GitterUIe[[2]][[i]]}, {i, 1, 4}], a*(Exp[(x - b)/c] - 1), {{a, 60}, {...


2

There are lots of ways. Here's one for performing a two-sided test of the slope equaling $c$ by getting the P-value: data = {{0, 1}, {1, 0}, {3, 2}, {5, 4}}; lm = LinearModelFit[data, x, x]; slopeInfo = lm["ParameterTableEntries"][[2]]; df = lm["ANOVATableDegreesOfFreedom"][[2]]; c = 2; testStatistic = (slopeInfo[[1]] - c)/slopeInfo[[2]]; pValue = CDF[...


2

Your function is the sum of two functions of a similar form. The single function that covers both is f[En_?NumberQ, a_?NumberQ, T_?NumberQ] := NIntegrate[(a e^3 x^2)/(500000000000 c^2 (-1 + E^((e x)/(1000000 k T))) h^2), {x, En, ∞}] I also scaled the parameters to be of similar size (and used essentially your estimated values for the starting values)...


2

The import has imported the single sheet in the "xlsx" file.In the following data was the copied and pasted information in the question (deleting \). It can be used for data analysis and visualization after some processing: datm1 = data[[1,11 ;;]];(* take first sheet and remove leading empty cells*) datm2 = StringSplit[#] & @@@ datm;(*split string at ...


2

One quick approximation uses the compound median filter defined here. I converted the blue line in your image to a vector of amplitudes trace. The orange line is the filtered output, the green line is the residual. Vary the second input parameter of CompoundMedianFilter to see other baseline approximations. ListLinePlot[{trace, CompoundMedianFilter[trace, ...


2

here is how to do with NMinimize, using @youngs comp model[x_] = a + b/(1 + I x c) s = NMinimize[ { Total[Norm[model[#[[1]]] - #[[2]]]^2 & /@ comp ], c < 0}, {a, b, c}] {5.35012, {a -> 4.63194, b -> 4.38458, c -> -9.15063*10^-6}} Show[{ ListPlot[{re, im}], Plot[ReIm[model[x] /. s[[2]]], {x, 0, 5.0119*10^6}, PlotRange ->...


2

ClearAll[a, b, c] data = {0.647888, 0.522495, 0.454224, 0.417054, 0.396816, 0.385798, 0.379799, 0.376532, 0.374754, 0.373786, 0.373259, 0.372972}; nlm = NonlinearModelFit[data, a + b/ c^x, {a, b, c}, x]; Normal@nlm $0.372629\, +0.505569 \,\, 1.8367^{-x}$ Limit[Normal[nlm], x -> Infinity] 0.372629


2

Thanks Young for the answers, The problem was simple , there was a slight modification in the equation, which is give below i[f_] := A - (x y - 4 (f - f0)^2)/(4 (f - f0)^2 + y^2); r[f_] := B + (2*(f - f0) (x + y))/((4 (f - f0)^2 + y^2)); and as Evans mentioned, the Parametric plot will be the following


2

Import takes all sheets, which nests the data. First@ takes the first sheet formatting the data you need for the subsequent expressions. test = First@Import["Velocidade Angular.xls"]; time = test[[All, 1]]; x = test[[All, 2]]; f = Interpolation[Transpose[{time, x}], InterpolationOrder -> 3]; Show[ ListPlot[test[[All, 1 ;; 2]], PlotStyle -> Red], ...


1

This is an illustrated comment to Young's answer, but you can plot in the Re/Im plane using the following: Show[ ListPlot[ Transpose@{Last /@ da1, Last /@ da2} , Joined -> True , AxesLabel -> {"Re", "Im"} ] , ParametricPlot[ {nlm[1, f], nlm[2, f]} , {f, Min@(First /@ da1), Max@(First /@ da1)} , PlotStyle -> Red ] , PlotRange -&...


1

So while I can't see your data to make sense, in principle this should work: data = {{1., 0.75}, {2., 0.89}, {3., 0.42}, {4., 0.99}, {5.,0.84}, {6., 0.34}, {7., 0.83}, {8., 0.93}, {9., 0.76}, {10.,0.11}}; lm = LogitModelFit[ data, x, x ]; lm[11] 0.50088



Only top voted, non community-wiki answers of a minimum length are eligible