Joe Riel

8338 Reputation

22 Badges

15 years, 329 days

MaplePrimes Activity

These are answers submitted by Joe Riel

@Alger A call to evalc will simplify the results assuming any unknown variables are real.

     (w^2*Rs*(Lm + lpr)^2*g^2 + w^2*Lm^2*Rpr*g + Rpr^2*Rs)/(Rpr^2 + w^2*(Lm + lpr)^2*g^2)

The assignment statement to M1 has no semicolon at the end. Also, the assignment to result__1DP has some weird issue.  To resolve it, select the entire worksheet, convert to 1D Math input (right-click, select Convert To --> 1D Math Input) and manually fix the weird solve (you'll see it). 

Am not sure exactly what you want.  I'm not familar with that package, and after downloading it, am surprised it doesn't provide a way to list the available profiles.  Regardless, with a proper debugger it isn't hard to figure it out.  Here's how you can get a list of the profiles.

kernelopts('opaquemodulues'=false): # allows accessing local members of module
tmp := [indices]( AISCShapes:-AISCTable,'nolist'): # get the indices to the data table
lprint~(sort(tmp)): # sort and print them (just for checking).

You could assign this list to a combobox or listbox, however, given its length I think there may be better options.

What does FileTools:-IsReadable(...) return for the path?  If you pass a directory name (a mistake, regardless) to ImageTools:-Read for which you don't have read permission, it will somewhat confusingly respond with the error message you are reporting.  That should be fixed.

Variables declared in a procedure can be given a type. An error will be raised if the variable is then assigned a value that doesn't match the type, provided kernelopts(assertlevel=2) has been set.  For example

proc() local k :: integer;
   k := 1/2;
end proc();
Error, (in anonymous procedure) assertion failed in assignment, expected integer, got 1/2
data := ExcelTools:-Import("rr.xlsx");

That assigns data to be a 1049x2 Matrix.

xls := "New_Microsoft_Excel_Worksheet.xlsx":
data := ExcelTools:-Import(xls):
y := x^n/(1+m*x^n):
Statistics:-Fit(y, data, x, 'output = parametervalues');
       [m = 2.10000000004366, n = 2.49999999966826]

1. The parenthese in the final statement are mismatched;
2. The equal sign in the preceding statement should be an assignment operator;
3. The multiplication sign after m in the final statement is missing.

I think this is what you want

if P2 = -Q2 then
    return Expand( x-P1 ) mod p;
    m := Expand( (3*P1^2+a)/(2*P2) );
    return Expand( (y-P2 -m*(x-P1) ) / (x+P1+Q1-m^2  ));
end if;

There is no statement separator (: or ;) after the local y statement.

For the second problem, assign to h, not h(x). 

While you could use a piecewise, a regular conditional seems better. What you planning to do with the sum (which is syntactically incorrect)? Better here would be to use an add. I'll assume you want to assign it to something, say s[k]:

for k from 0 to 10 do
   z[k] := ifelse(k=0, 1, 0);
   s[k] := add((m^2-1)/z/(z[k]+1), m=0..k);  # this makes no sense
end do:

Note my comment; it doesn't make much sense to use both z and z[k] in an expression, though it is valid in Maple because z, following the assignment to z[k], is now a table, which will evaluate to a name (z). Unless you need to use z[k] later, I'd probably do something like

for k from 0 to 10 do
   zk := ifelse(k=0, 1, 0);
   s[k] := add((m^2-1)/z/(zk+1), m=0..k);
end do:

That avoids any weirdness with using a name (z) that evaluates to a table. However, it isn't clear whether you actually meant to use the unassigned name, z, in the expression. Maybe the addendum should be (m^2-1)/zk/(zk+1).

You can do this, more or less, by processing the arguments yourself.  See the help page for ProcessOptions.  This was how it was done back in the day.  The new way, where the kernel handles it, is much nicer.  My suggestion is to live with the current approach.

Later If you really want to do this and do not use either undeclared arguments or optional positional arguments, here is a hackish approach that could be used (I'm not recommending it). To make it palatable, I've envisioned it as a technique that would be used only during development---I see little reason to enforce your restrictions on users. The following shows the simple implementation. It uses preprocessor macros to assign code that would normally not be present; as such this would be only usable in text files (not in a worksheet).

$define CHECK_ARGS \
if [_passed][1.._nparams] <> [_params[1.._nparams]] then \
    error "the calling sequence does not match the parameter declaration"; \
end if;
$define CHECK_ARGS

f := proc(x :: integer, y :: integer, {key :: truefalse := false } )
    if key then
        x + y;
        x - y;
    end if;
end proc:


To test this using tty maple (command-line maple)

$ maple -q optional-args.mpl 


$ maple -q -D CHECK_CODE  optional-args.mpl 


Error, (in f) the calling sequence does not match the parameter declaration 

Later still Here's a too clever tip, usable if you have Maple2019. Rather than raising an error, use the following conditionally defined macro:

$define CHECK_ARGS \
if [_passed][1.._nparams] <> [_params[1.._nparams]] then \
    editsource(debugopts('callstack')[5]); \
end if;
$define CHECK_ARGS

If you have properly assigned the global variable `debugger/editor`, see the help page for the debugger, that should open the file that contains the source code for the procedure that generated the offending call. Probably you should raise the error after the call to editsource.

In addition to Carl's point, there are a few syntax errors in the modelica.  The class specifier should be model, not Model. Also, there is no semicolon after Main.  The Imports line should be removed. What version of MapleSim are you using?  The Modelica Code Editor should be able to catch those errors, when you save the model.

Did you try the Manage Style Sets option in the Format menu?  See the help page ?worksheet,documenting,styles.

The aFshear routine is attempting to assign to a parameter (R).  That is not allowed. 

You really should not be using linalg; it's been deprecated for quite a while.  There are equivalent methods in LinearAlgebra for the few linalg procedures you are using; the help pages for the linalg commands mentions what is appropriate.

Another way to do this is to use simplify with the siderels option. See the help page ?simplify,siderels for details.

eqn1 := e1*i1 + e2*i2 + e3*i3 = 0:
sol := solve( { eqn1 } , { i1 } , 'explicit' ):
eqn2 := n12 = e1/e2:
simplify(sol, {eqn2}, {e1,e2});
                       {i1 = (-e3*i3*n12-e1*i2)/n12/e1}
                       {i1 = -1/e1*e3*i3-i2/n12}
4 5 6 7 8 9 10 Last Page 6 of 106