Items tagged with procedures

with(plots):
with(Grid):

HeatPC := proc (f, g, n, lambda, N, T)
 local k, u, i, L,fcoef;
 fcoef := proc (y) options operator, arrow; sqrt(2)*sin(lambda*y) end proc;
 u := proc (y, t) options operator, arrow; sum((int(fcoef(x)*g, x = 0 .. 1, numeric))*exp(-k*lambda*t)+exp(-k*lambda*t)*(int(exp(k*lambda*s)*(int(f, x = 0 .. 1, numeric)), s = 0 .. t, numeric)), k = 1 .. n) end proc;
 L := [Grid[Seq](plot(u(x, (i*T-T)/N), x = 0 .. 1, color = COLOR(HUE, i/N), legend = typeset((i*T-T)/N, "s")), i = 1 .. N)]; 
return u(1, 1), display(L, legendstyle = [location = right])
 end proc;

h := piecewise(x <= 0, 0, 0 < x and x < 1, 3, x >= 1, 0)

HeatPC(1, h, 100, Pi, 10, 1.5)

I'm trying to use the above procedure to plot graphs for different inputs. To make the code easier on the eye I want to split my main function u into several smaller functions. To that end I added the function fcoef. Now when I try to run the procedure for simple input values I get the error "Warning, expecting only range variable x in expression 100.*int(fcoef(x)*piecewise(x <= 0.,0.,0. < x and x < 1.,1.,1. <= x,0.),x = 0. .. 1.) to be plotted but found name fcoef". However u still evaluates nicely at (1,1) so obviously my function fcoef is well defined. How do I go about getting plot to recognize this?

 

 

I'm trying solve a problem with NLPSolve using procedures like constraints, but it say: Error, (in Optimization: -NLPSolve) constraints must be specified as a set or list of procedures. Theses constraints are inequality and equality.  How i can get procedures as a list or set?. Is there anyone to give a example of it?. Thanks!

Hello

Thanks to the help of several list members I managed to translate and update some old procedures.  These procedures were part of a packcage and they all had help files.   Here is an example

 

# E. Mendes - 25/04/94

`help/text/sampling`:=TEXT(``,
`FUNCTION: sampling - finds the discretized model`,
` `,
`CALLING SEQUENCE:`,
` sampling(f)`,
` sampling(f,k)`,
` sampling(f,k,vars)`,
`PARAMETERS:`,
` f - state space`,
` k - order of approximation`,
` vars - variables`,
``,
`SYNOPSIS:`,
`- sampling(f,k) returns a discrete approximation for a continuous`,
` system`,``,
` dx(t)/dt=f(x(t),u(t)) `,
``,
`EXAMPLE: `,``,
`> with(linalg):`,
`> f:=vector([x2,x3,-x1+x2^2+2*x3]):`,
`> sampling(f,1)`,
``,
` 2`,
` [- x1, x2 + x1 ]`,``,
`SEE ALSO: fixpoind, fixpoinc`):

 

I have browsed the help documentation but I must confess I don't feel comfortable to modify the help database.  Do I have to wrap all the functions up as a package and then write the help files?   I am lost here.  Any help will be most welcome.

Many thanks

 

Ed

 

In feature "Procedures for two animations" posted by Kitonium appears this line, within a procedure.

T1:=(O2*~y+O1*~u)/~(y+u): T2:=(O3*~u+O2*~v)/~(u+v): T3:=(O4*~v+O3*~z)/~(v+z):

What is the meaning of "~y", for instance, and how does it differ from "y"?

I understand the conventional usage of ~ with a name in output to imply that that name is subject to an assumption.

I have been able to find nothing pertinent in the Maple Help information.  Please enlighten me.

I am trying to solve an optimization problem with several constraints and it is not working. The decision variables are the matrix entries.

 

Below is the code:

restart;
interface(displayprecision = 4): with( plots ):
with(linalg):with( Optimization );
[ImportMPS, Interactive, LPSolve, LSSolve, Maximize, Minimize,

NLPSolve, QPSolve]
f:=proc(x1,x2,x3,x4,x5,x6)
global lambda,mu,rho,Ls;
local eq,Lsq,g,P,n,IM,ImP,ImPi,c0,cb,Sol,i,j,t1,t2,fact,t3,t4,t5,Wq,W,Lq,L,Ws;
n:=7;
g:=array(1..n,[5,0,0,0,0,0,0]);
mu:=array(1..n,[10,5,5,5,5,5,5]);
P:=matrix([[0,x1,x2,0,0,0,0],[0,0,0,x3,x4,0,0],[0,0,0,0,0,x5,x6],
[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]]);
IM := array(identity, 1..n,1..n):
ImP:=evalm(IM-P):
ImPi:=inverse(ImP):
lambda:=evalm(g&*ImPi):
for i from 1 to n do
rho[i] := lambda[i]/mu[i]
od:
c0:=array(1..n,[1/2,0,0,0,0,0,0]);
cb:=array(1..n,[1/5,1/5,1/5,1/5,1/5,1/5,1/5]);
for i from 1 to n do
eq[i]:=(g[i]/lambda[i])*c0[i] + sum((lambda[j]/lambda[i])*P[j,i]*((P[j,i]*(rho[j]^2*cb[j] +(1-rho[j]^2)*cx[j] ))+ (1 -P[j,i])),j=1..n)
od:
Sol:=fsolve({eq[1]-cx[1]=0,eq[2]-cx[2]=0,eq[3]-cx[3]=0,eq[4]-cx[4]=0,eq[5]-cx[5]=0,eq[6]-cx[6]=0,eq[7]-cx[7]=0},{cx[1],cx[2],cx[3],cx[4],cx[5],cx[6],cx[7]}):
assign(Sol):cx:
for i from 1 to n do
t1:= -2*(1-rho[i])/(3*rho[i]):
t2:= ((1-cx[i])^2)/(cx[i]+cb[i]):
fact := exp(t1*t2):
if cx[i] >= 1 then
fact:=1:
else
fact:
fi:
t3:=rho[i]/(1-rho[i]):
t4:= (cx[i]+ cb[i])/2:
t5:=1/mu[i]:
Wq[i] := (t3*t4*t5*fact):
W[i] := Wq[i] + t5:
Lq[i] := lambda[i]*Wq[i]:
L[i] := lambda[i]*W[i]:
od:
Ls:=add(L[i],i=1..n);Lsq:=add(Lq[i],i=1..n):Ws:=Ls/add(g[i],i=1..n):
RETURN(Ls):
end proc:

# here are the constraint procedures to ensure the probability pairs sum to one

p1 := proc (x1, x2) x1+x2-1 end proc;
proc(x1, x2) ... end;
p2 := proc (x3, x4) x3+x4-1 end proc;
proc(x3, x4) ... end;
p3 := proc (x5, x6) x5+x6-1 end proc;
proc(x5, x6) ... end;

sol := Optimization:-NLPSolve(f, {p1}, {p2}, {p3}, 0 .. 1, 0 .. 1, 0 .. 1, 0 .. 1, 0 .. 1, 0 .. 1, initialpoint = [.5, .5, .5, .5, .5, .5]);


Error, (in Optimization:-NLPSolve) unexpected parameters: {p3}

It seems to say that the problem are the constraints but this seems odd.

 

 

Dear all,

I'm having a bit of trouble figuring out some error messages in the Maple debugger. When I debug some procedures I'm getting error messages like "Error, invalid input: %1 expects its %-2 argument, %3, to be of type %4, but received %5". Since the procedure calls a lot of other procedures I have to check every single one of them, to see, which one gives me the error message. It would be easier if I would know, what procedure/type hides behind the variables %1,... Is there a way to check this from within the debugger?

Thanks a lot.

Here is one I have been struggling with lately:

I have a relatively large module with many procedures inside (plus some other data structures). In one of the procedures, it turns out that it would be convenient to have a subprocedure defined inside to both shorten the code by avoiding duplication as well as make it more error proof (once the subprocedure is debugged it'll be correct everywhere it is used). Here is the skeleton

Lattice:=module() option package;
export Track;   ...
   Track:=proc(arguments) uses LinearAlgebra;
   local trackElement;
      ...

      for ... do
         result:=trackElement(parms); # This does not work
         ...
      end do

      trackElement:=proc(arguments) uses LinearAlgebra;
         ...
      end proc; # trackElement

   end proc; # Track;

end module; # Lattice

The problem I have is that procedure trackElement is not recognized as i found out running the code in the debugger. I can make it work by taking trackElement out of Track and make it local to the Lattice module. While functionally this works (and it is how I have it now programmed), I do  not like it as every proc in the Lattice module can see trackElement. That should not be so, I want it local to procedure Track, which is where it belongs.

I really thought I could define procedures within procedures. Am I wrong? Or is there something else ging on?

TIA,

Mac Dude

PS: The whole module is more than 100 kB of Maple code sitting in a library. I refrain from uploading it here as it would be non-trivial to get going even for a simple test case.

Hello guys, I have a question. Is there any possibility to calculate two or more procedures at same time in the maple18 ?. I m thinking about using of the Grid or threads tools.

My problem is:

Given two functions/ procedures, f1(x,y) and f2(x,y). I need make an parallel computation of f1 and f2 and after i need get

f3 = f1+f2.

I am very grateful for the help.

I created my own package and one procudure inside this package is to calculate the eigenvalues of a identity matrix, as shown below

 

 

 

Then, I use this package in another document, all other procedures work well except the procedure calculating egigenvalues, as shown below

 

 

 

How to solve this problem? Thank you.

I want to make a package that I have created work with the LinearAlgebra package that comes with Maple. My package loads into a worksheet fine, but when I try to use one of my procedures, most of which depend upon procedures in the Linear Algebra package, the executable part of my procedure from my package is simply echoed to the screen and not executed. If I then copy the echoed part to a command prompt then it executes fine. How do I make my package use the commands in the Linear Algebra package?

I have three procedures with calling struture:

A(argseq) 

    > call B (argseq)

    > call C (argseq)

     > etc code

     > return results

end A()

Procedures A, B, C are defined in a single MAPLE .mw worksheet, and each time I use them I have to reload them by pressing return.

Please can you suggest the best course of action?  I have been reading about modules but am not certain that A knows about B and C in the dame module when it calls them

Can anyone help please?

MRB

 

 

Hi,

In a simulation code I use "module-factory" concepts (where a module has a proc; the proc in turn returns another module that has all the procs one wants) a fair bit to keep the code readable and maintainable.

At this point I have the code mostly doing what I want it to, but the run time could be improved (read: I want it to go faster). So I have started working with CodeTools:-Profiling. Quickly I am running into the Profile() function apparently not being able to deal with my generated procedures.

Is there a way out? In other locations I read about procs to be profiled having to be in a Maple library; this is the case for my routines (it all is in a big module with procs, submodules etc.). I'd rather not rewrite the code extensively just to allow profiling (in particular I would not really like to abandon the module-factory scheme), but of course I can do some modification.

Any suggestions?

M.D.

 

I have couple questions on displaying/printing items I see from ShowContents(LibLocation). Here is an example

restart;
with(LibraryTools):
LibLocation:=cat(kernelopts(mapledir),"/lib/maple.mla");
c:=ShowContents(LibLocation):


First quesionNow, when I do
c[1];
then I see

When is "%?.m" there? Is this suppoed to be an actual function one can print?

second question

c[30]; gives

But when I do:

interface(verboseproc=3);
print(AiryBiZeros);

I get listing that ends up calling

---------------------------
proc(n::{algebraic, algebraic .. algebraic})
local fn;
   1   if nargs <> 1 then
   2     error "wrong number of arguments"
       end if;
   3   fn := traperror(evalf(n));
   4   if type(fn,'numeric') and not type(n,'posint') or type(fn,('numeric') .. ('anything')) and not type(op(1,n),'posint') or type(fn,('anything') .. ('numeric')) and not type(op(2,n),'posint') then
   5     error "expecting positive integers in argument"
       elif type(n,('integer') .. ('integer')) and op(2,n) < op(1,n) then
   6     NULL
       else
   7     ('AiryBiZeros')(n)   <----- Is this C function/compiled that is why it does not show?
       end if
end proc
--------------------------------------

Which is the same name I printed. So it seems to be another internal procedure with same name? How can I print it as well?

Is there a better way to print Maple procedures/command than what I am doing above so one gets full listing?
I tried Browse(); command in LibraryTools, but found it very cluncky to use (keeps losing listing and screen become blank. Very buggy)

I do have some m files and they containing procedures where i am interested in
How can i read those procedures in a m file

Thanks in advance


Hi;


I've written a Maple's procedure but when I execute it some warning messages have been displayed as follows:


read "My_Proc.mpl":
Warning, `L` is implicitly declared local to procedure `My_Proc`
Warning, `P` is implicitly declared local to procedure `My_Proc`
Warning, `V` is implicitly declared local to procedure `My_Proc`

So, how can I get rid of such warnings?
Thanks in advance.


1 2 3 4 5 6 7 Last Page 1 of 12