Boundaries in Nonlinear Fittings
- To: mathgroup at smc.vnet.net
- Subject: [mg3925] Boundaries in Nonlinear Fittings
- From: Christian MONTANARI <cm at ee.port.ac.uk>
- Date: Fri, 10 May 1996 03:28:52 -0400
- Sender: owner-wri-mathgroup at wolfram.com
Here is a patch to NonlinearFit.m which allows to "bounce" on the boundaries of your fit. and... non buggy weigthing factors! It worked for the fitting of my data. Christian PS:Dr. Wolfram might get me a medail? Address: University of Portsmouth, Department of Electrical and Electronic Engineering, Microwave, Telecommunications and Signal Processing Research Group, Anglesea Building, Phone: +44 (0)1705 842543 Anglesea Road, Fax: +44 (0)1705 295336 Portsmouth,P01 3DJ,England. Email: cm at ee.port.ac.uk 23d22 < Version 1.2, Sep 1994 C. Montanari !... 41c40 < Print["chris modifs..in NonlinearFit.00."]; --- > 59,62d57 < BoundsStop::usage = < "BoundsStop is an option for NonlinearFit. If True, the fit will stop < when the range limits of the parameters are encountered." < 83,84c78 < PrecisionGoal -> 3, < BoundsStop -> False}; --- > PrecisionGoal -> 3}; 170c164 < Map[If[Head[#] === List, Last[Last[#]], 1]&, --- > Map[If[Head[#] === List, Last[#], 1]&, 200c194 < fmopts,out,start,precgoal,response,s,bounds}, --- > fmopts,out,start,precgoal,response,s}, 202c196 < {maxits,method,progress,weights,workprec,accgoal,precgoal,bounds} = --- > {maxits,method,progress,weights,workprec,accgoal,precgoal} = 204,205c198,199 < WorkingPrecision, AccuracyGoal, PrecisionGoal, < BoundsStop}/.{opts}/.Options[NonlinearFit]; --- > WorkingPrecision, AccuracyGoal, PrecisionGoal}/. > {opts}/.Options[NonlinearFit]; 224c218 < weights = Table[1,{#1},{#2}]& @@ Dimensions[response]; --- > weights = Table[1,{#1},{#2}]& @@ Dimensions[response] 241c235 < {x,{s},min,max}, --- > {x,s,min,max}, 279d272 < bounds=TrueQ[bounds]; 288c281 < maxrng,progress,bounds,maxits,workprec,precgoal,accgoal, --- > maxrng, progress, maxits, workprec, precgoal, accgoal, 305c298 < parameters_,start_,minr_,maxr_,prog_,bounds_,mi_,wp_,pg_,ag_, --- > parameters_, start_, minr_, maxr_, prog_, mi_, wp_, pg_, ag_, 340c333 < params_,start_,minr_,maxr_,progress_,bounds_,maxits_, --- > params_, start_, minr_, maxr_, progress_, maxits_, 343,344c336,337 < nweights = N[weights, wp], guess = N[start, wp], guessy, < nminr = N[minr, wp], nmaxr = N[maxr, wp], lambda=1/100, --- > nweights = N[weights, wp], guess = N[start, wp], > nminr = N[minr, wp], nmaxr = N[maxr, wp], lambda = 1/1000, 349,353d341 < < If[!bounds, < guess=Map[Max,Transpose[{guess,nminr}]]; < guess=Map[Min,Transpose[{guess,nmaxr}]]]; < 369,370c357 < (rngflag = !bounds || < (And @@ Thread[N[nminr < guess < nmaxr,wp]])), --- > (rngflag = And @@ Thread[N[nminr < guess < nmaxr,wp]]), 378,383c365 < guessy=guess+deltaguess; < If[!bounds, < guessy=Map[Max,Transpose[{guessy,nminr}]]; < guessy=Map[Min,Transpose[{guessy,nmaxr}]]]; < (* Print[bounds,rngflag,guessy,nminr,nmaxr];*) < newvals = vals @@ guessy; --- > newvals = vals @@ (guess + deltaguess); 385d366 < 392,394c373,375 < guess = guessy; < tmpchi = newchi; < {alpha, beta} = calcstep[response, nweights, --- > guess = guess + deltaguess; > tmpchi = newchi; > {alpha, beta} = calcstep[response, nweights, --2009596274-851401618-830962609=:11098 Content-Description: try the patch! Content-ID: <Pine.HPP.3.91.960501155649.11098C at swift.ee.port.ac.uk> MjNkMjINCjwgCVZlcnNpb24gMS4yLCBTZXAgMTk5NCBDLiBNb250YW5hcmkg IS4uLg0KNDFjNDANCjwgUHJpbnRbImNocmlzIG1vZGlmcy4uaW4gTm9ubGlu ZWFyRml0LjAwLiJdOw0KLS0tDQo+IA0KNTksNjJkNTcNCjwgQm91bmRzU3Rv cDo6dXNhZ2UgPQ0KPCAiQm91bmRzU3RvcCBpcyBhbiBvcHRpb24gZm9yIE5v bmxpbmVhckZpdC4gSWYgVHJ1ZSwgdGhlIGZpdCB3aWxsIHN0b3ANCjwgd2hl biB0aGUgcmFuZ2UgbGltaXRzIG9mIHRoZSBwYXJhbWV0ZXJzIGFyZSBlbmNv dW50ZXJlZC4iDQo8IA0KODMsODRjNzgNCjwgCVByZWNpc2lvbkdvYWwgLT4g MywNCjwgCUJvdW5kc1N0b3AgLT4gRmFsc2V9Ow0KLS0tDQo+IAlQcmVjaXNp b25Hb2FsIC0+IDN9Ow0KMTcwYzE2NA0KPCAJCQlNYXBbSWZbSGVhZFsjXSA9 PT0gTGlzdCwgTGFzdFtMYXN0WyNdXSwgMV0mLA0KLS0tDQo+IAkJCU1hcFtJ ZltIZWFkWyNdID09PSBMaXN0LCBMYXN0WyNdLCAxXSYsDQoyMDBjMTk0DQo8 IAkJCWZtb3B0cyxvdXQsc3RhcnQscHJlY2dvYWwscmVzcG9uc2Uscyxib3Vu ZHN9LA0KLS0tDQo+IAkJCWZtb3B0cyxvdXQsc3RhcnQscHJlY2dvYWwscmVz cG9uc2Usc30sDQoyMDJjMTk2DQo8IAkJe21heGl0cyxtZXRob2QscHJvZ3Jl c3Msd2VpZ2h0cyx3b3JrcHJlYyxhY2Nnb2FsLHByZWNnb2FsLGJvdW5kc30g PQ0KLS0tDQo+IAkJe21heGl0cyxtZXRob2QscHJvZ3Jlc3Msd2VpZ2h0cyx3 b3JrcHJlYyxhY2Nnb2FsLHByZWNnb2FsfSA9DQoyMDQsMjA1YzE5OCwxOTkN CjwgCQkJCVdvcmtpbmdQcmVjaXNpb24sIEFjY3VyYWN5R29hbCwgUHJlY2lz aW9uR29hbCwNCjwgCQkJCUJvdW5kc1N0b3B9Ly57b3B0c30vLk9wdGlvbnNb Tm9ubGluZWFyRml0XTsNCi0tLQ0KPiAJCQkJV29ya2luZ1ByZWNpc2lvbiwg QWNjdXJhY3lHb2FsLCBQcmVjaXNpb25Hb2FsfS8uDQo+IAkJCXtvcHRzfS8u T3B0aW9uc1tOb25saW5lYXJGaXRdOw0KMjI0YzIxOA0KPCAJCQl3ZWlnaHRz ID0gVGFibGVbMSx7IzF9LHsjMn1dJiBAQCBEaW1lbnNpb25zW3Jlc3BvbnNl XTsNCi0tLQ0KPiAJCQl3ZWlnaHRzID0gVGFibGVbMSx7IzF9LHsjMn1dJiBA QCBEaW1lbnNpb25zW3Jlc3BvbnNlXQ0KMjQxYzIzNQ0KPCAJCQkJCXt4LHtz fSxtaW4sbWF4fSwNCi0tLQ0KPiAJCQkJCXt4LHMsbWluLG1heH0sDQoyNzlk MjcyDQo8IAkJYm91bmRzPVRydWVRW2JvdW5kc107DQoyODhjMjgxDQo8IAkJ CQltYXhybmcscHJvZ3Jlc3MsYm91bmRzLG1heGl0cyx3b3JrcHJlYyxwcmVj Z29hbCxhY2Nnb2FsLA0KLS0tDQo+IAkJCQltYXhybmcsIHByb2dyZXNzLCBt YXhpdHMsIHdvcmtwcmVjLCBwcmVjZ29hbCwgYWNjZ29hbCwNCjMwNWMyOTgN CjwgCQlwYXJhbWV0ZXJzXyxzdGFydF8sbWlucl8sbWF4cl8scHJvZ18sYm91 bmRzXyxtaV8sd3BfLHBnXyxhZ18sDQotLS0NCj4gCQlwYXJhbWV0ZXJzXywg c3RhcnRfLCBtaW5yXywgbWF4cl8sIHByb2dfLCBtaV8sIHdwXywgcGdfLCBh Z18sDQozNDBjMzMzDQo8IAkJcGFyYW1zXyxzdGFydF8sbWlucl8sbWF4cl8s cHJvZ3Jlc3NfLGJvdW5kc18sbWF4aXRzXywgDQotLS0NCj4gCQlwYXJhbXNf LCBzdGFydF8sIG1pbnJfLCBtYXhyXywgcHJvZ3Jlc3NfLCBtYXhpdHNfLCAN CjM0MywzNDRjMzM2LDMzNw0KPCAJCQlud2VpZ2h0cyA9IE5bd2VpZ2h0cywg d3BdLCBndWVzcyA9IE5bc3RhcnQsIHdwXSwgZ3Vlc3N5LA0KPCAJCQlubWlu ciA9IE5bbWluciwgd3BdLCBubWF4ciA9IE5bbWF4ciwgd3BdLCBsYW1iZGE9 MS8xMDAsDQotLS0NCj4gCQkJbndlaWdodHMgPSBOW3dlaWdodHMsIHdwXSwg Z3Vlc3MgPSBOW3N0YXJ0LCB3cF0sIA0KPiAJCQlubWluciA9IE5bbWluciwg d3BdLCBubWF4ciA9IE5bbWF4ciwgd3BdLCBsYW1iZGEgPSAxLzEwMDAsDQoz NDksMzUzZDM0MQ0KPCANCjwgCQlJZlshYm91bmRzLA0KPCAJCQlndWVzcz1N YXBbTWF4LFRyYW5zcG9zZVt7Z3Vlc3Msbm1pbnJ9XV07DQo8IAkJCWd1ZXNz PU1hcFtNaW4sVHJhbnNwb3NlW3tndWVzcyxubWF4cn1dXV07DQo8IA0KMzY5 LDM3MGMzNTcNCjwgCQkJCShybmdmbGFnID0gIWJvdW5kcyB8fA0KPCAJCQkJ CShBbmQgQEAgVGhyZWFkW05bbm1pbnIgPCBndWVzcyA8IG5tYXhyLHdwXV0p KSwNCi0tLQ0KPiAJCQkJKHJuZ2ZsYWcgPSBBbmQgQEAgVGhyZWFkW05bbm1p bnIgPCBndWVzcyA8IG5tYXhyLHdwXV0pLA0KMzc4LDM4M2MzNjUNCjwgCQkJ Z3Vlc3N5PWd1ZXNzK2RlbHRhZ3Vlc3M7DQo8IAkJCUlmWyFib3VuZHMsDQo8 IAkJCQlndWVzc3k9TWFwW01heCxUcmFuc3Bvc2Vbe2d1ZXNzeSxubWlucn1d XTsNCjwgCQkJCWd1ZXNzeT1NYXBbTWluLFRyYW5zcG9zZVt7Z3Vlc3N5LG5t YXhyfV1dXTsNCjwgKCoJCQlQcmludFtib3VuZHMscm5nZmxhZyxndWVzc3ks bm1pbnIsbm1heHJdOyopDQo8IAkJCW5ld3ZhbHMgPSB2YWxzIEBAIGd1ZXNz eTsNCi0tLQ0KPiAJCQluZXd2YWxzID0gdmFscyBAQCAoZ3Vlc3MgKyBkZWx0 YWd1ZXNzKTsNCjM4NWQzNjYNCjwgCQkJDQozOTIsMzk0YzM3MywzNzUNCjwg CQkJCWd1ZXNzID0gZ3Vlc3N5Ow0KPCAJCQkJdG1wY2hpID0gbmV3Y2hpOw0K PCAJCQkJe2FscGhhLCBiZXRhfSA9IGNhbGNzdGVwW3Jlc3BvbnNlLCBud2Vp Z2h0cywNCi0tLQ0KPiAJCQkJCWd1ZXNzID0gZ3Vlc3MgKyBkZWx0YWd1ZXNz Ow0KPiAJCQkJCXRtcGNoaSA9IG5ld2NoaTsNCj4gCQkJCQl7YWxwaGEsIGJl dGF9ID0gY2FsY3N0ZXBbcmVzcG9uc2UsIG53ZWlnaHRzLA0K --2009596274-851401618-830962609=:11098-- ==== [MESSAGE SEPARATOR] ====