acer

32747 Reputation

29 Badges

20 years, 112 days
Ontario, Canada

Social Networks and Content at Maplesoft.com

MaplePrimes Activity


These are replies submitted by acer

@maple_matt_2 The subexpression 1/8*M[b]*(1+1/``(tan(theta))^2) does not appear explicitly in EQN. You would have had to copy the 1/8*M[b] term and the bracketed ``(1+1/``(tan(theta))^2) term seperately (or done something similar) as the blue output of EQN has a V[c] term lying between those in the product subexpression.

But, sure, entering an explicit multiplication symbol may be better practice than trying to remember whether you had instead added a space between paste-ins.

This problem seems to come up quite often. Some people configure to use 1D Maple notation for input, because of the risk here.

@maple_matt_2 The subexpression 1/8*M[b]*(1+1/``(tan(theta))^2) does not appear explicitly in EQN. You would have had to copy the 1/8*M[b] term and the bracketed ``(1+1/``(tan(theta))^2) term seperately (or done something similar) as the blue output of EQN has a V[c] term lying between those in the product subexpression.

But, sure, entering an explicit multiplication symbol may be better practice than trying to remember whether you had instead added a space between paste-ins.

This problem seems to come up quite often. Some people configure to use 1D Maple notation for input, because of the risk here.

@Christopher2222 Rebuilding the data file is not difficult.

I ran these commands, at the end of the Document (and then deleted those commands). I changed the data file name from "test.dat" to the more Windows-friendly "testdata.txt".

stuff:=DocumentTools:-GetProperty('plotter_',value):
writedata(cat(kernelopts(homedir),"/testdata.txt"),
          convert(op([1,3],[plottools:-getdata(stuff)]),listlist),
          float);

Since the above creates the data file "testdata.txt" in one's home directory/folder, I figure that would also be an OK place to put the "filenames.txt" file which is the applications master record of any data files it is supposed to handle. Therefore I added a line to the Document's hidden (code) document block to set the working directory to be cat(kernelopts(homedir),"/test.dat") so that it could find these two text files.

Here are the edited files. I removed the plot and output from the Document, so that one can see it changed as it works for the first time. The first two should be placed in whatever Maple reports as the output from running the command kernelopts(homedir).

filenames.txt

testdata.txt

DataAnalysis_edit.mw

Do you mean that you want the data in the plot that is (saved in) the PlotComponent? That component's name is 'plotter_'.

Open that worksheet, but with autoexecute turned off, and decline to execute automatically, when prompted. Then do this,

stuff:=DocumentTools:-GetProperty('plotter_',value);

In recent Maple you can use the plottools:-getdata command to extract the data (as rtables). But even in older versions you could now pick apart `stuff` using the op command.

plottools:-getdata(stuff);

I'm guessing that you want the Matrix in the ensuing  "points" substructure.

acer

@lpearce The integral succeeds for me using 64bit Maple 14.00 on both ubuntu 10.04 and 11.04.

But the integral failed for me, returning unevaluated, on 64bit ubuntu 12.04 with 64bit versions 14.00 and 14.01 of Maple. The problem now appears similar to this and this.

Note that ubuntu 12.04 came out some years after Maple 14 (2010), and is not on the list of supported platforms for that version.

@lpearce The integral succeeds for me using 64bit Maple 14.00 on both ubuntu 10.04 and 11.04.

But the integral failed for me, returning unevaluated, on 64bit ubuntu 12.04 with 64bit versions 14.00 and 14.01 of Maple. The problem now appears similar to this and this.

Note that ubuntu 12.04 came out some years after Maple 14 (2010), and is not on the list of supported platforms for that version.

@lpearce I also had success for that command with 64bit Maple 14.00 on Linux, when running in the commandline (tty) interface (started with the -s option to suppress default reading of initialization files).

It's hard to guess just exactly what the original cause might have been, for you.

@lpearce I also had success for that command with 64bit Maple 14.00 on Linux, when running in the commandline (tty) interface (started with the -s option to suppress default reading of initialization files).

It's hard to guess just exactly what the original cause might have been, for you.

Hmm. Now I am wondering what was wrong with this code in the original thread, and which also works in Maple 13, 12, and 11...

> proc () local t; t := proc () debugopts('callstack')[9] end proc; printf("%s;\n",eval(t)()) end proc();

proc () local t; t := proc () debugopts('callstack')[9] end proc; printf("%s;\n",eval(t)()) end proc();

That didn't rely upon first calling interface(), and doesn't call `print`. The calls to `printf` could be replaced by calls to `iolib` (and some printing mechanism must be used, because that is the task).

Hmm. Now I am wondering what was wrong with this code in the original thread, and which also works in Maple 13, 12, and 11...

> proc () local t; t := proc () debugopts('callstack')[9] end proc; printf("%s;\n",eval(t)()) end proc();

proc () local t; t := proc () debugopts('callstack')[9] end proc; printf("%s;\n",eval(t)()) end proc();

That didn't rely upon first calling interface(), and doesn't call `print`. The calls to `printf` could be replaced by calls to `iolib` (and some printing mechanism must be used, because that is the task).

The above used `thisproc` as a means of an anonymous procedure to refer to itself, which is somewhat recent Maple functionality.

The following is in Maple 13, as 1D Maple Notation input,

> assign('m',proc () printf("assign('m',%s): m();",convert(eval('m'),string)) end proc): m();

assign('m',proc () printf("assign('m',%s): m();",convert(eval('m'),string)) end proc): m();

I suppose that conversion to a string is not necessary, and it could also be,

> assign('m',proc () printf("assign('m',%a): m();",eval('m')) end proc): m();

assign('m',proc () printf("assign('m',%a): m();",eval('m')) end proc): m();

The above used `thisproc` as a means of an anonymous procedure to refer to itself, which is somewhat recent Maple functionality.

The following is in Maple 13, as 1D Maple Notation input,

> assign('m',proc () printf("assign('m',%s): m();",convert(eval('m'),string)) end proc): m();

assign('m',proc () printf("assign('m',%s): m();",convert(eval('m'),string)) end proc): m();

I suppose that conversion to a string is not necessary, and it could also be,

> assign('m',proc () printf("assign('m',%a): m();",eval('m')) end proc): m();

assign('m',proc () printf("assign('m',%a): m();",eval('m')) end proc): m();

@Markiyan Hirnyk It is full source and not just the procedure body that you are after, it seems. I didn't understand that part of the request before, sorry.

In 1D Maple notation this might be considered closer, as a line-printed piece of source code,

> proc () printf("%s();",convert(eval('thisproc'),string)) end proc();

proc () printf("%s();",convert(eval('thisproc'),string)) end proc();

[edit: doing it without the conversion to a string...]

> proc () printf("%a();",eval('thisproc')) end proc();

proc () printf("%a();",eval('thisproc')) end proc();

For 2D Math it might be possible, but trickier because it may be that Typesetting calls or TypeMK are needed.

@Markiyan Hirnyk It is full source and not just the procedure body that you are after, it seems. I didn't understand that part of the request before, sorry.

In 1D Maple notation this might be considered closer, as a line-printed piece of source code,

> proc () printf("%s();",convert(eval('thisproc'),string)) end proc();

proc () printf("%s();",convert(eval('thisproc'),string)) end proc();

[edit: doing it without the conversion to a string...]

> proc () printf("%a();",eval('thisproc')) end proc();

proc () printf("%a();",eval('thisproc')) end proc();

For 2D Math it might be possible, but trickier because it may be that Typesetting calls or TypeMK are needed.

@Axel Vogt One of the profiled code snippets in that google groups (usenet) thread performed "porgrammer indexing" of an rtable, by referring to an entry using () round brackets instead of [] square brackets when assigning computed values to entries. I wonder if any of his code relies heavily on this to repeatedly "grow" any rtables (ie. Vector, Matrix, or Array).

When Maple grows an rtable in this way it may have to recreate  and replace it in situ. I believe that it might overallocate by some proportion, which avoids recreation of the underlying structure only up to the amount of extra space allocated. But if that kind of indexing is done heavily (or.. entirely in the worst scenario) then Maple may be producing and disposing of many copies of the rtable (ie. disposable garbage).

Here is an example of the "worst scenario", for comparison, performed in Maple 15 on 64bit Linux.

> restart:
> kernelopts(printbytes=false):

> p:=proc(x::float,V::Vector(datatype=float[8]),N::integer)           
>    local i::integer[4];
>    for i from 1 to N do
>       V(i):=ln(x); # programmer indexing, which can grow V
>    end do;
>    NULL;
> end proc:

> G:=Vector(datatype=float[8]): # created with no entries stored

> CodeTools:-Usage( evalhf(p(3.5, G, 1000000)) ):  
memory used=84.64MiB, alloc change=61.36MiB, cpu time=720.00ms, real time=734.00ms

> G[100];
                               1.25276296849537


> restart:
> kernelopts(printbytes=false):

> p:=proc(x::float,V::Vector(datatype=float[8]),N::integer)           
>    local i::integer[4];
>    for i from 1 to N do
>       V[i]:=ln(x);
>    end do;
>    NULL;
> end proc:

> G:=Vector(1000000,datatype=float[8]):

> CodeTools:-Usage( evalhf(p(3.5, G, 1000000)) ):  
memory used=512 bytes, alloc change=0 bytes, cpu time=130.00ms, real time=134.00ms

> G[100];
                               1.25276296849537

It's just a guess, as to a possible cause of avoidable garbage collection. Better performance in such a case might even be attained by initially creating the rtable with the maximal explicit size that the algorithm might need (if that is feasible in memory).

First 406 407 408 409 410 411 412 Last Page 408 of 600