sursumCorda

1279 Reputation

15 Badges

2 years, 353 days

MaplePrimes Activity


These are questions asked by sursumCorda

For instance, “[1, 2, 3]”, “[``([1, 2]), uneval([3])]”, and “[[1, 2], [3, 'NULL']]” are fully rectangular. “[1, 2, [3]]”, “[`[]`(1, 2), [3]]”, and “[[1, 2], [3, NULL]]” are considered nonrectangular, but if we temporarily freeze the "ragged" parts or regard them as a depth-1 container, the corresponding expressions will seem rectangular. `type(…, list(Non(list)))` and `type(…, listlist(Non(list)))` check these, but they do not work for general cases.
To be specific, the desired output should be something like

IsRectangular([[[l, 2], [3, 4]], [[5, 6], [7, 8]]]);
 = 
                            true, 3

IsRectangular([[[O, l, 2], [3, 4]], [[5, 6], [7, 8]]]);
 = 
                            false, 2

IsRectangular([[[[l], 2], [3, 4]], [[5, 6], [7, 8]]], 3);
 = 
                            true, 3

IsRectangular([[O, [l, 2], [3, 4]], [[5, 6], [7, 8]]], 2);
 = 
                            false, 1

The results above can be obtained by some observations. However, if the input has deeper levels, evaluating this will be a punishing work: 

test__1 := [[[[[[[[-288],[-287],[-286]],[[-285],[-284],[-283]],[[-282],[-281],[-280]],[[-279],[-278],[-277]]]],[[[[-276],[-275],[-274]],[[-273],[-272],[-271]],[[-270],[-269],[-268]],[[-267],[-266],[-265]]]],[[[[-264],[-263],[-262]],[[-261],[-260],[-259]],[[-258],[-257],[-256]],[[-255],[-254],[-253]]]]],[[[[[-252],[-251],[-250]],[[-249],[-248],[-247]],[[-246],[-245],[-244]],[[-243],[-242],[-241]]]],[[[[-240],[-239],[-238]],[[-237],[-236],[-235]],[[-234],[-233],[-232]],[[-231],[-230],[-229]]]],[[[[-228],[-227],[-226]],[[-225],[-224],[-223]],[[-222],[-221],[-220]],[[-219],[-218],[-217]]]]]],[[[[[[-216],[-215],[-214]],[[-213],[-212],[-211]],[[-210],[-209],[-208]],[[-207],[-206],[-205]]]],[[[[-204],[-203],[-202]],[[-201],[-200],[-199]],[[-198],[-197],[-196]],[[-195],[-194],[-193]]]],[[[[-192],[-191],[-190]],[[-189],[-188],[-187]],[[-186],[-185],[-184]],[[-183],[-182],[-181]]]]],[[[[[-180],[-179],[-178]],[[-177],[-176],[-175]],[[-174],[-173],[-172]],[[-171],[-170],[-169]]]],[[[[-168],[-167],[-166]],[[-165],[-164],[-163]],[[-162],[-161],[-160]],[[-159],[-158],[-157]]]],[[[[-156],[-155],[-154]],[[-153],[-152],[-151]],[[-150],[-149],[-148]],[[-147],[-146],[-145]]]]]],[[[[[[-144],[-143],[-142]],[[-141],[-140],[-139]],[[-138],[-137],[-136]],[[-135],[-134],[-133]]]],[[[[-132],[-131],[-130]],[[-129],[-128],[-127]],[[-126],[-125],[-124]],[[-123],[-122],[-121]]]],[[[[-120],[-119],[-118]],[[-117],[-116],[-115]],[[-114],[-113],[-112]],[[-111],[-110],[-109]]]]],[[[[[-108],[-107],[-106]],[[-105],[-104],[-103]],[[-102],[-101],[-100]],[[-99],[-98],[-97]]]],[[[[-96],[-95],[-94]],[[-93],[-92],[-91]],[[-90],[-89],[-88]],[[-87],[-86],[-85]]]],[[[[-84],[-83],[-82]],[[-81],[-80],[-79]],[[-78],[-77],[-76]],[[-75],[-74],[-73]]]]]],[[[[[[-72],[-71],[-70]],[[-69],[-68],[-67]],[[-66],[-65],[-64]],[[-63],[-62],[-61]]]],[[[[-60],[-59],[-58]],[[-57],[-56],[-55]],[[-54],[-53],[-52]],[[-51],[-50],[-49]]]],[[[[-48],[-47],[-46]],[[-45],[-44],[-43]],[[-42],[-41],[-40]],[[-39],[-38],[-37]]]]],[[[[[-36],[-35],[-34]],[[-33],[-32],[-31]],[[-30],[-29],[-28]],[[-27],[-26],[-25]]]],[[[[-24],[-23],[-22]],[[-21],[-20],[-19]],[[-18],[-17],[-16]],[[-15],[-14],[-13]]]],[[[[-12],[-11],[-10]],[[-9],[-8],[-7]],[[-6],[-5],[-4]],[[-3],[-2],[-1],[-0]]]]]]],[[[[[[[0],[1],[2]],[[3],[4],[5]],[[6],[7],[8]],[[9],[10],[11]]]],[[[[12],[13],[14]],[[15],[16],[17]],[[18],[19],[20]],[[21],[22],[23]]]],[[[[24],[25],[26]],[[27],[28],[29]],[[30],[31],[32]],[[33],[34],[35]]]]],[[[[[36],[37],[38]],[[39],[40],[41]],[[42],[43],[44]],[[45],[46],[47]]]],[[[[48],[49],[50]],[[51],[52],[53]],[[54],[55],[56]],[[57],[58],[59]]]],[[[[60],[61],[62]],[[63],[64],[65]],[[66],[67],[68]],[[69],[70],[71]]]]]],[[[[[[72],[73],[74]],[[75],[76],[77]],[[78],[79],[80]],[[81],[82],[83]]]],[[[[84],[85],[86]],[[87],[88],[89]],[[90],[91],[92]],[[93],[94],[95]]]],[[[[96],[97],[98]],[[99],[100],[101]],[[102],[103],[104]],[[105],[106],[107]]]]],[[[[[108],[109],[110]],[[111],[112],[113]],[[114],[115],[116]],[[117],[118],[119]]]],[[[[120],[121],[122]],[[123],[124],[125]],[[126],[127],[128]],[[129],[130],[131]]]],[[[[132],[133],[134]],[[135],[136],[137]],[[138],[139],[140]],[[141],[142],[143]]]]]],[[[[[[144],[145],[146]],[[147],[148],[149]],[[150],[151],[152]],[[153],[154],[155]]]],[[[[156],[157],[158]],[[159],[160],[161]],[[162],[163],[164]],[[165],[166],[167]]]],[[[[168],[169],[170]],[[171],[172],[173]],[[174],[175],[176]],[[177],[178],[179]]]]],[[[[[180],[181],[182]],[[183],[184],[185]],[[186],[187],[188]],[[189],[190],[191]]]],[[[[192],[193],[194]],[[195],[196],[197]],[[198],[199],[200]],[[201],[202],[203]]]],[[[[204],[205],[206]],[[207],[208],[209]],[[210],[211],[212]],[[213],[214],[215]]]]]],[[[[[[216],[217],[218]],[[219],[220],[221]],[[222],[223],[224]],[[225],[226],[227]]]],[[[[228],[229],[230]],[[231],[232],[233]],[[234],[235],[236]],[[237],[238],[239]]]],[[[[240],[241],[242]],[[243],[244],[245]],[[246],[247],[248]],[[249],[250],[251]]]]],[[[[[252],[253],[254]],[[255],[256],[257]],[[258],[259],[260]],[[261],[262],[263]]]],[[[[264],[265],[266]],[[267],[268],[269]],[[270],[271],[272]],[[273],[274],[275]]]],[[[[276],[277],[278]],[[279],[280],[281]],[[282],[283],[284]],[[285],[286],[287]]]]]]]]:
test__2 := [[[[[[[[-288],[-287],[-286]],[[-285],[-284],[-283]],[[-282],[-281],[-280]],[[-279],[-278],[-277]]]],[[[[-276],[-275],[-274]],[[-273],[-272],[-271]],[[-270],[-269],[-268]],[[-267],[-266],[-265]]]],[[[[-264],[-263],[-262]],[[-261],[-260],[-259]],[[-258],[-257],[-256]],[[-255],[-254],[-253]]]]],[[[[[-252],[-251],[-250]],[[-249],[-248],[-247]],[[-246],[-245],[-244]],[[-243],[-242],[-241]]]],[[[[-240],[-239],[-238]],[[-237],[-236],[-235]],[[-234],[-233],[-232]],[[-231],[-230],[-229]]]],[[[[-228],[-227],[-226]],[[-225],[-224],[-223]],[[-222],[-221],[-220]],[[-219],[-218],[-217]]]]]],[[[[[[-216],[-215],[-214]],[[-213],[-212],[-211]],[[-210],[-209],[-208]],[[-207],[-206],[-205]]]],[[[[-204],[-203],[-202]],[[-201],[-200],[-199]],[[-198],[-197],[-196]],[[-195],[-194],[-193]]]],[[[[-192],[-191],[-190]],[[-189],[-188],[-187]],[[-186],[-185],[-184]],[[-183],[-182],[-181]]]]],[[[[[-180],[-179],[-178]],[[-177],[-176],[-175]],[[-174],[-173],[-172]],[[-171],[-170],[-169]]]],[[[[-168],[-167],[-166]],[[-165],[-164],[-163]],[[-162],[-161],[-160]],[[-159],[-158],[-157]]]],[[[[-156],[-155],[-154]],[[-153],[-152],[-151]],[[-150],[-149],[-148]],[[-147],[-146],[-145]]]]]],[[[[[[-144],[-143],[-142]],[[-141],[-140],[-139]],[[-138],[-137],[-136]],[[-135],[-134],[-133]]]],[[[[-132],[-131],[-130]],[[-129],[-128],[-127]],[[-126],[-125],[-124]],[[-123],[-122],[-121]]]],[[[[-120],[-119],[-118]],[[-117],[-116],[-115]],[[-114],[-113],[-112]],[[-111],[-110],[-109]]]]],[[[[[-108],[-107],[-106]],[[-105],[-104],[-103]],[[-102],[-101],[-100]],[[-99],[-98],[-97]]]],[[[[-96],[-95],[-94]],[[-93],[-92],[-91]],[[-90],[-89],[-88]],[[-87],[-86],[-85]]]],[[[[-84],[-83],[-82]],[[-81],[-80],[-79]],[[-78],[-77],[-76]],[[-75],[-74],[-73]]]]]],[[[[[[-72],[-71],[-70]],[[-69],[-68],[-67]],[[-66],[-65],[-64]],[[-63],[-62],[-61]]]],[[[[-60],[-59],[-58]],[[-57],[-56],[-55]],[[-54],[-53],[-52]],[[-51],[-50],[-49]]]],[[[[-48],[-47],[-46]],[[-45],[-44],[-43]],[[-42],[-41],[-40]],[[-39],[-38],[-37]]]]],[[[[[-36],[-35],[-34]],[[-33],[-32],[-31]],[[-30],[-29],[-28]],[[-27],[-26],[-25]]]],[[[[-24],[-23],[-22]],[[-21],[-20],[-19]],[[-18],[-17],[-16]],[[-15],[-14],[-13]]]],[[[[-12],[-11],[-10]],[[-9],[-8],[-7]],[[-6],[-5],[-4]],[[-3],[-2,0],[-0]]]]]]],[[[[[[[-1],[1],[2]],[[3],[4],[5]],[[6],[7],[8]],[[9],[10],[11]]]],[[[[12],[13],[14]],[[15],[16],[17]],[[18],[19],[20]],[[21],[22],[23]]]],[[[[24],[25],[26]],[[27],[28],[29]],[[30],[31],[32]],[[33],[34],[35]]]]],[[[[[36],[37],[38]],[[39],[40],[41]],[[42],[43],[44]],[[45],[46],[47]]]],[[[[48],[49],[50]],[[51],[52],[53]],[[54],[55],[56]],[[57],[58],[59]]]],[[[[60],[61],[62]],[[63],[64],[65]],[[66],[67],[68]],[[69],[70],[71]]]]]],[[[[[[72],[73],[74]],[[75],[76],[77]],[[78],[79],[80]],[[81],[82],[83]]]],[[[[84],[85],[86]],[[87],[88],[89]],[[90],[91],[92]],[[93],[94],[95]]]],[[[[96],[97],[98]],[[99],[100],[101]],[[102],[103],[104]],[[105],[106],[107]]]]],[[[[[108],[109],[110]],[[111],[112],[113]],[[114],[115],[116]],[[117],[118],[119]]]],[[[[120],[121],[122]],[[123],[124],[125]],[[126],[127],[128]],[[129],[130],[131]]]],[[[[132],[133],[134]],[[135],[136],[137]],[[138],[139],[140]],[[141],[142],[143]]]]]],[[[[[[144],[145],[146]],[[147],[148],[149]],[[150],[151],[152]],[[153],[154],[155]]]],[[[[156],[157],[158]],[[159],[160],[161]],[[162],[163],[164]],[[165],[166],[167]]]],[[[[168],[169],[170]],[[171],[172],[173]],[[174],[175],[176]],[[177],[178],[179]]]]],[[[[[180],[181],[182]],[[183],[184],[185]],[[186],[187],[188]],[[189],[190],[191]]]],[[[[192],[193],[194]],[[195],[196],[197]],[[198],[199],[200]],[[201],[202],[203]]]],[[[[204],[205],[206]],[[207],[208],[209]],[[210],[211],[212]],[[213],[214],[215]]]]]],[[[[[[216],[217],[218]],[[219],[220],[221]],[[222],[223],[224]],[[225],[226],[227]]]],[[[[228],[229],[230]],[[231],[232],[233]],[[234],[235],[236]],[[237],[238],[239]]]],[[[[240],[241],[242]],[[243],[244],[245]],[[246],[247],[248]],[[249],[250],[251]]]]],[[[[[252],[253],[254]],[[255],[256],[257]],[[258],[259],[260]],[[261],[262],[263]]]],[[[[264],[265],[266]],[[267],[268],[269]],[[270],[271],[272]],[[273],[274],[275]]]],[[[[276],[277],[278]],[[279],[280],[281]],[[282],[283],[284]],[[285],[286],[287]]]]]]]]:
test__3 := [[[[[[[[-288],[-287],[-286]],[[-285],[-284],[-283]],[[-282],[-281],[-280]],[[-279],[-278],[-277]]]],[[[[-276],[-275],[-274]],[[-273],[-272],[-271]],[[-270],[-269],[-268]],[[-267],[-266],[-265]]]],[[[[-264],[-263],[-262]],[[-261],[-260],[-259]],[[-258],[-257],[-256]],[[-255],[-254],[-253]]]]],[[[[[-252],[-251],[-250]],[[-249],[-248],[-247]],[[-246],[-245],[-244]],[[-243],[-242],[-241]]]],[[[[-240],[-239],[-238]],[[-237],[-236],[-235]],[[-234],[-233],[-232]],[[-231],[-230],[-229]]]],[[[[-228],[-227],[-226]],[[-225],[-224],[-223]],[[-222],[-221],[-220]],[[-219],[-218],[-217]]]]]],[[[[[[-216],[-215],[-214]],[[-213],[-212],[-211]],[[-210],[-209],[-208]],[[-207],[-206],[-205]]]],[[[[-204],[-203],[-202]],[[-201],[-200],[-199]],[[-198],[-197],[-196]],[[-195],[-194],[-193]]]],[[[[-192],[-191],[-190]],[[-189],[-188],[-187]],[[-186],[-185],[-184]],[[-183],[-182],[-181]]]]],[[[[[-180],[-179],[-178]],[[-177],[-176],[-175]],[[-174],[-173],[-172]],[[-171],[-170],[-169]]]],[[[[-168],[-167],[-166]],[[-165],[-164],[-163]],[[-162],[-161],[-160]],[[-159],[-158],[-157]]]],[[[[-156],[-155],[-154]],[[-153],[-152],[-151]],[[-150],[-149],[-148]],[[-147],[-146],[-145]]]]]],[[[[[[-144],[-143],[-142]],[[-141],[-140],[-139]],[[-138],[-137],[-136]],[[-135],[-134],[-133]]]],[[[[-132],[-131],[-130]],[[-129],[-128],[-127]],[[-126],[-125],[-124]],[[-123],[-122],[-121]]]],[[[[-120],[-119],[-118]],[[-117],[-116],[-115]],[[-114],[-113],[-112]],[[-111],[-110],[-109]]]]],[[[[[-108],[-107],[-106]],[[-105],[-104],[-103]],[[-102],[-101],[-100]],[[-99],[-98],[-97]]]],[[[[-96],[-95],[-94]],[[-93],[-92],[-91]],[[-90],[-89],[-88]],[[-87],[-86],[-85]]]],[[[[-84],[-83],[-82]],[[-81],[-80],[-79]],[[-78],[-77],[-76]],[[-75],[-74],[-73]]]]]],[[[[[[-72],[-71],[-70]],[[-69],[-68],[-67]],[[-66],[-65],[-64]],[[-63],[-62],[-61]]]],[[[[-60],[-59],[-58]],[[-57],[-56],[-55]],[[-54],[-53],[-52]],[[-51],[-50],[-49]]]],[[[[-48],[-47],[-46]],[[-45],[-44],[-43]],[[-42],[-41],[-40]],[[-39],[-38],[-37]]]]],[[[[[-36],[-35],[-34]],[[-33],[-32],[-31]],[[-30],[-29],[-28]],[[-27],[-26],[-25]]]],[[[[-24],[-23],[-22]],[[-21],[-20],[-19]],[[-18],[-17],[-16]],[[-15],[-14],[-13]]]],[[[[-12],[-11],[-10]],[[-9],[-8],[-7]],[[-6],[-5],[-4]],[[-3],[-2,-0]]]]]]],[[[[[[-1],[[1],[2]],[[3],[4],[5]],[[6],[7],[8]],[[9],[10],[11]]]],[[[[12],[13],[14]],[[15],[16],[17]],[[18],[19],[20]],[[21],[22],[23]]]],[[[[24],[25],[26]],[[27],[28],[29]],[[30],[31],[32]],[[33],[34],[35]]]]],[[[[[36],[37],[38]],[[39],[40],[41]],[[42],[43],[44]],[[45],[46],[47]]]],[[[[48],[49],[50]],[[51],[52],[53]],[[54],[55],[56]],[[57],[58],[59]]]],[[[[60],[61],[62]],[[63],[64],[65]],[[66],[67],[68]],[[69],[70],[71]]]]]],[[[[[[72],[73],[74]],[[75],[76],[77]],[[78],[79],[80]],[[81],[82],[83]]]],[[[[84],[85],[86]],[[87],[88],[89]],[[90],[91],[92]],[[93],[94],[95]]]],[[[[96],[97],[98]],[[99],[100],[101]],[[102],[103],[104]],[[105],[106],[107]]]]],[[[[[108],[109],[110]],[[111],[112],[113]],[[114],[115],[116]],[[117],[118],[119]]]],[[[[120],[121],[122]],[[123],[124],[125]],[[126],[127],[128]],[[129],[130],[131]]]],[[[[132],[133],[134]],[[135],[136],[137]],[[138],[139],[140]],[[141],[142],[143]]]]]],[[[[[[144],[145],[146]],[[147],[148],[149]],[[150],[151],[152]],[[153],[154],[155]]]],[[[[156],[157],[158]],[[159],[160],[161]],[[162],[163],[164]],[[165],[166],[167]]]],[[[[168],[169],[170]],[[171],[172],[173]],[[174],[175],[176]],[[177],[178],[179]]]]],[[[[[180],[181],[182]],[[183],[184],[185]],[[186],[187],[188]],[[189],[190],[191]]]],[[[[192],[193],[194]],[[195],[196],[197]],[[198],[199],[200]],[[201],[202],[203]]]],[[[[204],[205],[206]],[[207],[208],[209]],[[210],[211],[212]],[[213],[214],[215]]]]]],[[[[[[216],[217],[218]],[[219],[220],[221]],[[222],[223],[224]],[[225],[226],[227]]]],[[[[228],[229],[230]],[[231],[232],[233]],[[234],[235],[236]],[[237],[238],[239]]]],[[[[240],[241],[242]],[[243],[244],[245]],[[246],[247],[248]],[[249],[250],[251]]]]],[[[[[252],[253],[254]],[[255],[256],[257]],[[258],[259],[260]],[[261],[262],[263]]]],[[[[264],[265],[266]],[[267],[268],[269]],[[270],[271],[272]],[[273],[274],[275]]]],[[[[276],[277],[278]],[[279],[280],[281]],[[282],[283],[284]],[[285],[286],[287]]]]]]]]:

Is there a generalized test procedure (e.g., ListTools:-IsRectangular) that effectively works for any nested list of an arbitrary nesting level? 

The so-called look-and-say sequence is something like:

# Starting digit: 0 
0→one 0→
10→one 1, then one 0→
1110→three 1's, then one 0→
3110→one 3, two 1's, then one 0→
132110→…

Rosetta Code gives an example of how to generate such sequences in Maple; however, the code in that example is lengthy. More to the point, compared to the subsequent Mathematica analogue, it is rather inefficient (though more readable, but that's not the point). 
I slightly modify the original code, and now the modified version is significantly faster than the original one: 
 

restart;

interface(version)NULL

`Standard Worksheet Interface, Maple 2023.1, Windows 10, July 7 2023 Build ID 1723669`

(1)
LookAndSay := proc(m::posint, n::nonnegint := 1, ` $`)::'Vector'(nonnegint);

LookAndSay(5, 0)NULL

Vector[column](%id = 36893490791509382076)

(2)

CodeTools['Usage'](LookAndSay(50), iterations = 4)

memory used=3.99GiB, alloc change=1.92MiB, cpu time=48.73s, real time=25.03s, gc time=39.05s

 

gc()time[real](LookAndSay(50))NULL

25.030

(3)


 

Download LookAndSay.mw

For the sake of convenience, I paste the original Maple code from the page above into here:

generate_seq := proc(s)
	local times, output, i;
	times := 1;
	output := "";
	for i from 2 to StringTools:-Length(s) do
		if (s[i] <> s[i-1]) then
			output := cat(output, times, s[i-1]);
			times := 1; # re-assign
		else 
			times ++;
		end if;
	end do;
	cat(output, times, s[i - 1]);
end proc:

Look_and_Say :=proc(n)
	local value, i;
	value := "1";
	print(value);
	for i from 2 to n do
		value := generate_seq(value);
		print(value);
	end do;
end proc:

#Test:
Look_and_Say(10);

Below is a modified version by me: 

LookAndSay := proc(m::posint, n::nonnegint := 1, $)::'Vector'(nonnegint);
    uses StringTools;
    local delete::'equationlist' := Repeat~(Explode(ExpandCharacterClass(":digit:")), 2), aux::procedure[nonnegint](posint) := proc(_::posint)::nonnegint;
        options cache;
        description "https://rosettacode.org/wiki/Look-and-say_sequence#Maple";
        if _ = 1 then
            n
        else
            local char::'nonemptystring' := String(thisproc(_ - 1)), temp::list(string)(*, str*);
            try
                temp := RegSplit(sprintf("(?=[%s])(?<=(?!%s)[%s])", Unique(char), Join(select[2](foldr, eval(apply), delete, rcurry(OrMap, Unique(char)), curry(curry, Has)), "|"), Unique(char)), char)
            catch "cannot compile regular expression: repetition-operator operand invalid":
                local rule::'equationlist' := (str -> str = Insert(str, 1, " "))~(subs(delete =~ NULL, Generate(2, Support(char))));
                temp := StringSplit(Subs(rule, char), " ") # to be replaced
            end;
            parse(String(seq('length(str), str[1]', str in temp)))
        fi;
    end;
    forget(aux);
    Vector[column](m, aux, datatype = nonnegint)
end:

The form LookAndSay(m, n); produces the first m terms in a "look-and-say" sequence starting with n (which is by default 1). Unfortunately, even if "the modified version is significantly faster than the original one", it is still much slower (25s versus 2.5s) than the uncompiled Mathematica implementation (on the same modern computer):

So, is there a workaround to evaluate LookAndSay(50, 1): in about three seconds (instead of half a minute) in the first call (without looking up a pre-calculated table) (on the same computer) as well? 

For instance, given nine integer x1, x2, …, x9 satisfying x1, x2, …, x9 ≥ -5 and x13x23+…+x93=0, the goal is to maximize x1 + x2 + … + x9. However, according to Optimization/Options,  is not accepted by the Optimization:-Maximize command. A probable method is applying floor into the optimization variables; unfortunately, I can only get: Error, (in Optimization:-NLPSolve) no improved point could be found

(*restart;*)
vars := [x || (1 .. 9)]:
Optimization:-Maximize(`?()`(`+`, floor~(expr)), [add(floor~(expr) ^~ 3) = 0, expr[] >=~ -5], initialpoint = (unapply~(expr) =~ rand(-5 .. 10))()); # Alternatives to exhaustive search?
Error, (in Optimization:-NLPSolve) no improved point could be found

Is there any workaround to solve this problem? 

I think that the following worksheet is self-explaining: 
 

restartNULL

interface(version)

`Standard Worksheet Interface, Maple 2023.1, Windows 10, July 7 2023 Build ID 1723669`

(1)

evalf(LinearAlgebra:-MatrixFunction(`<|>`(`<,>`(1, 0, 0), `<,>`(1, 1, I), `<,>`(3, 0, 2)), 'x'/(exp('x')-1), 'x'))

Matrix(%id = 36893489913840207380)

(2)

(* Yet in many cases, the input may be inexact, for we need to speed up computations and decrease memory usage. *)

m := Matrix([[1, 1, 3], [0, 1, 0], [0, I, 2]], datatype = complex(sfloat)):
Digits := 10:
do
    print(CodeTools:-Usage(LinearAlgebra:-MatrixFunction(m, 'x'/(exp('x') - 1), 'x'), quiet), Digits++)
until Digits > 20:

Matrix(3, 3, {(1, 1) = .5819767069, (1, 2) = -.3333333333+.1931757357*I, (1, 3) = -.8068242642, (2, 1) = 0., (2, 2) = .5819767069, (2, 3) = 0., (3, 1) = 0., (3, 2) = -.2689414214*I, (3, 3) = .3130352855}), 10

 

Matrix(3, 3, {(1, 1) = .5819767069, (1, 2) = -.33333333332+.19317573586*I, (1, 3) = -.8068242642, (2, 1) = 0., (2, 2) = .5819767069, (2, 3) = 0., (3, 1) = 0., (3, 2) = -.2689414214*I, (3, 3) = .3130352855}), 11

 

Matrix(3, 3, {(1, 1) = .5819767069, (1, 2) = -.333333333321+.193175735853*I, (1, 3) = -.8068242642, (2, 1) = 0., (2, 2) = .5819767069, (2, 3) = 0., (3, 1) = 0., (3, 2) = -.2689414214*I, (3, 3) = .3130352855}), 12

 

Matrix(3, 3, {(1, 1) = .5819767069, (1, 2) = -.3333333333209+.1931757358526*I, (1, 3) = -.8068242642, (2, 1) = 0., (2, 2) = .5819767069, (2, 3) = 0., (3, 1) = 0., (3, 2) = -.2689414214*I, (3, 3) = .3130352855}), 13

 

Matrix(3, 3, {(1, 1) = .5819767069, (1, 2) = -.33333333332087+.19317573585263*I, (1, 3) = -.8068242642, (2, 1) = 0., (2, 2) = .5819767069, (2, 3) = 0., (3, 1) = 0., (3, 2) = -.2689414214*I, (3, 3) = .3130352855}), 14

 

Matrix(3, 3, {(1, 1) = .5819767069, (1, 2) = -.333333333320870+.193175735852624*I, (1, 3) = -.8068242642, (2, 1) = 0., (2, 2) = .5819767069, (2, 3) = 0., (3, 1) = 0., (3, 2) = -.2689414214*I, (3, 3) = .3130352855}), 15

 

Matrix(3, 3, {(1, 1) = .5819767068693265, (1, 2) = .9999999999999999-3.806824264*I, (1, 3) = -.8068242641099854, (2, 1) = 0., (2, 2) = .5819767068693265, (2, 3) = 0., (3, 1) = 0., (3, 2) = -.2689414214*I, (3, 3) = .3130352854993314}), 16

 

Matrix(3, 3, {(1, 1) = .58197670686932644, (1, 2) = .99999999999999997-3.806824264*I, (1, 3) = -.80682426410998598, (2, 1) = 0., (2, 2) = .58197670686932644, (2, 3) = 0., (3, 1) = 0., (3, 2) = -.2689414214*I, (3, 3) = .31303528549933112}), 17

 

Matrix(3, 3, {(1, 1) = .581976706869326423, (1, 2) = -.999999999999999997+2.19317573589001464*I, (1, 3) = -.806824264109985348, (2, 1) = 0., (2, 2) = .581976706869326423, (2, 3) = 0., (3, 1) = 0., (3, 2) = -.2689414214*I, (3, 3) = .313035285499331308}), 18

 

Matrix(3, 3, {(1, 1) = .5819767068693264245, (1, 2) = -.2500000000000000000-0.5682426411e-1*I, (1, 3) = -.8068242641099853627, (2, 1) = 0., (2, 2) = .5819767068693264245, (2, 3) = 0., (3, 1) = 0., (3, 2) = -.2689414214*I, (3, 3) = .3130352854993313037}), 19

 

Matrix(%id = 36893489913905117652), 20

(3)

# Is `linalg:-matfunc` better than `LinearAlgebra:-MatrixFunction`?!
Digits := 10:
linalg:-matfunc(m, 'x'/(exp('x') - 1), 'x');

Matrix(3, 3, {(1, 1) = .5819767070, (1, 2) = -.3386968877+.2092663986*I, (1, 3) = -.8068242645, (2, 1) = 0., (2, 2) = .5819767070, (2, 3) = 0., (3, 1) = 0., (3, 2) = -.2689414215*I, (3, 3) = .3130352855})

(4)

(*
Even for a 3×3 matrix, the number of digits has to be set to 20.
So … how can you certify that the following output is validated?
*)
_seed := 1234:

LinearAlgebra:-MatrixFunction(LinearAlgebra:-RandomMatrix(50, density = .5, generator = -2*Pi .. 2*Pi, datatype = complex[8]), 'x'/(exp('x')-1), 'x')

Warning, the use of _seed is deprecated.  Please consider using one of the alternatives listed on the _seed help page.

 

Matrix(%id = 36893490216779135924)

(5)


 

Download funm.mws

How do you confirm the validity of the last output? 

> op(3, eval(LinearAlgebra:-MatrixFunction));
 = 
  Copyright (c) 2002 Waterloo Maple Inc. All rights reserved.

And does this mean that LinearAlgebra['MatrixFunction'] is so out-dated that the return value is less effective in certain cases?

Wolfram's marketing literature states that a compiled function may generate the dates for the years 1 through 5.7 million in a couple of seconds rather than in minutes (comparing to the "uncompiled implementation").
The given function in this link can be translated into Maple language as follows: 

(*
  Note that this is only a mathematical program that outputs some data,
   hence 'Easter(-2, 1)' will never return real Gregorian Easter dates!
*)
Easter:=proc(BEGIN::integer[4],END::integer[4],$)::Array(BEGIN..END,[integer[1..12],integer[1..31]]);# the parent function
	description "https://www.wolfram.com/language/12/code-compilation/compute-the-date-of-easter.html";
	local computus::procedure[[integer[1 .. 12], integer[1 .. 31]]](integer):=proc(Year::integer,` $`)::[integer[1..12],integer[1..31]];# the child function
		options threadsafe;
		local a::nonnegint,b::integer,c::nonnegint,d::integer,e::nonnegint,f::integer,g::nonnegint,h::nonnegint,i::nonnegint,j::nonnegint,k::nonnegint,Month::integer[1..12],Day::integer[1..31];
		(* For compatibility, when `Year` is nonpositive, the command `iquo` must be replaced with slower `floor`. *)
		if Year<=0 then
			a,b,c:=Year mod 19,floor(Year/100),Year mod 100;
			d,e,f:=floor(b/4),b mod 4,floor((8*b+13)/25);
			g,h,i:=19*a+b-d-f+15 mod 30,floor(c/4),c mod 4;
			j:=floor((a+11*g)/319);k:=2*e+2*h-i-g+j+32 mod 7;
			Month:=floor((g-j+k+90)/25);Day:=g-j+k+Month+19 mod 32
		else
			a,b,c:=irem(Year,19),iquo(Year,100),irem(Year,100):
			d,e,f:=iquo(b,4),irem(b,4),iquo(8*b+13,25);
			g,h,i:=irem(19*a+b-d-f+15,30),iquo(c,4),irem(c,4);
			j:=iquo(a+11*g,319);k:=irem(2*e+2*h-i-g+j+32,7);
			Month:=iquo(g-j+k+90,25);Day:=irem(g-j+k+Month+19,32)
		fi;
		[Month,Day]
	end;
	Array(BEGIN..END,computus)
end:

However, as "no nested procedures can be translated" to optimized native machine code (cf. ), executing Easter(1, 5700000) has to take at least two minutes

Is there some workaround that can provide improved performance for such a numerical procedure that contains a nested procedure? In other words, is it possible to produce the `result` (without modifying the algorithm) in two seconds in modern Maple as that Wolfram marketing literature claims?

First 9 10 11 12 13 14 15 Last Page 11 of 23