Items tagged with proc proc Tagged Items Feed

I have a maple proc for which I would like to find parameters to fit data I have. The proc has an 'if' statement in it, and when I try to use the CurveFitting function 'NonlinearFit' function, I'm getting an error.

Is there a curve fitting function that can be used with procs with 'if' statements in them?


changering := proc(Equation1, f3,g3)
g1 := (x,y)-> f3;
f1 := (x,y)-> g3;
h:=subs(g=g1, Equation1);
h:=subs(f=f1, h);
h:=subs(0=0, h);
return h;
end proc:
Eq1 := f(x,g(x,y)) + f(x,y);
h2 := changering(Eq1,x+y, x+y);

g1 := (x,y)-> x+y;
f1 := (x,y)-> x+y;
h:=subs(g=g1, Eq1);
h:=subs(f=f1, h);
h:=subs(0=0, h);


This problem has real world applicability: Three vampires and three maidens are at the foot of a tall building and wish to get to the bar on the top floor.  The lift only holds two people (for convenience I am classing vampires as people), and needs one person to operate it.  If ever the vampires outnumber the maidens at any place, they will do something unspeakable.  How can the vampires and maidens all safety get to the top in the minimum of moves?

can this be solved procedurally or using optimization package?

possible manual soln:

No. m>= No. v

3m+3v, 0   [0]

2m+2v,m+v [1]

3m+2v,v  [2]

     3m, 3v [3]

3m+v , 2v  [4]

m+v  , 2m+2v [5]

#then reverse the steps

2m+2v, m+v [6]

       2v, 3m+v [7]

       3v, 3m  [8]

        v , 3m+2v [9]

    m+v, 2m+2v [10]

        0, 3m+3v [11]



I want to write a proc to calculate exponential averages. Each call will add one data point to the averge. To do that, I need to store the previous average. I can do that by handing the previous average back to the proc at the next call, but I'd rather store it in the proc. Is there a way to guarantee that a variable---once set---remains alive keeping the last value upon entering the proc again? Note that I need the variable to be local to each instance of the proc since I will have several of these running in parallel (I intend to create these procs using the module factory scheme outlined in the programming guide). So I cannot store the previous average in a global variable since that would not be unique to a given instance.

Any ideas out there?


Mac Dude


Dear all,

I have one probem in using Maple in comparison with Matlab.

Generally, when using Matlab, I write a long program with 500 lines (for example) and where I use some matricial calculations and other. When I want to repeat this program for some parameters (variables) many times, I transform the program to a procedure "Function" with just adding the command Function in the start of the program.

When using Maple, I have a difficulty to transform a long program which I want to repeat for some variables to a procedure "proc". The program uses packages like LinearAlgebra and other procedures.

Is there a simple way to transform a long Maple program to a procedure which should be repeated many times for some variables in Maple. 

I have especially problems with the commands local, global, use (for packages), etc.. and the warning related to the variables. It is not easy for a long program with many variables to write them in local or global variables.

Thank you.

When trying to plot "Example1" from this page I get an error message that Maple cannot make a plot structure from an object with the transformation proc( (x,y) -> [x,y,-.3] end proc) . How can I plot this example?

I have a nice family of functions of the form:

W:=(p,n,mu,w)->sum(w[k] * (n-k)* mu(n-k),k=1..n)

which can be evaluated for different p's using the operator mu*diff(...,mu)

The recursion begins with p=0 and proceeds using mu*diff(W(p,n,mu,w),mu) = W(p+1,n,mu,w).

Can anybody implement this procedure in Maple

Thank you 

I solve numerically very simple boundary value problem for the following ordinary diff. equation:


y(0)=1, y(1)=0.

So := dsolve([-1.2*diff(y(x), x$2)+0.8*y(x) = 2, y(0)=1, y(1)=0], y(x), 'numeric', 'output' = listprocedure);

Solution looks as needed

u := unapply(rhs(So[2])(x), x): plot(u(t), t=0 .. 1);

and can be numerically integrated in usual way:

evalf(int(u(t), t = 0..1));


But integral of u^2(t)  (evalf(int(u(t)^2, t = 0..1))) returns:


How to avoid this issue?

I solve the problem on computational geometry: "A cube of side one contains two cubes of sides a and b having non-overlapping interiors. How to prove the inequality a+b≤1?" To this end I use the DirectSearch package , namely,

Here are some comments to it. The cube of side a is centered at (x_1,y_1,z_1) and rotated by the angles phi_1, psi_1, theta_1 (see ) and the cube of side b is centered at (x_2,y_2,z_2) and rotated by the angles phi_2, psi_2, theta_2. The procedure

calculates the distance between these cubes, for example,

st := time(); dist(.2, .9, .2, .2, .2, .7, .7, .7, 0, 0, 0, 0, 0, 0); time()-st;

[HFloat(5.453016092898238e-11), [s1 = HFloat(0.2646161775314957),

  s2 = HFloat(0.2828503247068887),

  s3 = HFloat(0.29444713116943216),

  t1 = HFloat(0.2646161774916062),

  t2 = HFloat(0.28285032471998384),

  t3 = HFloat(0.2944471311346344)], 2527]
Unfortunately, my code (which is syntactically correct) is spinning on my wondercomp during 10 hours without any output. I don't understand it at all. Your advices are welcome.

I have a formula, which is called the cube law. It requires input between 0 <= x <= 1. When creating  a procedure I run into all kinds of problems and get nothing but error codes. Trying to use assume works, it puts a tilde mark on the variable x, but doesn't restrict the input. Here is the formula the way it is writtin in a book on calculus:

f(x) := x^3/x^3+(1-x)^3 (0 <= x <= 1).

Trying to restrict the input to be restricted as required by the relational statement has been proven fruitless.

Any help would be greatly appreciated, thanks,


Hi experts


In a procedure with no declared parameteres I would like to return (print) the passed arguments (expecting Matrix structures) in a modified form along with the name of the symbol holding the structure passed as arguments.


That is, the procedure just iterates through the _passed arguments in a for-loop to display the name of the the passed argument (the symbol), a colon and then the modified matrix structure.

My problem is that when looping from i to _npassed arguments, refering to _passed[i] gives me the evaluated form.Tat is what I need to modify the structure but not to list the symbol name.


Say I wanted to print a transposed version of my passed matrices. Then I would call



And the result I want would be

M: <<1,3>|<2,4>>

But I don't know if _passed holds the symbol names or just the evaluated versions of the passed arguments??

And theoretically the passed argument (assuming a matrix) could be the matrix structure put directly in the procedure call, in which case there is no symbol to refer to.


I hope you get my question and can help me out.





    option package;
    # local a,b,c;

    uses LinearAlgebra;

        local ans;

        return ans;

    end proc;

end module;

Here is a short piece of code to create a Maple package. It runs fine. Is that possible to hide the code from print() ?



print(mymain); # which displays the source code


Could I hide some of the code? Say I want to use the function mymain() for debugging purpose, but I dont want to make it local to the package. Instead I keep it in "export", but I dont want users to see its code.



Hello. As you can see the minimum of set X is 2.

the time pair in set W whose difference is 2 corresponds to elements 54 and 55. How do i locate and print these automatically?


U := [1.010, 1.110, 1.210, 1.310, 1.410, 1.510, 1.610, 1.710, 1.810, 1.910, 2.020, 2.120, 2.220, 2.320, 2.420, 2.520, 2.620, 2.720, 2.820, 2.920, 3.030, 3.130, 3.230, 3.330, 3.430, 3.530, 3.630, 3.730, 3.830, 3.930, 4.040, 4.140, 4.240, 4.340, 4.440, 4.540, 4.640, 4.740, 4.840, 4.940, 5.050, 5.150, 5.250, 5.350, 5.450, 5.550, 5.650, 5.750, 5.850, 5.950, 6.060, 6.160, 6.260, 6.360, 6.460, 6.560, 6.660, 6.760, 6.860, 6.960, 7.070, 7.170, 7.270, 7.370, 7.470, 7.570, 7.670, 7.770, 7.870, 7.970, 8.080, 8.180, 8.280, 8.380, 8.480, 8.580, 8.680, 8.780, 8.880, 8.980, 9.090, 9.190, 9.290, 9.390, 9.490, 9.590, 9.690, 9.790, 9.890, 9.990, 10.01, 11.11, 12.21]:

W := select(proc (t) options operator, arrow; .59 >= frac(t) end proc, U);

[1.010, 1.110, 1.210, 1.310, 1.410, 1.510, 2.020, 2.120, 2.220, 2.320, 2.420, 2.520, 3.030, 3.130, 3.230, 3.330, 3.430, 3.530, 4.040, 4.140, 4.240, 4.340, 4.440, 4.540, 5.050, 5.150, 5.250, 5.350, 5.450, 5.550, 6.060, 6.160, 6.260, 6.360, 6.460, 6.560, 7.070, 7.170, 7.270, 7.370, 7.470, 7.570, 8.080, 8.180, 8.280, 8.380, 8.480, 8.580, 9.090, 9.190, 9.290, 9.390, 9.490, 9.590, 10.01, 11.11, 12.21]



[10.00, 10.00, 10.00, 10.00, 10.00, 11.00, 10.00, 10.00, 10.00, 10.00, 10.00, 11.00, 10.00, 10.00, 10.00, 10.00, 10.00, 11.00, 10.00, 10.00, 10.00, 10.00, 10.00, 11.00, 10.00, 10.00, 10.00, 10.00, 10.00, 11.00, 10.00, 10.00, 10.00, 10.00, 10.00, 11.00, 10.00, 10.00, 10.00, 10.00, 10.00, 11.00, 10.00, 10.00, 10.00, 10.00, 10.00, 11.00, 10.00, 10.00, 10.00, 10.00, 10.00, 2.00, 70.00, 70.00]




2.00, {9.590, 10.01}




The following MWE shows what I mean:




    local eq;



    return eq;

end proc:


test();  # yields -[-MZ,MY] - [MZ,MY]


%  # yields 0



Any ideas how I can solve this? I would like to return the simplified version.

I am considering to write a wrapper for plot and related commands (could redefine the commands or introduce a new name) which facilitates export of Maple plots to postscript. The command should interpret some of the options and remove them from the options sequence before submitting the remaining ones to the original plot().
E.g. it should recognize a title="TITLE" parameter and process TITLE (e.g. write it to a specific file). Similarly I would want to be able to pass additional parameters, e.g. filename="FILE" in order to specify how the output file name should be set. Is this a sensible approach. How can I realize this detailed option 'parsing' in Maple?

1 2 3 4 5 6 7 Page 1 of 7