acer

32333 Reputation

29 Badges

19 years, 326 days
Ontario, Canada

Social Networks and Content at Maplesoft.com

MaplePrimes Activity


These are replies submitted by acer

It looks like you may be assigning to mplPath an arithmetic expression (division) that is wrapped in single right-ticks (a.k.a. uneval quotes, a.k.a. single right-quotes, a.k.a. apostrophes).

That would make no sense at all. An unevaluated arithmetic expression is neither a name nor a string.

You Question contains a claim that you used this code:

mplPath := '/somePath/MyPackage.mpl';
mlaPath := 'somePath/MyPackage.mla';

But the first of those emits a syntax error and the second returns a multiplicative product of terms.

If that's your situation, try wrapping the directory location in quotation marks instead (a.k.a. double-quotes).

Even if you were actually using different kinds of quotes (ie, your Question here showed something different from what you actually did), it'd still be unclear how your given assignment to mlaPath would work. Is it supposed to refer to a subdirectory of the current working directory?

Details are missing here. The description of what you've tried is verbose but somewhat vague. Better would be an actual worksheet, to check actually used syntax. Knowing currentdir(), and what subdirectories exist, and what the fully qualified name of the target location you want to use, would also help. 

@zenterix

See the Help page for topic kernelopts to see a description of the includepath setting. It is wholly unrelated to libname or .mla files. It is related to how the kernel finds files when processing any $include directive. It can be set in a session with Maple's kernelopts command, or it can be passed in via the -I option when Maple is launched.

I use a convention in which both .mpl, and .mm are filename extensions for plaintext Maple code. Here, .mm is an acronym for module member. The distinction is a mnemonic convention, but can also be useful in shell-scripting in which I can programatically search for only .mpl files for reading/loading.

The lib directory directly under the Maple installation directory is in libname by default. Any lib directories that appear in the following pattern are also put in libname, if found when Maple launches:
  $HOME/maple/toolbox/*/lib
The pattern can also be restricted to a particular major version number, eg.
  $HOME/maple/toolbox/2022/*/lib
etc. Here I'm using "*" to stand for your particular choice of name. On MS-Windows the home directory is like C:/Users/acer and on Linux may be like /home/acer. You can find out using the Maple command,

    kernelopts(homedir)

Apart from these locations, the directory name lib is not (in and of itself) special to Maple.

The filename extension .maple is used for Maple workbooks, as opposed to .mw for worksheets. A workbook is a kind of container that the Maple GUI understands. It can contain multiple .mw files as well as data files, images, etc. This is documented. But, less well known, it's also a vehicle Maple can use to store (see PackageTools) and deploy/unpack a package (eg. as .mla and .help files unpacked to one of those special toolbox locations I just described).

note 1: Originally (Maple 6, onwards) the term "package" technically meant a module created with option package. But in recent years the term has also been used to refer to the mentioned deployment via Maple Cloud or .maple workbooks, via PackageTools. This kind of ambiguous meaning is unfortunate.

note 2: The exports of a module created with option package are protected, as mentioned here. I mention that because -- judging from another of your recent Questions -- that fact might be of interest to you (though perhaps not the only potential cause of difficulty for you).

@Hullzie16 I apologize if my message's tone came off as harsh. I'm feeling quite under the weather. You should never have to worry about being new to Maple programming. We all have things to learn, and we all started off at some time.

By the way, there are several other ways to construct the second Array, B.

For example, if you have already constructed Array A, then either of these can work:

Array([seq(F,t=A)]);

Ffun := unapply(F,t);
Ffun~(A);

Which unhelpful person keeps vandalizing this Question and stripping off the tags?

@mmcdara Using the preformed Sample Vectors made it about ten times faster (at L=50000, and more as L increased I suspect), if I recall.

Having the loop code operate under fast evalhf mode made that about 10 times faster again, if I recall.

I used subs on a template for the helper procedure so that evalhf would not baulk (lexical scoping not supported) at evaluation of the beta_pdf procedure. Thus I shoe-horned the piecewise result from a call to beta_pdf (with appropriate symbolic name as argument) into a "template" for the helper procedure.

@mmcdara With some edits your mcmc procedure can be made faster, in the hardware floats case.

The following is done with L = 50000 which is ten times as many as you had above. On my machine it takes 0.15 sec using Maple 2015.2.

For L = 10^6 it took my machine 1.97 sec.

Below the Sample(proposal,...) is computed up front for 5*Length values. Hopefully that is enough, since each "early" acceptance keeps more guesses for the later tries. This total supply can be adjusted.

And similarly Sample(Uniform(0,1),...) is computed up front for Length values. The looping code can then be run under evalhf.

I also increased the Histogram's bin count, for fun. And randomize() can be added to the top of the worksheet if you want a different first run for each complete re-execution.

restart:

randomize():

mcmc := proc(N, K, a, b, Length, shrink)
  uses Statistics;
  local ARtest               := Vector(Length, datatype=float);
  local B                    := RandomVariable('Beta'(a, b));
  local beta_pdf             := unapply(PDF(B, x), x);
  local beta_effective_range := Probability(B > 0.99, numeric) - Probability(B < 0.01, numeric);
  local proposal             := RandomVariable(Normal(0, beta_effective_range/shrink));
  local chain                := Matrix(Length, 2, datatype=float);
  local S1                   := Vector(8*Length, datatype=float);
  local helper := subs(__d1=beta_pdf(g),
    proc(Le,c,s1,ARtest,N,K)
    local n, count, is_out, guess, L, g;
    count := 0;
    for n from 2 to Le do
      is_out := true;
      while is_out do
        count := count + 1;
        if count>8*Le then error("too many attempts"); end if;
        guess  := c[n-1, 1] + s1[count];
        is_out := guess < 0 or guess > 1;
      end do;
      g := guess;
      L := binomial(N, K)*g^K*(1 - g)^(N - K) * __d1;
      if L / c[n-1, 2] > ARtest[n] then
        c[n, 1] := guess;
        c[n, 2] := L;
      else
        c[n, 1] := c[n-1, 1]: c[n, 2] := c[n-1, 2]:
      end if;
    end do;
    return NULL;
    end proc);
  Sample(Uniform(0,1), ARtest), Sample(proposal, S1);
  chain[1, 1] := Sample(B, 1)[1];
  chain[1, 2] := binomial(N, K)*chain[1, 1]^K*(1-chain[1, 1])^(N-K)
                 * beta_pdf(chain[1, 1]);
  evalhf( helper(Length,chain,S1,ARtest,N,K) );
  return chain[.., 1];
end proc:

L    := 50000: Burn := 10000:
MC   := CodeTools:-Usage( mcmc(4, 2, 21, 1, L, 5) ):

memory used=6.98MiB, alloc change=3.05MiB, cpu time=186.00ms, real time=153.00ms, gc time=60.07ms

plots:-display( Statistics:-Histogram(MC, bincount=min(ceil(L/2),50)),
                plot(Statistics:-PDF('Beta'(21+2, 1+4-2), z), z=(min..max)(MC[Burn..L]),
                     color=red, thickness=2));

sort(MC[Burn..L])[round~([(L-Burn)*0.025, (L-Burn)*0.975])];

Vector[column]([[.735055285342138], [.971732369105087]])

Statistics:-ScatterPlot(`<,>`($1..L), MC, symbol=point);

L    := 1000000: Burn := 10000:
MC   := CodeTools:-Usage( mcmc(4, 2, 21, 1, L, 5) ):

memory used=93.72MiB, alloc change=76.46MiB, cpu time=2.00s, real time=1.97s, gc time=75.60ms

plots:-display( Statistics:-Histogram(MC, bincount=min(ceil(L/2),200), style=polygon),
                plot(Statistics:-PDF('Beta'(21+2, 1+4-2), z), z=(min..max)(MC[Burn..L]),
                     color=red, thickness=2));

 

Download MCMC_ac2.mw

There are several possible causes, eg. as shown here.

If you upload and attach your worksheet (green up-arrow in the Mapleprimes editor) then someone might be able to tell you where the mistake is, and how to correct it.

@JAMET Please don't create multiple Question threads for this topic.

Please put your followup queries and discussion here, instead of in a new and wholly separate Question thread.

@richinex Here is a shorter version of what I had above, with less exposition but still following the idea of your document.

Y := 1/(R__s+1/(s*C__dl+1/(R__ct+1/(sqrt(s)/sigma+1/R__w))))

padey := `assuming`([collect(eval(numapprox:-pade(Y, x = sqrt(s), [1, 1]), s = ss^2), ss, proc (u) options operator, arrow; simplify(u/(sigma*(R__ct+R__s+R__w))) end proc)], [ss > 0])

num, den := op(padey)

eqs := {seq(a[i] = coeff(num, ss, i), i = 0 .. degree(num, ss)), seq(b[i] = coeff(1/den, ss, i), i = 0 .. degree(1/den, ss))}

[op(simplify(eliminate(eqs, [R__s, C__dl, R__ct, sigma, R__w]))[1])]

[C__dl = -a[2]^2/(a[0]*b[2]-a[2]), R__ct = (-a[1]*b[2]+a[2]*b[1])/(a[1]*a[2]), R__s = b[2]/a[2], R__w = (-a[0]*b[1]+a[1])/(a[1]*a[0]), sigma = (-a[0]*b[1]+a[1])/a[1]^2]

Download maple_attempt_ac3.mw

Replace colon statement terminators with semicolons to see the intermediate results.

Inspired by Axel's clever use of implicit RootOf, I reworked some of the above...

(I have no idea whether the OP wants such an implicit result. But it's fun.)

restart;

expr:=sin(sqrt(3)*t)*cos(sqrt(3)*t)*(sqrt(3)*cos(sqrt(3)*t) - sin(sqrt(3)*t))/3;

(1/3)*sin(3^(1/2)*t)*cos(3^(1/2)*t)*(3^(1/2)*cos(3^(1/2)*t)-sin(3^(1/2)*t))

S:=solve(diff(expr,t),t,allsolutions,explicit=false):
S:=[seq(subsindets(S,RootOf,u->RootOf(op(u),index=i)),i=1..3)]:
v:=indets(S,suffixed(_Z))[1]:

plots:-display(
  plots:-pointplot([seq(Re~(evalf([s,eval(expr,[t=s])])),s=simplify(S,{v=1}))],
                   symbol=solidcircle,symbolsize=15,color=blue),
  plot(expr,t=0..Pi), size=[600,200], xtickmarks=decimalticks)

H:=simplify(S,{v=1}):

HH := sort(H, (a,b)->is(simplify(evalc(eval(expr,t=allvalues(a))))
                        > simplify(evalc(eval(expr,t=allvalues(b)))))):

t_opt := HH[1];
evalf(%);

(1/3)*3^(1/2)*(arctan(RootOf(-2*3^(1/2)*_Z^2+_Z^3+3^(1/2)-2*_Z, index = 3))+Pi)

1.390845871

evalf( eval(expr, t=t_opt) );

HFloat(0.3242632442687191)

expr_opt := combine(expand(eval(expr, t=t_opt)));
evalf(%);

-(1/3)*RootOf(-2*3^(1/2)*_Z^2+_Z^3+3^(1/2)-2*_Z, index = 3)*3^(1/2)/(1+RootOf(-2*3^(1/2)*_Z^2+_Z^3+3^(1/2)-2*_Z, index = 3)^2)^(3/2)+(1/3)*RootOf(-2*3^(1/2)*_Z^2+_Z^3+3^(1/2)-2*_Z, index = 3)^2/(1+RootOf(-2*3^(1/2)*_Z^2+_Z^3+3^(1/2)-2*_Z, index = 3)^2)^(3/2)

HFloat(0.32426324426871905)

sqrt(1+R^2)*(7*R^2-15*R*sqrt(3)-3)/108;
eval(%, R=RootOf(-2*sqrt(3)*_Z^2+_Z^3+sqrt(3)-2*_Z,index=3)):
evalf(%);

(1/108)*(R^2+1)^(1/2)*(7*R^2-15*R*3^(1/2)-3)

HFloat(0.32426324428570724)

Download some_trig_opt_2.mw

Your Question is lacking key details.

For example, you have not shown explicitly how f and fproc were constructed. There is no code in your original Question like, say, a call to any export of the Interpolate package. You mention "an interpolation object, f(x)" but did not show or clearly describe what you did to create that. There are several ways to do such things in Maple, with several different commands from several different packages. You might be using commands from the CurveFitting, Statistics, or ArrayTools packages.

Also, your Question did not originally contain a sentence like, "The name "fproc" is not something I have in my  code, just the name, "f"." You may have edited your Question, and added that, since I first replied.

Quite a bit of what else you've written makes little to no sense without context. Even a clear sentence that stated that you were trying to perform numeric integration using an object returned by command X from the Interpolate package (where X is an actual command name). would have been useful and more clear. The word "object" can be used as a technical Maple term (jargon) or as a general English word, and without your mentioning the Interpolate package it becomes a matter of guessing here.

Why haven't you bothered to upload and attach a worksheet so that we could see what you have actually done, what Maple version you're using, with code to reproduce the problems? (Green up-arrow in the Mapleprimes editor)

@WA573 You can use any valid value that you want for the pointplot3d command's symbol, symbolsize, and color options.

p3dopt2.mw

@Ronan It's slightly bewildering, because I already mentioned using LibraryTools in your previous Question thread.

Saving/exporting your procedures from a worksheet to external files is a methodology that you yourself described, and was not proposed by responders to recent Question threads. It's not necessary.

Personally I think that authoring source in directly plaintext files has benefits, that especially manifest themselves if it's used and re-used over the years. But authoring in the GUI and then saving to external files is a backwards and unnecessary process.

@Ronan In this latest scenario (saving as .m format) there's no reason to even export/save at all.

In that situation you could just as easily use LibraryTools to Save the procedure or module directly to a .mla archive file.

See my earlier Reply above, for various benefits of having/authoring your code in plaintext files. Using the mint Maple syntax checker (at full strength, not the less flexible/weakened maplemint or CodeEdit/Startup facilities in the GUI) is yet another motivation.

I'm not the only person who sees benefits to using plaintext files for packages/procedures that you might utilize into the future; see also here for a comment by someone else in a related and recent discussion thread.

If none of that rationale interests you then you don't need to export/save your procedures/modules to external source files.

@nmacsai It wasn't clear to me from your original Question whether you wanted just the number of base b digits, or the actual conversion as well.

I guessed that it was just the number of base b digits.

First 91 92 93 94 95 96 97 Last Page 93 of 592