Joe Riel

8338 Reputation

22 Badges

15 years, 329 days

MaplePrimes Activity

These are answers submitted by Joe Riel

There is a workaround for this.  You can create a data file of sampled random noise and use it in a time-table interpolation block to generate the noise source.  This is conveniently done via the MapleSim app in Utility > Random Data.  Select the distribution and the relevant parameters, generate the data and attach it (save it), then add a time table component and select the attached data as the source.  Here is a simple example, NormalNoise.msim

Insert a multiplication sign (*) after the epsilon. Without it, Maple is interpreting it as a function call.

The 'tran' output of Syrup:-Solve is a set of differential equations.  The usual way to handle this is to pass them to dsolve and then use that solution, with the others to solve for specific variables.  For example

(volts,others) := Solve(ckt,'tran', 'returnall');
dsol := dsolve(volts);
# substitute others, and then dsol, into i[R1](t), then take its derivative
diff(subs(others, dsol, i[R1](t)), t);


Using mint, Maple's syntax checker, is helpful. Because it works with external source files, an alternative is to use maplemint. For example

(**) foo:=proc(expr)
(**)   local x;
(**)   map(x->x^2,expr);
(**) end proc:
(**) maplemint(foo);
Procedure foo( expr ) 
  These local variables were never used:  x


Is Ti the sampling period?  Regardless, for now the easiest way to handle this is to either construct the model graphically, using discrete components, or to write Modelica code for the model.  I've taken the latter approach. See DigitalControl.msim. Double click on the dig model to open a Modelica editor that displays its code.

What type of joint?  A multibody rotational joint?  It has a builtin damping constant.  For other types of friction you can connect a 1D rotational device between the two 1D rotational ports on the multibody rotational joint.

The installation command is wrong (it is different in the zip file than what you show). The correct command is

PackageTools:-Install("this://", overwrite)

The incorrect one used backslashes, not forwardslashes.

There is no direct method, but there are ways to debug this.  A good practice is to minimize the amount of explicit code in an embedded component.  I usually limit this to a single procedure call.  When that procedure call is not working, I then use the maple debugger to find out why.  I have a personal set of tools for doing so, but here is a simplified version that might help.  Create the Maple procedure

dbg := proc(p) stopat(p); p; end proc:

It sets a breakpoint in the procedure passed to it, then returns the procedure.  Modify the code used for the non-working button to


Now, when you click the button you get an error, Error (in stopat) procedure name expected.  That indicates that CatchMeNot is not actually assigned a procedure, which is the case.  If it were assigned a procedure, then it would have launched the debugger and you could step through its code to find say, an operational error.

The DynamicSystems package has GainMargin and PhaseMargin commands to do precisely that.

If you want globals, a simple method is


Note that you can use multiple ranges, or a mix of ranges and other stuff in cat

 cat(x, 1..3, `_`, 2..4);
                                  x1_2, x1_3, x1_4, x2_2, x2_3, x2_4, x3_2, x3_3, x3_4

Ranges do not have to be numeric

cat(x, "a" .. "b", `_`, 2..4);
                                           xa_2, xa_3, xa_4, xb_2, xb_3, xb_4


Have you looked at the ImageTools package?

One solution is

type(f(g(1),3,3,4),'And(specfunc(f), patfunc(specfunc(posint,g),posint))');


The annotation associated with each port defines its position.  Change the extents to

extent = {{-120, 40},{-100,60}}  // for first input
extent = {{-120, -60},{-100,-40}} // second input

Each extent has the form {{x1,y1},{x2,y2}}, the points define the diagonal of a rectangle.


For a slightly nicer looking block (white background rather than see-through), add the following line, say after the model line

extends Modelica.Blocks.Icons.Block;


Another possiblity is to use ArrayTools:-Alias to allow access to a Matrix (or any rtable) created with a different offset.  For example

M := Matrix(3):  # 3x3 matrix
A := ArrayTools:-Alias(M, [0..2,0..2]):  # alias
A[0,0] := 23:


Here's how it can be solved using Syrup, which is available on the Maple Cloud:

ckt := [V(a+b*t+c*t^2),R,C]:
(deqs,rest) := Solve(ckt,'tran','returnall'):
dsol := dsolve(deqs):
subs(rest, dsol, v[C](t));



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