acer

32822 Reputation

29 Badges

20 years, 132 days
Ontario, Canada

Social Networks and Content at Maplesoft.com

MaplePrimes Activity


These are replies submitted by acer

@Yiannis Galidakis I suspect a problem with the Compiler.

This is the same but with the use of the Compiler removed. It's 3+ times faster than what was in my answer on my quad-core, due to the multithreading.

parTet2_nocompile.mw

ps. This was very quick to write, as I just had to make relatively minor adjustments to previous escape fractal code that was set up almost identically.

If you're going to link to this page then I might dig out another worksheet I already had, that used the IterativeMaps:-Escape for a tetration fractal. (There are choices, in how to utilize the computed data for coloring...)

@Yiannis Galidakis The source is present in the Worksheet which I attached in my followup (link at bottom of my Reply), within a Code Edit Region that should be eminently visible when you open the sheet in the Maple GUI.

You can either run the code in that portion via right-click on it, or mark it as auto-execute and allow that to run, or expand it and copy the code to elsewhere in the Worksheet.

I used Maple 18.02, since your attachment was last saved in Maple 18.00.

Here is an attachment with the code simply copied to a regular Execution Group. parTet2.mw

@Yiannis Galidakis So, enabling plot3d to use evalhf to compute TF for each x-y point got the (wall-clock) timing for your original example from 412 sec down to 4 sec on my machine in Maple 18.

Below, by multi-threading and compiling the computational portion, as a direct, looped Array (image) computation, the (wall-clock, real) time decreases further to 0.7 sec for the original example on my quad-core machine in Maple 18. You may see further improvement if you try on an 8-core (but doubtful for an "old" 4-physical core, 8-virtual hyperthreaded...).

(It's possible that by manually unrolling the complex arithmetic into real and imaginary components a little more speed-up could be attained. I'm not sure.)

I included the functionality to have it respect the x-y aspect ratio, in terms of horizontal versus vertical pixel density.

I don't know what parameter value that site's author used, for iteration limits, etc.

restart;

kernelopts(version);

`Maple 18.02, X86 64 LINUX, Oct 20 2014, Build ID 991181`

kernelopts(':-numcpus');

4

source for Tetration module

NN := 400: N := 20: eps := 1e-2: ct := 1e6: maxiter := 100:
(a,b,c,d) := -4.0,4.0,-4.0,4.0:

res := CodeTools:-Usage( Tetration( NN, a, b, c, d, N, maxiter, ct, eps ) );

memory used=1.56MiB, alloc change=7.79MiB, cpu time=2.70s, real time=719.00ms, gc time=0ns

res := Vector(4, {(1) = ` 400 x 400 `*Matrix, (2) = `Data Type: `*float[8], (3) = `Storage: `*rectangular, (4) = `Order: `*Fortran_order})

img := Array(1..op([1,1],res),1..op([1,2],res),1..3,1.0,datatype=float[8],order=C_order):
img[..,..,1] := 360*((ImageTools:-FitIntensity(res))):
RGBimg := ImageTools:-HSVtoRGB(img):
ImageTools:-Embed(RGBimg);

 

#PLOT3D(GRID(c..d,a..b,res),
#       SHADING(ZHUE), STYLE(PATCHNOGRID), LIGHTMODEL(NONE), SCALING(CONSTRAINED),
#       ORIENTATION(180., 0., 180.0), AXESLABELS(x, y, iter), AXESSTYLE(BOX)
#       ,ROOT(BOUNDS_X(0), BOUNDS_Y(0), BOUNDS_WIDTH(ceil(1.5*op([1,2],res))),
#             BOUNDS_HEIGHT(ceil(1.5*op([1,1],res))))
#);

#ImageTools:-Preview(RGBimg);

 

NN := 1000; N := 100; eps := 5e-2; ct := 1e6; maxiter := 400;
#(a,b,c,d) := -4.5,3.3,-2.9,2.9;
(a,b,c,d) := -3.5,3.3,-2.9,2.9;

res2 := CodeTools:-Usage( Tetration( NN, a, b, c, d, N, maxiter, ct, eps ) );

NN := 1000

N := 100

eps := 0.5e-1

ct := 1.*10^6

maxiter := 400

a, b, c, d := -3.5, 3.3, -2.9, 2.9

memory used=7.10MiB, alloc change=6.51MiB, cpu time=55.04s, real time=14.34s, gc time=0ns

Matrix(%id = 18446883920994884654)

img := Array(1..op([1,1],res2),1..op([1,2],res2),1..3,1.0,datatype=float[8],order=C_order):
fitres2 := ImageTools:-FitIntensity(res2):
img[..,..,1] := 360*fitres2:
#img[..,..,2] := 1-~(res2):
#img[..,..,3] := (fitres2):
#img[..,..,2] := map[evalhf](x->`if`(x=0.0,0.0,1.0),res2):
img[..,..,3] := map[evalhf](x->`if`(x=0.0,0.0,1.0),res2):
RGBimg := ImageTools:-HSVtoRGB(img):
ImageTools:-Embed(RGBimg);

 

 

``

parTet.mw

note. I have a faster version of HSVtoRGB, if you need it. It's not the bottleneck here.

@AHSAN Here are a few ways. Adjust options to taste.

help2_acc2.mw

@Preben Alsholm Yes, while I mentioned the setting itself I omitted that documented detail. I don't see why students and users new to Maple should be reasonably expected to understand its subtlety, even though they may comprise a significant portion of those include to use the syntax. Perhaps other readers disagree(?).

@Rouben Rostamian  Performing a Help query on the word gamma leads to the Help page for Topic gamma (because that name has various meanings in different contexts).

And that page contains a cross-reference link to the Help page with Topic initialconstants, which mentions that the constant gamma is equivalent to the call gamma(0) (aka Euler's constant, or the Euler-Mascheroni constant) and that gamma(n) is a placeholder for the Stieltjes constants.

Why did you not provide your actual, underlying, motivating question up front?

If you want to feel better about asking for answers to your coursework you could show us (explicitly) what you've been able to accomplish on your own.

@itsme I submit reports on issues I raise myself. But thanks for your interest!

I did not mention the ifactor command because I guessed that he was wanting to use the result (programmatically) for some futher purpose. I might have guessed wrong.

lprint(ifactor(725));
``(5)^2*``(29)

As can be seen, the structure returned by the ifactor command is far more awkward to query and manipulate than is that of the ifactors command. The former is fashioned purely for its display effect, when printed. But perhaps that's all he's aiming for here.

@user-JG 

H:=n->map(op,ifactors(n)[2]):
H(725);
              [5, 2, 29, 1]

H(1125);
               [3, 2, 5, 3]

H(2048);
                 [2, 11]

In modern Maple versions you can save a few keystrokes in the definition of that procedure H by applying op elementwise, rather than using map.

H := n->op~(ifactors(n)[2]):

@greatpet You can set the include path when you start up the Maple interface (GUI or commandline), using the -I option.

Or you can query or set the include path within a Maple session using the kernelopts command (see the item for includepath).

I make the strings in my $include directives be a reference relative to the location of the current file. And I ensure that the include path contains that (parent) location, when I read that file.

Hope that makes sense.

@greatpet Perhaps some of the following might help with organization.

If you're open to using plaintext files, then you can keep each module local procedure's definition in its own text file. You can then use the $include directive to source those from a (now shorter) module definition.

You can even use a directory structure to mimic the code layout, if your modules have submodules, etc.

(If your projects are advanced you can even get busy with the $define and related directives, for source aliasing and conditional source loading and so on. If you're used to such things in C then you might find it convenient.)

It sounds as if this might suited for contacting Maplesoft's Technical Support.

They'll likely want to know your Operating System details, and whether you have a Language setting (other that English), using a Maple language pack, etc.

@anthonyfl Sorry, but I am not sure that I understand why planes are better than lines, for a 3D contour plot to look like a 2D contour plot.

If you have some other orientation or detail in mind then please be specific.

(If desired, the x-axis tickmarks could be specified to lie at exactly the same values for the 2D plots and the 3D plots.)

P1 := plots:-contourplot(sin(x)*y^2, x=-Pi..Pi, y=-1..1,
                         thickness=2,
                         xtickmarks=piticks,
                         coloring=["Orange","Blue"],
                         labels=[``,``], axes=boxed, size=[300,300]):
P2 := plot3d(sin(x)*y^2, x=-Pi..Pi, y=-1..1,
             style=contour,
             thickness=2,
             orientation=[-90,0,0],
             colorscheme=["zgradient",["Orange","Blue"]],
             labels=[``,``,``], axes=boxed):
P3 := plots:-contourplot3d(sin(x)*y^2, x=-Pi..Pi, y=-1..1,
                           thickness=2,
                           orientation=[-90,0,0],
                           colorscheme=["zgradient",["Orange","Blue"]],
                           labels=[``,``,``], axes=boxed):

P1; P2; P3;

P4 := plots:-contourplot(sin(x)*y^2, x=-Pi..Pi, y=-1..1,
                         thickness=1, filled,
                         xtickmarks=piticks,
                         coloring=["Orange","Blue"],
                         labels=[``,``], axes=boxed, size=[300,300]):
P5 := plot3d(sin(x)*y^2, x=-Pi..Pi, y=-1..1,
             style=surfacecontour,
             thickness=3, lightmodel=none,
             orientation=[-90,0,0],
             colorscheme=["zgradient",["Orange","Blue"]],
             labels=[``,``,``], axes=boxed):

P4; P5;

 



contours_2D_3D.mw

First 165 166 167 168 169 170 171 Last Page 167 of 601