You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(67) |
Jul
(61) |
Aug
(49) |
Sep
(43) |
Oct
(59) |
Nov
(24) |
Dec
(18) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(34) |
Feb
(35) |
Mar
(72) |
Apr
(42) |
May
(46) |
Jun
(15) |
Jul
(64) |
Aug
(62) |
Sep
(22) |
Oct
(41) |
Nov
(57) |
Dec
(56) |
2004 |
Jan
(48) |
Feb
(47) |
Mar
(33) |
Apr
(39) |
May
(6) |
Jun
(17) |
Jul
(19) |
Aug
(10) |
Sep
(14) |
Oct
(74) |
Nov
(80) |
Dec
(22) |
2005 |
Jan
(43) |
Feb
(33) |
Mar
(52) |
Apr
(74) |
May
(32) |
Jun
(58) |
Jul
(18) |
Aug
(41) |
Sep
(71) |
Oct
(28) |
Nov
(65) |
Dec
(68) |
2006 |
Jan
(54) |
Feb
(37) |
Mar
(82) |
Apr
(211) |
May
(69) |
Jun
(75) |
Jul
(279) |
Aug
(139) |
Sep
(135) |
Oct
(58) |
Nov
(81) |
Dec
(78) |
2007 |
Jan
(141) |
Feb
(134) |
Mar
(65) |
Apr
(49) |
May
(61) |
Jun
(90) |
Jul
(72) |
Aug
(53) |
Sep
(86) |
Oct
(61) |
Nov
(62) |
Dec
(101) |
2008 |
Jan
(100) |
Feb
(66) |
Mar
(76) |
Apr
(95) |
May
(77) |
Jun
(93) |
Jul
(103) |
Aug
(76) |
Sep
(42) |
Oct
(55) |
Nov
(44) |
Dec
(75) |
2009 |
Jan
(103) |
Feb
(105) |
Mar
(121) |
Apr
(59) |
May
(103) |
Jun
(82) |
Jul
(67) |
Aug
(76) |
Sep
(85) |
Oct
(75) |
Nov
(181) |
Dec
(133) |
2010 |
Jan
(107) |
Feb
(116) |
Mar
(145) |
Apr
(89) |
May
(138) |
Jun
(85) |
Jul
(82) |
Aug
(111) |
Sep
(70) |
Oct
(83) |
Nov
(60) |
Dec
(16) |
2011 |
Jan
(61) |
Feb
(16) |
Mar
(52) |
Apr
(41) |
May
(34) |
Jun
(41) |
Jul
(57) |
Aug
(73) |
Sep
(21) |
Oct
(45) |
Nov
(50) |
Dec
(28) |
2012 |
Jan
(70) |
Feb
(36) |
Mar
(71) |
Apr
(29) |
May
(48) |
Jun
(61) |
Jul
(44) |
Aug
(54) |
Sep
(20) |
Oct
(28) |
Nov
(41) |
Dec
(137) |
2013 |
Jan
(62) |
Feb
(55) |
Mar
(31) |
Apr
(23) |
May
(54) |
Jun
(54) |
Jul
(90) |
Aug
(46) |
Sep
(38) |
Oct
(60) |
Nov
(92) |
Dec
(17) |
2014 |
Jan
(62) |
Feb
(35) |
Mar
(72) |
Apr
(30) |
May
(97) |
Jun
(81) |
Jul
(63) |
Aug
(64) |
Sep
(28) |
Oct
(45) |
Nov
(48) |
Dec
(109) |
2015 |
Jan
(106) |
Feb
(36) |
Mar
(65) |
Apr
(63) |
May
(95) |
Jun
(56) |
Jul
(48) |
Aug
(55) |
Sep
(100) |
Oct
(57) |
Nov
(33) |
Dec
(46) |
2016 |
Jan
(76) |
Feb
(53) |
Mar
(88) |
Apr
(79) |
May
(62) |
Jun
(65) |
Jul
(37) |
Aug
(23) |
Sep
(108) |
Oct
(68) |
Nov
(66) |
Dec
(47) |
2017 |
Jan
(55) |
Feb
(11) |
Mar
(30) |
Apr
(19) |
May
(14) |
Jun
(21) |
Jul
(30) |
Aug
(48) |
Sep
(39) |
Oct
(30) |
Nov
(75) |
Dec
(28) |
2018 |
Jan
(70) |
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
2019 |
Jan
(19) |
Feb
(61) |
Mar
(14) |
Apr
(7) |
May
(5) |
Jun
(17) |
Jul
(5) |
Aug
(7) |
Sep
(11) |
Oct
(2) |
Nov
(17) |
Dec
(9) |
2020 |
Jan
(8) |
Feb
(8) |
Mar
(12) |
Apr
(17) |
May
(2) |
Jun
(10) |
Jul
(24) |
Aug
(6) |
Sep
(16) |
Oct
(3) |
Nov
(10) |
Dec
(40) |
2021 |
Jan
(53) |
Feb
(18) |
Mar
(20) |
Apr
(11) |
May
(23) |
Jun
(37) |
Jul
(28) |
Aug
(32) |
Sep
(105) |
Oct
(81) |
Nov
(109) |
Dec
(41) |
2022 |
Jan
(139) |
Feb
(82) |
Mar
(96) |
Apr
(51) |
May
(58) |
Jun
(104) |
Jul
(32) |
Aug
(61) |
Sep
(37) |
Oct
(25) |
Nov
(94) |
Dec
(81) |
2023 |
Jan
(113) |
Feb
(77) |
Mar
(98) |
Apr
(43) |
May
(48) |
Jun
(28) |
Jul
(72) |
Aug
(40) |
Sep
(44) |
Oct
(61) |
Nov
(70) |
Dec
(94) |
2024 |
Jan
(101) |
Feb
(21) |
Mar
(66) |
Apr
(88) |
May
(55) |
Jun
(109) |
Jul
(57) |
Aug
(103) |
Sep
(46) |
Oct
|
Nov
|
Dec
|
From: Robert D. <rob...@us...> - 2024-09-24 03:40:28
|
FWIW `freeof(x)` is an acceptable predicate for `matchdeclare`, and the expression to be tested is pasted on and then the whole thing is evaluated. For that matter, `matchdeclare` recognizes predicates such as `">"(5)` and `equal(1000)`. Pretty sure that was already present when I started working on the pattern matching code 15 or 20 years ago. But `matchdeclare` quotes its arguments, so it doesn't necessarily have much to do how `freeof` should act in evaluation. --- **[bugs:#4362] freeof() and freeof(x) don't give errors** **Status:** open **Group:** None **Labels:** freeof **Created:** Tue Sep 03, 2024 02:18 PM UTC by Stavros Macrakis **Last Updated:** Tue Sep 03, 2024 02:27 PM UTC **Owner:** nobody ~~~ freeof() => true freeof(expr) => true << for all x ~~~ The last argument of freeof is supposed to be the expression being checked. There is no expression in ``freeof()``, so I think that is unambiguously an error. In the case of ``freeof(expr)``, you could argue that there is a list of zero variables, and therefore ``expr`` is free of all of them. This is arguably useful programmatically or in macros in the form ``apply('freeof,append(varlist,expr))`` but I'd suggest that if that's a useful case (I have serious doubts) we offer it explicitly as ``freeoflist(expr,varlist)``. I suspect that the vast majority of cases of ``freeof(expr)`` are bugs/typos and should give an error. (Can you tell that I had exactly such a typo in my code...?) --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: Robert D. <rob...@us...> - 2024-09-24 03:11:42
|
Looks to me like the bug is in `ev` -- `ev` is not calling MSET to handle assignment to nonatomic left-hand side. Tracing MSET seems to show MSET isn't called even for mapatoms, e.g. `ev(f(x[1]), x[1] = 111`. But it looks like fortuitously the result is correct in that case; I didn't investigate. I'm inclined to think `ev` should always call MSET. --- **[bugs:#4377] makelist(a+b, [a,b] ,...) doesn't give useful result or error** **Status:** open **Group:** None **Labels:** makelist parallel assignment **Created:** Fri Sep 20, 2024 09:24 PM UTC by Stavros Macrakis **Last Updated:** Fri Sep 20, 2024 09:24 PM UTC **Owner:** nobody ~~~ makelist(a+b, [a,b] , [[1,2],[3,4]] ) => [[a,b],[a,b]] ~~~ If it's not going to do the "right thing", shouldn't it complain that it can't bind [a,b]? --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: Stavros M. <mac...@us...> - 2024-09-20 21:38:18
|
- **summary**: ev(a+b,[a,b]:[2,3] doesn't bind a and b or give an error --> ev(a+b,[a,b]:[2,3]) doesn't bind a and b or give an error --- **[bugs:#4376] ev(a+b,[a,b]:[2,3]) doesn't bind a and b or give an error** **Status:** open **Group:** None **Created:** Fri Sep 20, 2024 09:20 PM UTC by Stavros Macrakis **Last Updated:** Fri Sep 20, 2024 09:27 PM UTC **Owner:** nobody ~~~ ev(a+b,[a,b]:[2,3]) => a+b ev(a+b,[a,b]=[2,3]) => a+b a+b,[a,b]:[2,3] => a+b <<< the command-line short form a+b,[a,b]=[2,3] => a+b ~~~ I think a reasonable user would expect the parallel bindings in ``ev`` to function just like parallel assignment (even though that's not promised in the manual). At the very least, this should cause an error. This shouldn't be that hard to implement, since after all, ``ev`` bindings are already parallel, not sequential: ~~~ [a,b],b=a,a=b => [b,a] ~~~ I came across this case because I happened to have some parameter values in list form. --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: Stavros M. <mac...@us...> - 2024-09-20 21:27:29
|
- **summary**: ev(a+b,[a,b]:[2,3] doesn't bind a and b --> ev(a+b,[a,b]:[2,3] doesn't bind a and b or give an error - Description has changed: Diff: ~~~~ --- old +++ new @@ -5,6 +5,7 @@ a+b,[a,b]=[2,3] => a+b ~~~ I think a reasonable user would expect the parallel bindings in ``ev`` to function just like parallel assignment (even though that's not promised in the manual). +At the very least, this should cause an error. This shouldn't be that hard to implement, since after all, ``ev`` bindings are already parallel, not sequential: ~~~ [a,b],b=a,a=b => [b,a] ~~~~ --- **[bugs:#4376] ev(a+b,[a,b]:[2,3] doesn't bind a and b or give an error** **Status:** open **Group:** None **Created:** Fri Sep 20, 2024 09:20 PM UTC by Stavros Macrakis **Last Updated:** Fri Sep 20, 2024 09:20 PM UTC **Owner:** nobody ~~~ ev(a+b,[a,b]:[2,3]) => a+b ev(a+b,[a,b]=[2,3]) => a+b a+b,[a,b]:[2,3] => a+b <<< the command-line short form a+b,[a,b]=[2,3] => a+b ~~~ I think a reasonable user would expect the parallel bindings in ``ev`` to function just like parallel assignment (even though that's not promised in the manual). At the very least, this should cause an error. This shouldn't be that hard to implement, since after all, ``ev`` bindings are already parallel, not sequential: ~~~ [a,b],b=a,a=b => [b,a] ~~~ I came across this case because I happened to have some parameter values in list form. --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: Stavros M. <mac...@us...> - 2024-09-20 21:24:59
|
--- **[bugs:#4377] makelist(a+b, [a,b] ,...) doesn't give useful result or error** **Status:** open **Group:** None **Labels:** makelist parallel assignment **Created:** Fri Sep 20, 2024 09:24 PM UTC by Stavros Macrakis **Last Updated:** Fri Sep 20, 2024 09:24 PM UTC **Owner:** nobody ~~~ makelist(a+b, [a,b] , [[1,2],[3,4]] ) => [[a,b],[a,b]] ~~~ If it's not going to do the "right thing", shouldn't it complain that it can't bind [a,b]? --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: Stavros M. <mac...@us...> - 2024-09-20 21:20:24
|
--- **[bugs:#4376] ev(a+b,[a,b]:[2,3] doesn't bind a and b** **Status:** open **Group:** None **Created:** Fri Sep 20, 2024 09:20 PM UTC by Stavros Macrakis **Last Updated:** Fri Sep 20, 2024 09:20 PM UTC **Owner:** nobody ~~~ ev(a+b,[a,b]:[2,3]) => a+b ev(a+b,[a,b]=[2,3]) => a+b a+b,[a,b]:[2,3] => a+b <<< the command-line short form a+b,[a,b]=[2,3] => a+b ~~~ I think a reasonable user would expect the parallel bindings in ``ev`` to function just like parallel assignment (even though that's not promised in the manual). This shouldn't be that hard to implement, since after all, ``ev`` bindings are already parallel, not sequential: ~~~ [a,b],b=a,a=b => [b,a] ~~~ I came across this case because I happened to have some parameter values in list form. --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: Stavros M. <mac...@us...> - 2024-09-20 01:48:21
|
Not subtle. RTFM: https://maxima.sourceforge.io/docs/manual/maxima_singlepage.html#memoizing-function Sometimes the difference is dramatic (obviously an extreme example <https://en.wikipedia.org/wiki/Ackermann_function>): showtime:true$ ack(m,n):=if m=0 then n+1 elseif n=0 then ack(m-1,1) else ack(m-1,ack(m,n-1)); for i thru 7 do print(i,ack(3,i)); 1 13 2 29 3 61 4 125 5 253 6 509 7 1021 Evaluation took 4.1790 seconds (4.2372 elapsed) using 576.869 MB. mack[m,n]:=if m=0 then n+1 elseif n=0 then mack[m-1,1] else mack[m-1,mack[m,n-1]]; for i thru 7 do print(i,mack[3,i]); 1 13 2 29 3 61 4 125 5 253 6 509 7 1021 Evaluation took 0.0145 seconds (0.0147 elapsed) using 2.037 MB. for i thru 7 do print(i,mack[3,i]); 1 13 2 29 3 61 4 125 5 253 6 509 7 1021 Evaluation took 0.0004 seconds (0.0004 elapsed) using 0 bytes. On Thu, Sep 19, 2024 at 7:16 PM dan hayes <zm...@us...> wrote: > yea that seemed to work correct. Never knew about that subtly difference > between using a function call with argument in just paren's, (arg) vs in > brackets [arg]. So now when and why would one ever want to use the form > in brackets, [arg] rather than (arg) ? Maybe just internal efficiency and > time ? Which one , every thing else being equal , requires more stack space > memory , total memory etc.? > --- **[bugs:#4375] using a function call in a call loop** **Status:** not-a-bug **Group:** None **Created:** Tue Sep 17, 2024 06:49 AM UTC by dan hayes **Last Updated:** Thu Sep 19, 2024 11:31 PM UTC **Owner:** nobody build_info(version="branch_5_44_base_231_g5c411f69f",timestamp="2021-01-12 23:51:42",host="x86_64-w64-mingw32",lisp_name="SBCL",lisp_version="2.0.0" The basic function works by itself correct but when put it in a loop it only works on the first call but not right again after that. Think it may have somethng to do with the need for copylist as that quirk in maxima which is not needed in any other compilers that i know of such as fortran .... Anyway so that means it is essentially impossible to use a list as a part of the function in that case as u would have to do multiple multiple copysists getting backed up to no end and/or use a new name every time etc.which would then make the reason for using a function in the first place useless. So i guess there is no way around this. So i guess in that case this would be a feature request to get rid of that quirk in maxima and make it like one would expect or at least have both options available. I also assume one could not use a push and pop type of deal as in fortran or have to use all local variables in the function ? If anyone knows a reasonable way to get around this please post. I am using the code option to paste the program though i don't know if it will make it any clearer since it did not work on prior bug reports. I have most or all of the disp(....) remmed out . I first used them for trouble shooting but now i think the reason is that need for copylist etc. I even tried using kill(lis,ilis) after every loop call but even that did not work because i guess it got rid of or changed the basic functions. A few days prior i read something about memonizing functions in maxima help but it seems to have disappeared now. ~~~ (kill(lis,ip,jp,n,nc,ilis,blk,out),out[j]:=block(/*disp(["out lis prior",lis]),*/ lis:endcons(ip,lis)/*,disp(["out lis aft",lis])*/,if j>1 then blk[j-1]),blk[i]:=block(/*disp(["blk lis prior",lis]),*/ ilis[i]:ilis[i]+1,ip:product(x[d+1-j]^ilis[i],j,1,i),jp:sum(ilis[j],j,1,i),if jp<nc then(for j:i thru d-2 do ilis[j+1]:0,ip:ip*x[1]^(nc-jp),out[d] /*,disp(["blk ipv<.. lis aft",lis])*/) else(/*disp(["blk else lis aft",lis]),*/out[i])),n:4,d:3,lis:[1],ilis:makelist(0,d-1),ip:1,for nc thru n do( lis:endcons(x[1]^nc,lis),ip:1,ilis:makelist(0,d-1),blk[d-1],disp(["nc",nc,lis,"len",length(lis),length(setify(lis)),binomial(nc+d,nc)]))); ~~~ NOw for less clutter here is the basic function by itse;f without being called in a loop. So it does work doing it only once ~~~ (kill(lis,ip,jp,n,nc,ilis,blk,out),out[j]:=block(lis:endcons(ip,lis),if j>1 then blk[j-1]),blk[i]:=block(ilis[i]:ilis[i]+1, ip:product(x[d+1-j]^ilis[j],j,1,i),jp:sum(ilis[j],j,1,i),if jp<nc then(for j:i thru d-2 do ilis[j+1]:0,ip:ip*x[1]^(nc-jp),out[d]) else out [i]), nc:4,d:5,lis:[x[1]^nc],ilis:makelist(0,d-1),ip:1,blk[d-1], disp(["nc",nc/*,lis*/,"len",length(lis),length(setify(lis)),binomial(nc+d-1,nc)]))~~~ --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: Stavros M. <mac...@us...> - 2024-09-19 23:31:17
|
- **status**: open --> not-a-bug --- **[bugs:#4375] using a function call in a call loop** **Status:** not-a-bug **Group:** None **Created:** Tue Sep 17, 2024 06:49 AM UTC by dan hayes **Last Updated:** Thu Sep 19, 2024 11:16 PM UTC **Owner:** nobody build_info(version="branch_5_44_base_231_g5c411f69f",timestamp="2021-01-12 23:51:42",host="x86_64-w64-mingw32",lisp_name="SBCL",lisp_version="2.0.0" The basic function works by itself correct but when put it in a loop it only works on the first call but not right again after that. Think it may have somethng to do with the need for copylist as that quirk in maxima which is not needed in any other compilers that i know of such as fortran .... Anyway so that means it is essentially impossible to use a list as a part of the function in that case as u would have to do multiple multiple copysists getting backed up to no end and/or use a new name every time etc.which would then make the reason for using a function in the first place useless. So i guess there is no way around this. So i guess in that case this would be a feature request to get rid of that quirk in maxima and make it like one would expect or at least have both options available. I also assume one could not use a push and pop type of deal as in fortran or have to use all local variables in the function ? If anyone knows a reasonable way to get around this please post. I am using the code option to paste the program though i don't know if it will make it any clearer since it did not work on prior bug reports. I have most or all of the disp(....) remmed out . I first used them for trouble shooting but now i think the reason is that need for copylist etc. I even tried using kill(lis,ilis) after every loop call but even that did not work because i guess it got rid of or changed the basic functions. A few days prior i read something about memonizing functions in maxima help but it seems to have disappeared now. ~~~ (kill(lis,ip,jp,n,nc,ilis,blk,out),out[j]:=block(/*disp(["out lis prior",lis]),*/ lis:endcons(ip,lis)/*,disp(["out lis aft",lis])*/,if j>1 then blk[j-1]),blk[i]:=block(/*disp(["blk lis prior",lis]),*/ ilis[i]:ilis[i]+1,ip:product(x[d+1-j]^ilis[i],j,1,i),jp:sum(ilis[j],j,1,i),if jp<nc then(for j:i thru d-2 do ilis[j+1]:0,ip:ip*x[1]^(nc-jp),out[d] /*,disp(["blk ipv<.. lis aft",lis])*/) else(/*disp(["blk else lis aft",lis]),*/out[i])),n:4,d:3,lis:[1],ilis:makelist(0,d-1),ip:1,for nc thru n do( lis:endcons(x[1]^nc,lis),ip:1,ilis:makelist(0,d-1),blk[d-1],disp(["nc",nc,lis,"len",length(lis),length(setify(lis)),binomial(nc+d,nc)]))); ~~~ NOw for less clutter here is the basic function by itse;f without being called in a loop. So it does work doing it only once ~~~ (kill(lis,ip,jp,n,nc,ilis,blk,out),out[j]:=block(lis:endcons(ip,lis),if j>1 then blk[j-1]),blk[i]:=block(ilis[i]:ilis[i]+1, ip:product(x[d+1-j]^ilis[j],j,1,i),jp:sum(ilis[j],j,1,i),if jp<nc then(for j:i thru d-2 do ilis[j+1]:0,ip:ip*x[1]^(nc-jp),out[d]) else out [i]), nc:4,d:5,lis:[x[1]^nc],ilis:makelist(0,d-1),ip:1,blk[d-1], disp(["nc",nc/*,lis*/,"len",length(lis),length(setify(lis)),binomial(nc+d-1,nc)]))~~~ --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: dan h. <zm...@us...> - 2024-09-19 23:16:43
|
yea that seemed to work correct. Never knew about that subtly difference between using a function call with argument in just paren's, (arg) vs in brackets [arg]. So now when and why would one ever want to use the form in brackets, [arg] rather than (arg) ? Maybe just internal efficiency and time ? Which one , every thing else being equal , requires more stack space memory , total memory etc.? --- **[bugs:#4375] using a function call in a call loop** **Status:** open **Group:** None **Created:** Tue Sep 17, 2024 06:49 AM UTC by dan hayes **Last Updated:** Tue Sep 17, 2024 02:51 PM UTC **Owner:** nobody build_info(version="branch_5_44_base_231_g5c411f69f",timestamp="2021-01-12 23:51:42",host="x86_64-w64-mingw32",lisp_name="SBCL",lisp_version="2.0.0" The basic function works by itself correct but when put it in a loop it only works on the first call but not right again after that. Think it may have somethng to do with the need for copylist as that quirk in maxima which is not needed in any other compilers that i know of such as fortran .... Anyway so that means it is essentially impossible to use a list as a part of the function in that case as u would have to do multiple multiple copysists getting backed up to no end and/or use a new name every time etc.which would then make the reason for using a function in the first place useless. So i guess there is no way around this. So i guess in that case this would be a feature request to get rid of that quirk in maxima and make it like one would expect or at least have both options available. I also assume one could not use a push and pop type of deal as in fortran or have to use all local variables in the function ? If anyone knows a reasonable way to get around this please post. I am using the code option to paste the program though i don't know if it will make it any clearer since it did not work on prior bug reports. I have most or all of the disp(....) remmed out . I first used them for trouble shooting but now i think the reason is that need for copylist etc. I even tried using kill(lis,ilis) after every loop call but even that did not work because i guess it got rid of or changed the basic functions. A few days prior i read something about memonizing functions in maxima help but it seems to have disappeared now. ~~~ (kill(lis,ip,jp,n,nc,ilis,blk,out),out[j]:=block(/*disp(["out lis prior",lis]),*/ lis:endcons(ip,lis)/*,disp(["out lis aft",lis])*/,if j>1 then blk[j-1]),blk[i]:=block(/*disp(["blk lis prior",lis]),*/ ilis[i]:ilis[i]+1,ip:product(x[d+1-j]^ilis[i],j,1,i),jp:sum(ilis[j],j,1,i),if jp<nc then(for j:i thru d-2 do ilis[j+1]:0,ip:ip*x[1]^(nc-jp),out[d] /*,disp(["blk ipv<.. lis aft",lis])*/) else(/*disp(["blk else lis aft",lis]),*/out[i])),n:4,d:3,lis:[1],ilis:makelist(0,d-1),ip:1,for nc thru n do( lis:endcons(x[1]^nc,lis),ip:1,ilis:makelist(0,d-1),blk[d-1],disp(["nc",nc,lis,"len",length(lis),length(setify(lis)),binomial(nc+d,nc)]))); ~~~ NOw for less clutter here is the basic function by itse;f without being called in a loop. So it does work doing it only once ~~~ (kill(lis,ip,jp,n,nc,ilis,blk,out),out[j]:=block(lis:endcons(ip,lis),if j>1 then blk[j-1]),blk[i]:=block(ilis[i]:ilis[i]+1, ip:product(x[d+1-j]^ilis[j],j,1,i),jp:sum(ilis[j],j,1,i),if jp<nc then(for j:i thru d-2 do ilis[j+1]:0,ip:ip*x[1]^(nc-jp),out[d]) else out [i]), nc:4,d:5,lis:[x[1]^nc],ilis:makelist(0,d-1),ip:1,blk[d-1], disp(["nc",nc/*,lis*/,"len",length(lis),length(setify(lis)),binomial(nc+d-1,nc)]))~~~ --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: Barton W. <wil...@us...> - 2024-09-18 11:16:49
|
- **status**: open --> closed - **Comment**: Fixed by [4bf14b] . Closing this ticket as fixed. --- **[bugs:#4373] conjugate doesn't know li[n](x) is complex in general** **Status:** closed **Group:** None **Labels:** conjugate li polylogarithm **Created:** Thu Sep 12, 2024 01:52 PM UTC by Robert Dodier **Last Updated:** Mon Sep 16, 2024 12:34 PM UTC **Owner:** nobody Working w/ version 4afc4ab (post-5.47). `conjugate(li[n](x))` simplifies to `li[n](x)` even though `li[n](x)` can be complex. Follow-on work for #4368. Thanks to Dan Gildea for pointing it out. --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: dan h. <zm...@us...> - 2024-09-17 14:51:37
|
ok thanks for the tip. I will try to see if can use ordinary function but i did not think every thing needed was all global but i will try as may be able to modify it if need so so everything it needs is all global which was my intent in the first place as f try to avoid recursive functions if possible though i have used them prior with success. --- **[bugs:#4375] using a function call in a call loop** **Status:** open **Group:** None **Created:** Tue Sep 17, 2024 06:49 AM UTC by dan hayes **Last Updated:** Tue Sep 17, 2024 02:20 PM UTC **Owner:** nobody build_info(version="branch_5_44_base_231_g5c411f69f",timestamp="2021-01-12 23:51:42",host="x86_64-w64-mingw32",lisp_name="SBCL",lisp_version="2.0.0" The basic function works by itself correct but when put it in a loop it only works on the first call but not right again after that. Think it may have somethng to do with the need for copylist as that quirk in maxima which is not needed in any other compilers that i know of such as fortran .... Anyway so that means it is essentially impossible to use a list as a part of the function in that case as u would have to do multiple multiple copysists getting backed up to no end and/or use a new name every time etc.which would then make the reason for using a function in the first place useless. So i guess there is no way around this. So i guess in that case this would be a feature request to get rid of that quirk in maxima and make it like one would expect or at least have both options available. I also assume one could not use a push and pop type of deal as in fortran or have to use all local variables in the function ? If anyone knows a reasonable way to get around this please post. I am using the code option to paste the program though i don't know if it will make it any clearer since it did not work on prior bug reports. I have most or all of the disp(....) remmed out . I first used them for trouble shooting but now i think the reason is that need for copylist etc. I even tried using kill(lis,ilis) after every loop call but even that did not work because i guess it got rid of or changed the basic functions. A few days prior i read something about memonizing functions in maxima help but it seems to have disappeared now. ~~~ (kill(lis,ip,jp,n,nc,ilis,blk,out),out[j]:=block(/*disp(["out lis prior",lis]),*/ lis:endcons(ip,lis)/*,disp(["out lis aft",lis])*/,if j>1 then blk[j-1]),blk[i]:=block(/*disp(["blk lis prior",lis]),*/ ilis[i]:ilis[i]+1,ip:product(x[d+1-j]^ilis[i],j,1,i),jp:sum(ilis[j],j,1,i),if jp<nc then(for j:i thru d-2 do ilis[j+1]:0,ip:ip*x[1]^(nc-jp),out[d] /*,disp(["blk ipv<.. lis aft",lis])*/) else(/*disp(["blk else lis aft",lis]),*/out[i])),n:4,d:3,lis:[1],ilis:makelist(0,d-1),ip:1,for nc thru n do( lis:endcons(x[1]^nc,lis),ip:1,ilis:makelist(0,d-1),blk[d-1],disp(["nc",nc,lis,"len",length(lis),length(setify(lis)),binomial(nc+d,nc)]))); ~~~ NOw for less clutter here is the basic function by itse;f without being called in a loop. So it does work doing it only once ~~~ (kill(lis,ip,jp,n,nc,ilis,blk,out),out[j]:=block(lis:endcons(ip,lis),if j>1 then blk[j-1]),blk[i]:=block(ilis[i]:ilis[i]+1, ip:product(x[d+1-j]^ilis[j],j,1,i),jp:sum(ilis[j],j,1,i),if jp<nc then(for j:i thru d-2 do ilis[j+1]:0,ip:ip*x[1]^(nc-jp),out[d]) else out [i]), nc:4,d:5,lis:[x[1]^nc],ilis:makelist(0,d-1),ip:1,blk[d-1], disp(["nc",nc/*,lis*/,"len",length(lis),length(setify(lis)),binomial(nc+d-1,nc)]))~~~ --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: Leo B. <l_b...@us...> - 2024-09-17 14:20:53
|
It would be really helpful for us if you formatted your code so that it is more readable (thank you for putting it in a code block) and told us what the code is expected to produce. Your first code block, fed through Maxima's `grind` function (I copy-pasted your code, then did `grind(%i1)` to get this output): ~~~~ (kill(lis,ip,jp,n,nc,ilis,blk,out), out[j]:=block(lis:endcons(ip,lis),if j > 1 then blk[j-1]), blk[i]:=block(ilis[i]:ilis[i]+1,ip:product(x[d+1-j]^ilis[i],j,1,i), jp:sum(ilis[j],j,1,i), if jp < nc then (for j from i thru d-2 do ilis[j+1]:0,ip:ip*x[1]^(nc-jp),out[d]) else out[i]),n:4,d:3,lis:[1],ilis:makelist(0,d-1),ip:1, for nc thru n do (lis:endcons(x[1]^nc,lis),ip:1,ilis:makelist(0,d-1),blk[d-1], disp(["nc",nc,lis,"len",length(lis),length(setify(lis)), binomial(nc+d,nc)])))$ ~~~~ I suspect that you really want to define ordinary functions `out(j)`, etc., not memoizing ones, since your functions depend on the value(s) of globally scoped variables. E.g., contrast the two functions: ~~~ f(i) := j+i; F[i] := j+i; ~~~ The second is memoizing, so the first call with `i=2` determines all subsequent calls; not so for the first. ~~~ j:1; f(2); F[2]; j:4; f(2); F[2]; ~~~ --- **[bugs:#4375] using a function call in a call loop** **Status:** open **Group:** None **Created:** Tue Sep 17, 2024 06:49 AM UTC by dan hayes **Last Updated:** Tue Sep 17, 2024 07:55 AM UTC **Owner:** nobody build_info(version="branch_5_44_base_231_g5c411f69f",timestamp="2021-01-12 23:51:42",host="x86_64-w64-mingw32",lisp_name="SBCL",lisp_version="2.0.0" The basic function works by itself correct but when put it in a loop it only works on the first call but not right again after that. Think it may have somethng to do with the need for copylist as that quirk in maxima which is not needed in any other compilers that i know of such as fortran .... Anyway so that means it is essentially impossible to use a list as a part of the function in that case as u would have to do multiple multiple copysists getting backed up to no end and/or use a new name every time etc.which would then make the reason for using a function in the first place useless. So i guess there is no way around this. So i guess in that case this would be a feature request to get rid of that quirk in maxima and make it like one would expect or at least have both options available. I also assume one could not use a push and pop type of deal as in fortran or have to use all local variables in the function ? If anyone knows a reasonable way to get around this please post. I am using the code option to paste the program though i don't know if it will make it any clearer since it did not work on prior bug reports. I have most or all of the disp(....) remmed out . I first used them for trouble shooting but now i think the reason is that need for copylist etc. I even tried using kill(lis,ilis) after every loop call but even that did not work because i guess it got rid of or changed the basic functions. A few days prior i read something about memonizing functions in maxima help but it seems to have disappeared now. ~~~ (kill(lis,ip,jp,n,nc,ilis,blk,out),out[j]:=block(/*disp(["out lis prior",lis]),*/ lis:endcons(ip,lis)/*,disp(["out lis aft",lis])*/,if j>1 then blk[j-1]),blk[i]:=block(/*disp(["blk lis prior",lis]),*/ ilis[i]:ilis[i]+1,ip:product(x[d+1-j]^ilis[i],j,1,i),jp:sum(ilis[j],j,1,i),if jp<nc then(for j:i thru d-2 do ilis[j+1]:0,ip:ip*x[1]^(nc-jp),out[d] /*,disp(["blk ipv<.. lis aft",lis])*/) else(/*disp(["blk else lis aft",lis]),*/out[i])),n:4,d:3,lis:[1],ilis:makelist(0,d-1),ip:1,for nc thru n do( lis:endcons(x[1]^nc,lis),ip:1,ilis:makelist(0,d-1),blk[d-1],disp(["nc",nc,lis,"len",length(lis),length(setify(lis)),binomial(nc+d,nc)]))); ~~~ NOw for less clutter here is the basic function by itse;f without being called in a loop. So it does work doing it only once ~~~ (kill(lis,ip,jp,n,nc,ilis,blk,out),out[j]:=block(lis:endcons(ip,lis),if j>1 then blk[j-1]),blk[i]:=block(ilis[i]:ilis[i]+1, ip:product(x[d+1-j]^ilis[j],j,1,i),jp:sum(ilis[j],j,1,i),if jp<nc then(for j:i thru d-2 do ilis[j+1]:0,ip:ip*x[1]^(nc-jp),out[d]) else out [i]), nc:4,d:5,lis:[x[1]^nc],ilis:makelist(0,d-1),ip:1,blk[d-1], disp(["nc",nc/*,lis*/,"len",length(lis),length(setify(lis)),binomial(nc+d-1,nc)]))~~~ --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: dan h. <zm...@us...> - 2024-09-17 07:55:48
|
or it could be that maxima does not always do things in the exact order in sequence as written. I think i have noticed that in the past esp when there is a disp(...) in the code. OK i now see i mispelled the word memoizing and from what i read just now in the internet it may be that shortcuts may be taken with memoizing functions in the way they are stored and retrieved or cached so things don't happen in the way one may expect. Perhaps i should have tried using an array or matrix instead if possible. --- **[bugs:#4375] using a function call in a call loop** **Status:** open **Group:** None **Created:** Tue Sep 17, 2024 06:49 AM UTC by dan hayes **Last Updated:** Tue Sep 17, 2024 06:49 AM UTC **Owner:** nobody build_info(version="branch_5_44_base_231_g5c411f69f",timestamp="2021-01-12 23:51:42",host="x86_64-w64-mingw32",lisp_name="SBCL",lisp_version="2.0.0" The basic function works by itself correct but when put it in a loop it only works on the first call but not right again after that. Think it may have somethng to do with the need for copylist as that quirk in maxima which is not needed in any other compilers that i know of such as fortran .... Anyway so that means it is essentially impossible to use a list as a part of the function in that case as u would have to do multiple multiple copysists getting backed up to no end and/or use a new name every time etc.which would then make the reason for using a function in the first place useless. So i guess there is no way around this. So i guess in that case this would be a feature request to get rid of that quirk in maxima and make it like one would expect or at least have both options available. I also assume one could not use a push and pop type of deal as in fortran or have to use all local variables in the function ? If anyone knows a reasonable way to get around this please post. I am using the code option to paste the program though i don't know if it will make it any clearer since it did not work on prior bug reports. I have most or all of the disp(....) remmed out . I first used them for trouble shooting but now i think the reason is that need for copylist etc. I even tried using kill(lis,ilis) after every loop call but even that did not work because i guess it got rid of or changed the basic functions. A few days prior i read something about memonizing functions in maxima help but it seems to have disappeared now. ~~~ (kill(lis,ip,jp,n,nc,ilis,blk,out),out[j]:=block(/*disp(["out lis prior",lis]),*/ lis:endcons(ip,lis)/*,disp(["out lis aft",lis])*/,if j>1 then blk[j-1]),blk[i]:=block(/*disp(["blk lis prior",lis]),*/ ilis[i]:ilis[i]+1,ip:product(x[d+1-j]^ilis[i],j,1,i),jp:sum(ilis[j],j,1,i),if jp<nc then(for j:i thru d-2 do ilis[j+1]:0,ip:ip*x[1]^(nc-jp),out[d] /*,disp(["blk ipv<.. lis aft",lis])*/) else(/*disp(["blk else lis aft",lis]),*/out[i])),n:4,d:3,lis:[1],ilis:makelist(0,d-1),ip:1,for nc thru n do( lis:endcons(x[1]^nc,lis),ip:1,ilis:makelist(0,d-1),blk[d-1],disp(["nc",nc,lis,"len",length(lis),length(setify(lis)),binomial(nc+d,nc)]))); ~~~ NOw for less clutter here is the basic function by itse;f without being called in a loop. So it does work doing it only once ~~~ (kill(lis,ip,jp,n,nc,ilis,blk,out),out[j]:=block(lis:endcons(ip,lis),if j>1 then blk[j-1]),blk[i]:=block(ilis[i]:ilis[i]+1, ip:product(x[d+1-j]^ilis[j],j,1,i),jp:sum(ilis[j],j,1,i),if jp<nc then(for j:i thru d-2 do ilis[j+1]:0,ip:ip*x[1]^(nc-jp),out[d]) else out [i]), nc:4,d:5,lis:[x[1]^nc],ilis:makelist(0,d-1),ip:1,blk[d-1], disp(["nc",nc/*,lis*/,"len",length(lis),length(setify(lis)),binomial(nc+d-1,nc)]))~~~ --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: dan h. <zm...@us...> - 2024-09-17 06:49:13
|
--- **[bugs:#4375] using a function call in a call loop** **Status:** open **Group:** None **Created:** Tue Sep 17, 2024 06:49 AM UTC by dan hayes **Last Updated:** Tue Sep 17, 2024 06:49 AM UTC **Owner:** nobody build_info(version="branch_5_44_base_231_g5c411f69f",timestamp="2021-01-12 23:51:42",host="x86_64-w64-mingw32",lisp_name="SBCL",lisp_version="2.0.0" The basic function works by itself correct but when put it in a loop it only works on the first call but not right again after that. Think it may have somethng to do with the need for copylist as that quirk in maxima which is not needed in any other compilers that i know of such as fortran .... Anyway so that means it is essentially impossible to use a list as a part of the function in that case as u would have to do multiple multiple copysists getting backed up to no end and/or use a new name every time etc.which would then make the reason for using a function in the first place useless. So i guess there is no way around this. So i guess in that case this would be a feature request to get rid of that quirk in maxima and make it like one would expect or at least have both options available. I also assume one could not use a push and pop type of deal as in fortran or have to use all local variables in the function ? If anyone knows a reasonable way to get around this please post. I am using the code option to paste the program though i don't know if it will make it any clearer since it did not work on prior bug reports. I have most or all of the disp(....) remmed out . I first used them for trouble shooting but now i think the reason is that need for copylist etc. I even tried using kill(lis,ilis) after every loop call but even that did not work because i guess it got rid of or changed the basic functions. A few days prior i read something about memonizing functions in maxima help but it seems to have disappeared now. ~~~ (kill(lis,ip,jp,n,nc,ilis,blk,out),out[j]:=block(/*disp(["out lis prior",lis]),*/ lis:endcons(ip,lis)/*,disp(["out lis aft",lis])*/,if j>1 then blk[j-1]),blk[i]:=block(/*disp(["blk lis prior",lis]),*/ ilis[i]:ilis[i]+1,ip:product(x[d+1-j]^ilis[i],j,1,i),jp:sum(ilis[j],j,1,i),if jp<nc then(for j:i thru d-2 do ilis[j+1]:0,ip:ip*x[1]^(nc-jp),out[d] /*,disp(["blk ipv<.. lis aft",lis])*/) else(/*disp(["blk else lis aft",lis]),*/out[i])),n:4,d:3,lis:[1],ilis:makelist(0,d-1),ip:1,for nc thru n do( lis:endcons(x[1]^nc,lis),ip:1,ilis:makelist(0,d-1),blk[d-1],disp(["nc",nc,lis,"len",length(lis),length(setify(lis)),binomial(nc+d,nc)]))); ~~~ NOw for less clutter here is the basic function by itse;f without being called in a loop. So it does work doing it only once ~~~ (kill(lis,ip,jp,n,nc,ilis,blk,out),out[j]:=block(lis:endcons(ip,lis),if j>1 then blk[j-1]),blk[i]:=block(ilis[i]:ilis[i]+1, ip:product(x[d+1-j]^ilis[j],j,1,i),jp:sum(ilis[j],j,1,i),if jp<nc then(for j:i thru d-2 do ilis[j+1]:0,ip:ip*x[1]^(nc-jp),out[d]) else out [i]), nc:4,d:5,lis:[x[1]^nc],ilis:makelist(0,d-1),ip:1,blk[d-1], disp(["nc",nc/*,lis*/,"len",length(lis),length(setify(lis)),binomial(nc+d-1,nc)]))~~~ --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: Stavros M. <mac...@us...> - 2024-09-16 22:12:53
|
--- **[bugs:#4374] atan2(0,-abs(x)) not consistent with atan2(0,abs(x))** **Status:** open **Group:** None **Labels:** atan2 **Created:** Mon Sep 16, 2024 10:12 PM UTC by Stavros Macrakis **Last Updated:** Mon Sep 16, 2024 10:12 PM UTC **Owner:** nobody ~~~ atan2(0,abs(x)) => 0 atan2(0,-abs(x)) => atan2(0,-abs(x)) atan2(0,0) => error ~~~ Why does the first case not return the noun form? --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: Barton W. <wil...@us...> - 2024-09-16 12:34:54
|
Here is a fix to the nounform part of the above mentioned code: ~~~ ;; For z ∈ C \ [1,∞) and a positive integer n, we have ;; conjugate(li[n](z) = li[n](conjugate(z)). ;; For all other cases, return a conjugate nounform. (defun conjugate-li (z) (let ((n (first z)) (zz (risplit (second z)))) (if (and ($featurep n '$integer) (eq t (mgrp n 0)) ;; either the imagpart(z)≠ 0 or the realpart(z) < 1 (or (eq t (mnqp (cdr zz) 0)) (eq t (mgrp 1 (car zz))))) (subftake '$li (list n) (list (ftake '$conjugate (second z)))) ;; give up and return conjugate nounform (list (list '$conjugate 'simp) (subftake '$li (list n) (list (second z))))))) ~~~ --- **[bugs:#4373] conjugate doesn't know li[n](x) is complex in general** **Status:** open **Group:** None **Labels:** conjugate li polylogarithm **Created:** Thu Sep 12, 2024 01:52 PM UTC by Robert Dodier **Last Updated:** Sun Sep 15, 2024 07:44 PM UTC **Owner:** nobody Working w/ version 4afc4ab (post-5.47). `conjugate(li[n](x))` simplifies to `li[n](x)` even though `li[n](x)` can be complex. Follow-on work for #4368. Thanks to Dan Gildea for pointing it out. --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: Barton W. <wil...@us...> - 2024-09-15 19:44:47
|
I'll try to fix this bug this week. Something like the following might be better: ~~~ (defun conjugate-li (z) (let ((s (first z)) (zz (second z))) (setq zz (risplit zz)) (if (and ($featurep s '$integer) (or (eq t (mnqp (cdr zz) 0)) (eq t (mgrp 1 (car zz))))) (subftake '$li (list s) (list (ftake '$conjugate (second z)))) (list (list '$conjugate 'simp) (ftake 'mlist (subftake '$li (list s) (list (second z)))))))) ~~~ I'm not sure the `featurep` check is needed--need to think about that. --- **[bugs:#4373] conjugate doesn't know li[n](x) is complex in general** **Status:** open **Group:** None **Labels:** conjugate li polylogarithm **Created:** Thu Sep 12, 2024 01:52 PM UTC by Robert Dodier **Last Updated:** Thu Sep 12, 2024 01:52 PM UTC **Owner:** nobody Working w/ version 4afc4ab (post-5.47). `conjugate(li[n](x))` simplifies to `li[n](x)` even though `li[n](x)` can be complex. Follow-on work for #4368. Thanks to Dan Gildea for pointing it out. --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: Robert D. <rob...@us...> - 2024-09-13 23:05:06
|
- **status**: open --> closed --- **[bugs:#4368] incorrect limit(li[2](2*exp(x*%i)), x, 0, plus)** **Status:** closed **Group:** None **Labels:** limit dilogarithm li[2] **Created:** Sun Sep 08, 2024 09:57 PM UTC by Robert Dodier **Last Updated:** Thu Sep 12, 2024 01:53 PM UTC **Owner:** nobody Working with version 4afc4ab (post-5.47) + SBCL 2.3.7 on Linux. `limit(li[2](2*exp(x*%i)), x, 0, plus)` returns `-((4*%i*%pi*log(2)-%pi^2)/4)` but to judge by the result of evaluating `li[2](2*exp(x*%i))` near 0, it should be `((4*%i*%pi*log(2)+%pi^2)/4)` (i.e. other sign on imaginary part). This appears in `integrate(log(5 - 4 cos(x)), x, 0, %pi)` along with a problem having to do with incorrect atan2 --> atan substitution. After both bugs are fixed we should circle back and see if the integral evaluates to `2*%pi*log(2)` which is said to be the correct result. --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: Robert D. <rob...@us...> - 2024-09-12 13:53:43
|
Thanks, Dan. I opened #4373 to cover the conjugate bug. --- **[bugs:#4368] incorrect limit(li[2](2*exp(x*%i)), x, 0, plus)** **Status:** open **Group:** None **Labels:** limit dilogarithm li[2] **Created:** Sun Sep 08, 2024 09:57 PM UTC by Robert Dodier **Last Updated:** Thu Sep 12, 2024 09:53 AM UTC **Owner:** nobody Working with version 4afc4ab (post-5.47) + SBCL 2.3.7 on Linux. `limit(li[2](2*exp(x*%i)), x, 0, plus)` returns `-((4*%i*%pi*log(2)-%pi^2)/4)` but to judge by the result of evaluating `li[2](2*exp(x*%i))` near 0, it should be `((4*%i*%pi*log(2)+%pi^2)/4)` (i.e. other sign on imaginary part). This appears in `integrate(log(5 - 4 cos(x)), x, 0, %pi)` along with a problem having to do with incorrect atan2 --> atan substitution. After both bugs are fixed we should circle back and see if the integral evaluates to `2*%pi*log(2)` which is said to be the correct result. --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: Robert D. <rob...@us...> - 2024-09-12 13:52:50
|
--- **[bugs:#4373] conjugate doesn't know li[n](x) is complex in general** **Status:** open **Group:** None **Labels:** conjugate li polylogarithm **Created:** Thu Sep 12, 2024 01:52 PM UTC by Robert Dodier **Last Updated:** Thu Sep 12, 2024 01:52 PM UTC **Owner:** nobody Working w/ version 4afc4ab (post-5.47). `conjugate(li[n](x))` simplifies to `li[n](x)` even though `li[n](x)` can be complex. Follow-on work for #4368. Thanks to Dan Gildea for pointing it out. --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: Dan G. <dg...@us...> - 2024-09-12 09:53:55
|
fixed by [525b90fec12d0446698a2d75a7d084a664864686] but still does not work in general because maxima thinks conjugate(li[n](x)) => li[n](x) --- **[bugs:#4368] incorrect limit(li[2](2*exp(x*%i)), x, 0, plus)** **Status:** open **Group:** None **Labels:** limit dilogarithm li[2] **Created:** Sun Sep 08, 2024 09:57 PM UTC by Robert Dodier **Last Updated:** Sun Sep 08, 2024 10:06 PM UTC **Owner:** nobody Working with version 4afc4ab (post-5.47) + SBCL 2.3.7 on Linux. `limit(li[2](2*exp(x*%i)), x, 0, plus)` returns `-((4*%i*%pi*log(2)-%pi^2)/4)` but to judge by the result of evaluating `li[2](2*exp(x*%i))` near 0, it should be `((4*%i*%pi*log(2)+%pi^2)/4)` (i.e. other sign on imaginary part). This appears in `integrate(log(5 - 4 cos(x)), x, 0, %pi)` along with a problem having to do with incorrect atan2 --> atan substitution. After both bugs are fixed we should circle back and see if the integral evaluates to `2*%pi*log(2)` which is said to be the correct result. --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: Raymond T. <rt...@us...> - 2024-09-11 16:44:51
|
The link you provided for Mathematica has a definition in terms of log. I find it's notation a bit confusing as well. But https://functions.wolfram.com/ElementaryFunctions/ArcTan2/19/ has formulas for the real and imaginary parts. These are quite messy. I didn't check to see if these are equivalent to the log definition when using complex values. --- **[bugs:#4372] atan2 for complex arguments** **Status:** open **Group:** None **Labels:** atan2 **Created:** Tue Sep 10, 2024 06:54 PM UTC by Stavros Macrakis **Last Updated:** Wed Sep 11, 2024 03:10 PM UTC **Owner:** nobody Should `atan2` be defined for complex arguments? My favorite mathematical consultant, Claude, gives the definition as follows: > For complex arguments x + iy and u + iv, the definition of the quadrants for atan2(v, u) is as follows: > > Quadrant I (0 ≤ θ < π/2): If u > 0, then atan2(v, u) = arctan(v/u) > > Quadrant II (π/2 ≤ θ < π): If u < 0, then atan2(v, u) = arctan(v/u) + π > > Quadrant III (-π < θ ≤ -π/2): If u < 0 and v ≤ 0, then atan2(v, u) = arctan(v/u) - π > > Quadrant IV (-π/2 < θ ≤ 0): If u ≥ 0 and v < 0, then atan2(v, u) = arctan(v/u) > > Additionally, there are two special cases: > > If u = 0 and v > 0, then atan2(v, u) = π/2 > If u = 0 and v < 0, then atan2(v, u) = -π/2 > The key points are: > > The sign of u determines the quadrant (I or IV if u ≥ 0, II or III if u < 0). > The sign of v resolves the ambiguity between quadrants I/IV or II/III. > The arctan(v/u) function alone cannot distinguish between diametrically opposite quadrants (e.g., I and III, or II and IV). > This definition ensures that atan2 correctly handles the quadrant information for complex arguments, providing the principal value of the argument (angle) in the range (-π, π]. Mathematica [also defines it](https://functions.wolfram.com/PDF/ArcTan2.pdf). I haven't checked whether the two definitions are equivalent. --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: Stavros M. <mac...@us...> - 2024-09-11 15:10:03
|
OK, so that was bogus, because Claude was using x to mean both the complex number and its real part. Can we find an unambiguous definition somewhere? --- **[bugs:#4372] atan2 for complex arguments** **Status:** open **Group:** None **Labels:** atan2 **Created:** Tue Sep 10, 2024 06:54 PM UTC by Stavros Macrakis **Last Updated:** Tue Sep 10, 2024 06:54 PM UTC **Owner:** nobody Should `atan2` be defined for complex arguments? My favorite mathematical consultant, Claude, gives the definition as follows: > For complex arguments x + iy and u + iv, the definition of the quadrants for atan2(v, u) is as follows: > > Quadrant I (0 ≤ θ < π/2): If u > 0, then atan2(v, u) = arctan(v/u) > > Quadrant II (π/2 ≤ θ < π): If u < 0, then atan2(v, u) = arctan(v/u) + π > > Quadrant III (-π < θ ≤ -π/2): If u < 0 and v ≤ 0, then atan2(v, u) = arctan(v/u) - π > > Quadrant IV (-π/2 < θ ≤ 0): If u ≥ 0 and v < 0, then atan2(v, u) = arctan(v/u) > > Additionally, there are two special cases: > > If u = 0 and v > 0, then atan2(v, u) = π/2 > If u = 0 and v < 0, then atan2(v, u) = -π/2 > The key points are: > > The sign of u determines the quadrant (I or IV if u ≥ 0, II or III if u < 0). > The sign of v resolves the ambiguity between quadrants I/IV or II/III. > The arctan(v/u) function alone cannot distinguish between diametrically opposite quadrants (e.g., I and III, or II and IV). > This definition ensures that atan2 correctly handles the quadrant information for complex arguments, providing the principal value of the argument (angle) in the range (-π, π]. Mathematica [also defines it](https://functions.wolfram.com/PDF/ArcTan2.pdf). I haven't checked whether the two definitions are equivalent. --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: Raymond T. <rt...@us...> - 2024-09-11 01:43:17
|
Your version of maxima is too old. This was fixed a while ago. I get: ``` (%i31) rectform(atan2(x,%i)); Evaluation took 0.0100 seconds (0.0000 elapsed) using 302.539 KB. 2 2 atan2(x + 1, 0) - atan2(0, x - 1) abs(x + 1) (%o31) ──────────────────────────────────── - %i log(──────────────) 2 │ 2 │ sqrt(│x - 1│) ``` Didn't check to see if that's correct, though. --- **[bugs:#4371] rectform doesn't handle atan2 with complex arguments** **Status:** open **Group:** None **Labels:** atan2 rectform **Created:** Tue Sep 10, 2024 04:06 PM UTC by Stavros Macrakis **Last Updated:** Tue Sep 10, 2024 06:59 PM UTC **Owner:** nobody ~~~ rectform(atan2(x,%i)); LOGARC: unrecognized argument: atan2 ~~~ This should probably give a clean error, along the lines of "atan2 not defined for complex arguments". --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: Stavros M. <mac...@us...> - 2024-09-10 18:59:14
|
See also https://sourceforge.net/p/maxima/bugs/4372/, which asks what the right definition of `atan2` is for complex arguments. --- **[bugs:#4371] rectform doesn't handle atan2 with complex arguments** **Status:** open **Group:** None **Labels:** atan2 rectform **Created:** Tue Sep 10, 2024 04:06 PM UTC by Stavros Macrakis **Last Updated:** Tue Sep 10, 2024 04:06 PM UTC **Owner:** nobody ~~~ rectform(atan2(x,%i)); LOGARC: unrecognized argument: atan2 ~~~ This should probably give a clean error, along the lines of "atan2 not defined for complex arguments". --- Sent from sourceforge.net because max...@li... is subscribed to https://sourceforge.net/p/maxima/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/maxima/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |