Skip to main content
added 21 characters in body
Source Link
Kvothe
  • 4.8k
  • 11
  • 32

Then splinefit[dataTimeConstrained[splinefit[data, 150, 3], 10] will hang when applied to the data:

Then splinefit[data, 150, 3] will hang when applied to the data:

Then TimeConstrained[splinefit[data, 150, 3], 10] will hang when applied to the data:

added 2 characters in body
Source Link
Kvothe
  • 4.8k
  • 11
  • 32

Having such a function improvedTimeConstrainedimprovedTimeConstrained would have many advantages over simply killing the main kernel and starting over. For example it would allow code of the form:

Having such a function improvedTimeConstrained would have many advantages over simply killing the main kernel and starting over. For example it would allow code of the form:

Having such a function improvedTimeConstrained would have many advantages over simply killing the main kernel and starting over. For example it would allow code of the form:

added 6881 characters in body
Source Link
Kvothe
  • 4.8k
  • 11
  • 32

Below I include a (not so) minimal example. Probably someone else can find a more minimal example but this should suffice. Note that I am not interested in finding the solution to this specific task. (I can do that easily by cleaning up the points a bit). This example just serves as an instance of the freezing behavior and the failing of TimeConstrained as requested by MarcoB.

First we define a function to find a continuous fit between two sets of points (see Fitting a curve between two sets of points):

rescalexy[xylist_,{xminmax_,yminmax_},{xminmaxgoal_,yminmaxgoal_}]:=Transpose[{Rescale[xylist[[All,1]],xminmax,xminmaxgoal],Rescale[xylist[[All,2]],yminmax,yminmaxgoal]}]

splinefit[upperBoundLowerBoundList_,nparam_Integer,degr_Integer]:=
Module[{pts,knots,vars,fitaux,smoothness,constraints,solution,xminmax,yminmax},
    pts={upData,downData}=upperBoundLowerBoundList;
    {xminmax,yminmax}={MinMax[pts[[All,All,1]]],MinMax[pts[[All,All,2]]]};
    pts=(rescalexy[#,{xminmax,yminmax},{{0,1},{0,1}}])&/@pts;
    {upData,downData}=pts;
    vars=c/@Range[nparam];
    knots=Join[ConstantArray[0,degr],Subdivide[nparam-degr],ConstantArray[1,degr]];
    fitaux[x_]:=Table[BSplineBasis[{degr,knots},i,x],{i,0,nparam-1}].vars;
    smoothness=Total[Differences[vars,2]^2];
    constraints=Flatten[{fitaux[#[[1]]]<=#[[2]]&/@upData,fitaux[#[[1]]]>=#[[2]]&/@downData}];
        constraints=constraints/.{c[a_]->c[a]};
    solution=FindMinimum[{sm=smoothness,co=constraints},va=vars];
    Plot[
        Rescale[fitaux[(x-xminmax[[1]])/(xminmax[[2]]-xminmax[[1]])]/.solution[[2]],{0,1},yminmax]  
        ,{x,Sequence@@xminmax}
        ,AspectRatio->1,ImageSize->400,PlotRange->All]
]

Then splinefit[data, 150, 3] will hang when applied to the data:

data={{{0.8539, 10.5206}, {0.8556, 10.5051}, {0.8592, 10.53}, {0.8636, 
   10.555}, {0.8643, 13.6494}, {0.8643, 19.9987}, {0.8698, 
   10.5645}, {0.8721, 10.5962}, {0.8786, 10.6034}, {0.8811, 
   10.6194}, {0.8824, 10.6735}, {0.8869, 13.6494}, {0.8869, 
   19.9987}, {0.8884, 10.622}, {0.8954, 10.6581}, {0.8972, 
   10.6349}, {0.904, 10.6517}, {0.9068, 11.045}, {0.9095, 
   13.6494}, {0.9095, 19.9987}, {0.914, 10.6649}, {0.9151, 
   10.7121}, {0.9224, 10.6942}, {0.9296, 10.6991}, {0.9321, 
   13.6494}, {0.9321, 19.9987}, {0.9389, 10.8126}, {0.9418, 
   10.7148}, {0.9496, 10.7351}, {0.9503, 10.7663}, {0.9547, 
   13.6494}, {0.9547, 19.9987}, {0.9552, 10.7543}, {0.9603, 
   10.7646}, {0.9683, 10.7761}, {0.9696, 10.8508}, {0.9726, 
   10.8018}, {0.9773, 13.6494}, {0.9773, 19.9987}, {0.9792, 
   10.799}, {0.9841, 10.9972}, {0.9852, 10.8168}, {0.993, 
   10.8259}, {0.9964, 11.3662}, {1., 13.6494}, {1., 19.9987}, {1.0001,
    10.8571}, {1.0019, 10.8108}, {1.0087, 10.8102}, {1.013, 
   10.8282}, {1.015, 10.8132}, {1.0194, 10.9288}, {1.0206, 
   10.8197}, {1.0247, 13.4745}, {1.0248, 11.209}, {1.0275, 
   10.836}, {1.0283, 10.8022}, {1.0287, 11.6805}, {1.0357, 
   13.2118}, {1.036, 10.7757}, {1.0393, 13.1242}, {1.0395, 
   11.7853}, {1.0405, 13.095}, {1.0409, 13.0853}, {1.0411, 
   13.082}, {1.0411, 13.081}, {1.0411, 13.0806}, {1.0436, 
   10.7512}, {1.0475, 10.7325}, {1.0514, 11.3404}, {1.0514, 
   11.3298}, {1.0514, 11.2981}, {1.0515, 11.2239}, {1.0516, 
   11.0658}, {1.0517, 10.7875}, {1.0533, 10.7307}, {1.0538, 
   10.7876}, {1.0539, 10.8557}, {1.054, 10.8885}, {1.0596, 
   10.686}, {1.0596, 10.9559}, {1.065, 10.686}, {1.0654, 
   10.8729}, {1.0694, 10.686}, {1.078, 10.8729}, {1.0807, 
   10.6584}, {1.0838, 11.2466}, {1.0885, 10.7483}, {1.1107, 
   10.7066}, {1.1614, 10.654}, {1.1692, 10.2988}, {1.1959, 
   10.0731}, {1.2164, 10.2331}, {1.2458, 9.8058}, {1.2662, 
   10.8644}, {1.3176, 9.517}, {1.4179, 9.799}, {1.4402, 
   10.2199}, {1.4602, 9.9541}, {1.4942, 10.917}, {1.5076, 
   10.0063}, {1.5401, 10.2214}, {1.5702, 10.9346}, {1.5818, 
   10.2238}, {1.5955, 10.9404}, {1.6064, 12.3771}, {1.6328, 
   10.591}, {1.6746, 11.1102}, {1.6762, 10.77}}, {{0.8523, 
   10.4477}, {0.8528, 10.4803}, {0.8584, 6.3921}, {0.8598, 
   10.4422}, {0.8601, 10.5144}, {0.8629, 5.4032}, {0.8643, 
   7.3}, {0.8658, 10.5372}, {0.8736, 10.5423}, {0.8761, 
   9.8091}, {0.8781, 10.5757}, {0.881, 10.3277}, {0.8827, 
   10.5946}, {0.8869, 7.3}, {0.8888, 10.5886}, {0.8931, 
   6.4151}, {0.8933, 10.6143}, {0.8984, 5.4952}, {0.9002, 
   6.1774}, {0.9026, 10.0077}, {0.9028, 10.6323}, {0.9095, 
   7.3}, {0.9135, 5.7788}, {0.9136, 10.6491}, {0.9226, 
   10.6714}, {0.9241, 10.6502}, {0.9293, 10.6856}, {0.9321, 
   7.3}, {0.9356, 10.6862}, {0.9402, 6.4304}, {0.9446, 
   5.6102}, {0.9461, 10.7102}, {0.9472, 9.4165}, {0.9532, 
   10.7093}, {0.9547, 7.3}, {0.955, 10.7319}, {0.9623, 
   10.7513}, {0.9659, 6.5377}, {0.9691, 10.7427}, {0.9724, 
   10.7658}, {0.9749, 10.782}, {0.9773, 7.3}, {0.9793, 
   5.7022}, {0.9798, 10.7785}, {0.9858, 10.7426}, {0.9864, 
   10.793}, {0.9937, 10.8037}, {0.9941, 10.7837}, {0.9952, 
   6.5377}, {1., 7.3}, {1.0024, 10.7953}, {1.0103, 5.7635}, {1.0114, 
   10.7916}, {1.0154, 9.8888}, {1.0214, 10.7948}, {1.0254, 
   10.7569}, {1.0289, 10.7035}, {1.0299, 10.7782}, {1.0327, 
   10.7372}, {1.0361, 6.691}, {1.0374, 10.7547}, {1.0397, 
   5.9398}, {1.0399, 10.7263}, {1.043, 9.9294}, {1.0433, 
   10.6904}, {1.0455, 10.7158}, {1.0491, 10.6823}, {1.0492, 
   10.5803}, {1.0493, 10.7096}, {1.0522, 10.6607}, {1.0525, 
   10.5688}, {1.0541, 10.5693}, {1.0545, 10.2275}, {1.0548, 
   10.6022}, {1.0551, 10.6358}, {1.056, 10.2713}, {1.0565, 
   10.3387}, {1.0566, 10.4693}, {1.0566, 10.4496}, {1.0566, 
   10.4084}, {1.0574, 6.7754}, {1.0599, 10.5482}, {1.061, 
   6.0625}, {1.0617, 9.6178}, {1.0617, 9.6105}, {1.0618, 
   9.5883}, {1.062, 9.5207}, {1.0627, 9.3148}, {1.0653, 
   8.6872}, {1.0657, 10.3331}, {1.0702, 10.6255}, {1.0743, 
   6.7754}, {1.0749, 10.5824}, {1.076, 8.737}, {1.0773, 
   10.3331}, {1.0823, 8.5491}, {1.0823, 6.1621}, {1.0842, 
   10.5407}, {1.0844, 8.4865}, {1.085, 8.4657}, {1.0853, 
   8.4587}, {1.0857, 9.9252}, {1.0861, 10.4047}, {1.0864, 
   9.7131}, {1.0867, 9.64}, {1.0987, 10.4172}, {1.1253, 
   10.1805}, {1.1617, 9.8886}, {1.2035, 9.6675}, {1.2842, 
   9.4229}, {1.3314, 9.0844}, {1.3673, 9.3552}, {1.3728, 
   7.7866}, {1.4127, 9.5395}, {1.453, 9.4643}, {1.4645, 
   9.7022}, {1.5226, 9.8433}, {1.5714, 9.8589}, {1.6026, 
   10.0763}, {1.6099, 9.5096}, {1.6494, 9.4711}, {1.6545, 
   10.146}, {1.6695, 10.4486}, {1.7212, 9.1818}, {1.7212, 10.6088}}};

Below I include a (not so) minimal example. Probably someone else can find a more minimal example but this should suffice. Note that I am not interested in finding the solution to this specific task. (I can do that easily by cleaning up the points a bit). This example just serves as an instance of the freezing behavior and the failing of TimeConstrained as requested by MarcoB.

First we define a function to find a continuous fit between two sets of points (see Fitting a curve between two sets of points):

rescalexy[xylist_,{xminmax_,yminmax_},{xminmaxgoal_,yminmaxgoal_}]:=Transpose[{Rescale[xylist[[All,1]],xminmax,xminmaxgoal],Rescale[xylist[[All,2]],yminmax,yminmaxgoal]}]

splinefit[upperBoundLowerBoundList_,nparam_Integer,degr_Integer]:=
Module[{pts,knots,vars,fitaux,smoothness,constraints,solution,xminmax,yminmax},
    pts={upData,downData}=upperBoundLowerBoundList;
    {xminmax,yminmax}={MinMax[pts[[All,All,1]]],MinMax[pts[[All,All,2]]]};
    pts=(rescalexy[#,{xminmax,yminmax},{{0,1},{0,1}}])&/@pts;
    {upData,downData}=pts;
    vars=c/@Range[nparam];
    knots=Join[ConstantArray[0,degr],Subdivide[nparam-degr],ConstantArray[1,degr]];
    fitaux[x_]:=Table[BSplineBasis[{degr,knots},i,x],{i,0,nparam-1}].vars;
    smoothness=Total[Differences[vars,2]^2];
    constraints=Flatten[{fitaux[#[[1]]]<=#[[2]]&/@upData,fitaux[#[[1]]]>=#[[2]]&/@downData}];
        constraints=constraints/.{c[a_]->c[a]};
    solution=FindMinimum[{sm=smoothness,co=constraints},va=vars];
    Plot[
        Rescale[fitaux[(x-xminmax[[1]])/(xminmax[[2]]-xminmax[[1]])]/.solution[[2]],{0,1},yminmax]  
        ,{x,Sequence@@xminmax}
        ,AspectRatio->1,ImageSize->400,PlotRange->All]
]

Then splinefit[data, 150, 3] will hang when applied to the data:

data={{{0.8539, 10.5206}, {0.8556, 10.5051}, {0.8592, 10.53}, {0.8636, 
   10.555}, {0.8643, 13.6494}, {0.8643, 19.9987}, {0.8698, 
   10.5645}, {0.8721, 10.5962}, {0.8786, 10.6034}, {0.8811, 
   10.6194}, {0.8824, 10.6735}, {0.8869, 13.6494}, {0.8869, 
   19.9987}, {0.8884, 10.622}, {0.8954, 10.6581}, {0.8972, 
   10.6349}, {0.904, 10.6517}, {0.9068, 11.045}, {0.9095, 
   13.6494}, {0.9095, 19.9987}, {0.914, 10.6649}, {0.9151, 
   10.7121}, {0.9224, 10.6942}, {0.9296, 10.6991}, {0.9321, 
   13.6494}, {0.9321, 19.9987}, {0.9389, 10.8126}, {0.9418, 
   10.7148}, {0.9496, 10.7351}, {0.9503, 10.7663}, {0.9547, 
   13.6494}, {0.9547, 19.9987}, {0.9552, 10.7543}, {0.9603, 
   10.7646}, {0.9683, 10.7761}, {0.9696, 10.8508}, {0.9726, 
   10.8018}, {0.9773, 13.6494}, {0.9773, 19.9987}, {0.9792, 
   10.799}, {0.9841, 10.9972}, {0.9852, 10.8168}, {0.993, 
   10.8259}, {0.9964, 11.3662}, {1., 13.6494}, {1., 19.9987}, {1.0001,
    10.8571}, {1.0019, 10.8108}, {1.0087, 10.8102}, {1.013, 
   10.8282}, {1.015, 10.8132}, {1.0194, 10.9288}, {1.0206, 
   10.8197}, {1.0247, 13.4745}, {1.0248, 11.209}, {1.0275, 
   10.836}, {1.0283, 10.8022}, {1.0287, 11.6805}, {1.0357, 
   13.2118}, {1.036, 10.7757}, {1.0393, 13.1242}, {1.0395, 
   11.7853}, {1.0405, 13.095}, {1.0409, 13.0853}, {1.0411, 
   13.082}, {1.0411, 13.081}, {1.0411, 13.0806}, {1.0436, 
   10.7512}, {1.0475, 10.7325}, {1.0514, 11.3404}, {1.0514, 
   11.3298}, {1.0514, 11.2981}, {1.0515, 11.2239}, {1.0516, 
   11.0658}, {1.0517, 10.7875}, {1.0533, 10.7307}, {1.0538, 
   10.7876}, {1.0539, 10.8557}, {1.054, 10.8885}, {1.0596, 
   10.686}, {1.0596, 10.9559}, {1.065, 10.686}, {1.0654, 
   10.8729}, {1.0694, 10.686}, {1.078, 10.8729}, {1.0807, 
   10.6584}, {1.0838, 11.2466}, {1.0885, 10.7483}, {1.1107, 
   10.7066}, {1.1614, 10.654}, {1.1692, 10.2988}, {1.1959, 
   10.0731}, {1.2164, 10.2331}, {1.2458, 9.8058}, {1.2662, 
   10.8644}, {1.3176, 9.517}, {1.4179, 9.799}, {1.4402, 
   10.2199}, {1.4602, 9.9541}, {1.4942, 10.917}, {1.5076, 
   10.0063}, {1.5401, 10.2214}, {1.5702, 10.9346}, {1.5818, 
   10.2238}, {1.5955, 10.9404}, {1.6064, 12.3771}, {1.6328, 
   10.591}, {1.6746, 11.1102}, {1.6762, 10.77}}, {{0.8523, 
   10.4477}, {0.8528, 10.4803}, {0.8584, 6.3921}, {0.8598, 
   10.4422}, {0.8601, 10.5144}, {0.8629, 5.4032}, {0.8643, 
   7.3}, {0.8658, 10.5372}, {0.8736, 10.5423}, {0.8761, 
   9.8091}, {0.8781, 10.5757}, {0.881, 10.3277}, {0.8827, 
   10.5946}, {0.8869, 7.3}, {0.8888, 10.5886}, {0.8931, 
   6.4151}, {0.8933, 10.6143}, {0.8984, 5.4952}, {0.9002, 
   6.1774}, {0.9026, 10.0077}, {0.9028, 10.6323}, {0.9095, 
   7.3}, {0.9135, 5.7788}, {0.9136, 10.6491}, {0.9226, 
   10.6714}, {0.9241, 10.6502}, {0.9293, 10.6856}, {0.9321, 
   7.3}, {0.9356, 10.6862}, {0.9402, 6.4304}, {0.9446, 
   5.6102}, {0.9461, 10.7102}, {0.9472, 9.4165}, {0.9532, 
   10.7093}, {0.9547, 7.3}, {0.955, 10.7319}, {0.9623, 
   10.7513}, {0.9659, 6.5377}, {0.9691, 10.7427}, {0.9724, 
   10.7658}, {0.9749, 10.782}, {0.9773, 7.3}, {0.9793, 
   5.7022}, {0.9798, 10.7785}, {0.9858, 10.7426}, {0.9864, 
   10.793}, {0.9937, 10.8037}, {0.9941, 10.7837}, {0.9952, 
   6.5377}, {1., 7.3}, {1.0024, 10.7953}, {1.0103, 5.7635}, {1.0114, 
   10.7916}, {1.0154, 9.8888}, {1.0214, 10.7948}, {1.0254, 
   10.7569}, {1.0289, 10.7035}, {1.0299, 10.7782}, {1.0327, 
   10.7372}, {1.0361, 6.691}, {1.0374, 10.7547}, {1.0397, 
   5.9398}, {1.0399, 10.7263}, {1.043, 9.9294}, {1.0433, 
   10.6904}, {1.0455, 10.7158}, {1.0491, 10.6823}, {1.0492, 
   10.5803}, {1.0493, 10.7096}, {1.0522, 10.6607}, {1.0525, 
   10.5688}, {1.0541, 10.5693}, {1.0545, 10.2275}, {1.0548, 
   10.6022}, {1.0551, 10.6358}, {1.056, 10.2713}, {1.0565, 
   10.3387}, {1.0566, 10.4693}, {1.0566, 10.4496}, {1.0566, 
   10.4084}, {1.0574, 6.7754}, {1.0599, 10.5482}, {1.061, 
   6.0625}, {1.0617, 9.6178}, {1.0617, 9.6105}, {1.0618, 
   9.5883}, {1.062, 9.5207}, {1.0627, 9.3148}, {1.0653, 
   8.6872}, {1.0657, 10.3331}, {1.0702, 10.6255}, {1.0743, 
   6.7754}, {1.0749, 10.5824}, {1.076, 8.737}, {1.0773, 
   10.3331}, {1.0823, 8.5491}, {1.0823, 6.1621}, {1.0842, 
   10.5407}, {1.0844, 8.4865}, {1.085, 8.4657}, {1.0853, 
   8.4587}, {1.0857, 9.9252}, {1.0861, 10.4047}, {1.0864, 
   9.7131}, {1.0867, 9.64}, {1.0987, 10.4172}, {1.1253, 
   10.1805}, {1.1617, 9.8886}, {1.2035, 9.6675}, {1.2842, 
   9.4229}, {1.3314, 9.0844}, {1.3673, 9.3552}, {1.3728, 
   7.7866}, {1.4127, 9.5395}, {1.453, 9.4643}, {1.4645, 
   9.7022}, {1.5226, 9.8433}, {1.5714, 9.8589}, {1.6026, 
   10.0763}, {1.6099, 9.5096}, {1.6494, 9.4711}, {1.6545, 
   10.146}, {1.6695, 10.4486}, {1.7212, 9.1818}, {1.7212, 10.6088}}};
Source Link
Kvothe
  • 4.8k
  • 11
  • 32
Loading