MuPAD
MuPAD comes with a very full-featured programming language. So much so, that I would say that this is one of MuPAD's greatest strengths. In contradistinction to other CASs, MuPAD allows:
procedural programming
functional programming
object oriented programming
parallel processing
It would take far more than an introductory exposition such as this to even scratch the surface of MuPAD's programming power, so we shall just look at a few simple examples. For more involved examples, try the expose command, or look at some of the files in your $MuPAD/share/examples directory.
For procedural programming, MuPAD offers all the standard programming requirements: loops of various sorts, branching, and recursion. Here, for example, is a simple procedure designed to implement Hofstadter's chaotic function, with line numbers as shown:
1 q:=proc(n) option remember; 2 begin 3 if n<=2 then 4 1 5 else 6 q(n-q(n-1))+q(n-q(n-2)) 7 end_if; 8 end_proc;
Suppose we create a small file called Hofstadter.mu containing these lines, and we read it into MuPAD with
>> read("Hofstadter.mu");
This will make the function q(n) available to
us. We can then list the first 20 values:
>> q(i)$i=1..20;
1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 6, 8, 8, 8, 10, 9, 10, 11, 11, 12
Or we can graph the first ten thousand values:
>> plot2d([Mode = List,[point(u,q(u)) $ u=1..10000]]);A few points about this simple procedure: the option remember in line 1 means that values generated by the function are automatically stored where they can be retrieved if needed. With all the nested recursion, evaluating function values without using previous values would be hideously slow. The syntax is pretty standard, and is very similar to that of Maple.
We can define simple functions very readily by using an “arrow” definition:
>> f:=x->x^2+1;
Curiously, I can't find any reference to this in the manual.
For a slightly more involved example, suppose we try to write a program to generate truth tables. That is, so that something like
>> tt(p and q);
will produce
p, q, p and q
T, T, T
T, F, F
F, T, F
F, F, F
To make things easy for ourselves, we shall include the variables
of the boolean expression in the function call, so as to save the
bother of parsing the expression to obtain its variables. And here
is such a program:
1 tt:=proc()
2 local i,j,n,l,ft,f,r,rf;
3 begin
4 if args(0) <= 1 then error("Must include all variables");
5 end_if;
6
7 ft:=[FALSE,TRUE];
8 n:=args(0)-1;
9 print(Unquoted,args(j)$j=2..args(0),expr2text(args(1)));
10
11 for j from 2^n-1 downto 0 do
12 f:=args(1);
13
14 for i from 1 to n do
15 l[i]:=floor(j/(2^(n-i))) mod 2;
16 end_for;
17
18 for i from 1 to n do
19 f:=subs(f,args(i+1)=ft[l[i]+1]);
20 end_for;
21
22 for i from 1 to n do
23 r[i]:=_if(l[i]=0,"F","T");
24 end_for;
25
26 rf:=_if(simplify(f,logic),"T","F");
27
28 print(Unquoted,r[i]$hold(i)=1..n,rf);
29 end_for;
30 end_proc:
Some points here: the value args(0) in lines 4
and 8 gives the number of arguments; the
expr2text function in line 9 simply returns a
string version of a given expression; the error
statement in line 4 immediately exits the procedure; the
_if command (lines 23 and 26) is a functional
form of the standard if statement. The rest of the program simply
lists all possible truth values for the variables (this is done in
lines 14 to 20), and prints them out, along with the value obtained
when those truth values are substituted into the function.
This program may be considered as skeletal only; for example, it does no type checking.
There are several ways of obtaining information about MuPAD: through the extensive on-line help facility, or from published articles.
A few MuPAD books are currently available, but I haven't seen one. The on-line documentation is excellent. It exists in two forms: plain ASCII (for use with MuPAD in terminal mode); and dvi with hyperlinks, when using MuPAD under X.
For ASCII, the help commands are obtained with a question mark:
>> ?<command>
will provide a few screens of information about <command>. Notice that this is the only MuPAD command which doesn't require a terminating colon or semicolon. The amount of documentation varies; but usually includes a basic description, some examples, and a list of related commands. Some help files are very large indeed; others very small. For example
>> ?stats::medianis short; it basically just tells you that this command returns the median of a list of values. However
>> ?Dom::Matrixis very long, with a detailed discussion about creation of matrices, and operations defined for matrices.
Information about a MuPAD library can be obtained with the info command; for example
>> info(numlib);
provides a list of all commands in the numlib library. You can also use
>> ?numlibto obtain a brief description of all of numlib's commands.
You can see the MuPAD programs which define a function with the use of expose. Again, programs vary greatly in length. For example
>> expose(length);
returns a short function defined by a six-line program, but
>> expose(D)returns a 164-line program. You can also use op to obtain information; again the amount given varies;
>> op(Dom::Matrix);returns all 1482 lines of the MuPAD program defining matrices.
The documentation for xmupad is provided in the form of a dvi file of the manual, with lots of hyperlinks. The manual can actually be read independently of MuPAD with the hypage command. As with the commands for starting MuPAD, this is a call to a shell script. However, hypage is started automatically with xmupad.
All the relevant documentation is provided in the form of hyTeX dvi files; that is, dvi files with embedded hyperlinks. If you are used to TeX and dvi viewers, this approach will seem very sensible: the mathematics is superbly typeset, as you'd expect, and there are plenty of included graphics. It may seem a bit odd at first to use a book (with all the trimmings: table of contents, chapters, an index) as the paradigm for on-line documentation, but in fact it works very well. And after all, everybody is familiar with the structure of a book, so there is no need to learn the particular exigencies and peculiarities of some new and strange help system.
The amount of information is superb. As well as discussions on all commands and functions, there are extensive chapters on graphics, programming, and debugging, as well as two excellent demos. Moreover, as well as the manual, there are hytex dvi files covering all the MuPAD libraries, as well a handy quick reference.
Once xmupad and hypage are up and running, the help command
>> ?<command>
will open up the manual at the relevant page. Once inside the manual, you can use the hyperlinks to travel through other similar commands. I find hypage very easy to use. If you have installed MuPAD, you should find this entire article redundant, as everything in it is covered in far greater depth in the manual.
A screen shot of hypage is shown in Figure 4.
Figure 4. Hypage—MuPAD's Graphics Hypertext Manual
However, I have a few niggles with hypage. The main one is that there is no way of changing the font size or page layout. If you reduce the size of the hypage window, for example, the text is not reformatted to fit the available window size, and so you have to use inconvenient scroll bars to view the text. This makes hypage nearly unworkable on a 640x480 VGA screen (such as on my laptop). Moreover, all the text is in the same colour (hyperlinks are given by underlines), which I find a bit dull. There also doesn't seem to be much in the way of keystroke movements. I found three (they aren't listed in the manual): p for previous page; f for forward, and r for return (to the linking page).
On the other hand, with a higher resolution screen, hypage is a delight to use.
Realizing the promise of Apache® Hadoop® requires the effective deployment of compute, memory, storage and networking to achieve optimal results. With its flexibility and multitude of options, it is easy to over or under provision the server infrastructure, resulting in poor performance and high TCO. Join us for an in depth, technical discussion with industry experts from leading Hadoop and server companies who will provide insights into the key considerations for designing and deploying an optimal Hadoop cluster.
Sponsored by AMD
If you already use virtualized infrastructure, you are well on your way to leveraging the power of the cloud. Virtualization offers the promise of limitless resources, but how do you manage that scalability when your DevOps team doesn’t scale? In today’s hypercompetitive markets, fast results can make a difference between leading the pack vs. obsolescence. Organizations need more benefits from cloud computing than just raw resources. They need agility, flexibility, convenience, ROI, and control.
Stackato private Platform-as-a-Service technology from ActiveState extends your private cloud infrastructure by creating a private PaaS to provide on-demand availability, flexibility, control, and ultimately, faster time-to-market for your enterprise.
Sponsored by ActiveState
| Speed Up Your Web Site with Varnish | Jun 19, 2013 |
| Non-Linux FOSS: libnotify, OS X Style | Jun 18, 2013 |
| Containers—Not Virtual Machines—Are the Future Cloud | Jun 17, 2013 |
| Lock-Free Multi-Producer Multi-Consumer Queue on Ring Buffer | Jun 12, 2013 |
| Weechat, Irssi's Little Brother | Jun 11, 2013 |
| One Tail Just Isn't Enough | Jun 07, 2013 |
- Speed Up Your Web Site with Varnish
- Containers—Not Virtual Machines—Are the Future Cloud
- Linux Systems Administrator
- Lock-Free Multi-Producer Multi-Consumer Queue on Ring Buffer
- Senior Perl Developer
- Technical Support Rep
- Non-Linux FOSS: libnotify, OS X Style
- UX Designer
- Web & UI Developer (JavaScript & j Query)
- RSS Feeds
- excellent
26 min 10 sec ago - good point!
29 min 1 sec ago - Varnish works!
38 min 8 sec ago - Reply to comment | Linux Journal
1 hour 7 min ago - Reply to comment | Linux Journal
3 hours 33 min ago - Reply to comment | Linux Journal
7 hours 33 min ago - Yeah, user namespaces are
8 hours 49 min ago - Cari Uang
12 hours 21 min ago - user namespaces
15 hours 14 min ago - yea
15 hours 40 min ago
Featured Jobs
| Linux Systems Administrator | Houston and Austin, Texas | Host Gator |
| Senior Perl Developer | Austin, Texas | Host Gator |
| Technical Support Rep | Houston and Austin, Texas | Host Gator |
| UX Designer | Austin, Texas | Host Gator |
| Web & UI Developer (JavaScript & j Query) | Austin, Texas | Host Gator |
Free Webinar: Hadoop
How to Build an Optimal Hadoop Cluster to Store and Maintain Unlimited Amounts of Data Using Microservers
Realizing the promise of Apache® Hadoop® requires the effective deployment of compute, memory, storage and networking to achieve optimal results. With its flexibility and multitude of options, it is easy to over or under provision the server infrastructure, resulting in poor performance and high TCO. Join us for an in depth, technical discussion with industry experts from leading Hadoop and server companies who will provide insights into the key considerations for designing and deploying an optimal Hadoop cluster.
Some of key questions to be discussed are:
- What is the “typical” Hadoop cluster and what should be installed on the different machine types?
- Why should you consider the typical workload patterns when making your hardware decisions?
- Are all microservers created equal for Hadoop deployments?
- How do I plan for expansion if I require more compute, memory, storage or networking?




Comments
Sellout
Mupad has been bought out by mathworks and all code is now under matlab (junk) licence.
any and all open source work is now dead.
Thankyou for a well written a
Thankyou for a well written article. TeXmacs acts as an excellent interface to mupad. I assume that the TeXmacs screen display generated by TeX. The graphics is generated by javaview. The combination of TeXmacs and javaview greatly enhance the mupad experience.