I was not suggesting that the efficiency and efficacy of the higher-level built-in functions be abandoned. For real-world "production" use of course one wants them. I was merely lamenting the passing of an earlier age of simplicity.
For a first, sophomore-level linear algebra course, I've generally found that all one can do to hint at numerical issues and leave treating them to a more advanced course on numerical analysis.
Which reminds me that in an earlier era it was really simple to exhibit small-order linear systems where roundoff issues produced results with such a large error as to be for practical purposes useless. But with each successive release of Mathematica, it became harder and harder to produce such examples!
On Dec 3, 2012, at 1:59 PM, Andrzej Kozlowski <email@example.com> wrote:
> Actually, seemingly "simple" functions, like finding the rank of a matrix, are the ones that often benefit the most from a Kernel implementation because they are so often used (sometimes on huge data). Even then, it is useful to attract the students attention to issues of efficiency and choice of algorithm. In fact, however, the examples you chose are far from simple. Take a look at, for example, the option Method to NullSpace. There are actually three Methods (CofactorExpansion,DivisionFreeRowReduction,OneStepRowReduction) and each has advantages and disadvantages in different kind of situations. Investigating this itself would make an interesting task for students and, on the other hand, it would be rather too much to expect of users to implement all these different methods themselves and then test them to check which one works best for them. MatrixRank is also not so "simple", for example, it works with SparseArrays, it has options such as Tolerance etc. > > I don't think you are seriously suggesting that we should give up all this in order to provide more motivation to linear algebra students rather than try to think ourselves of better ways of motivating them. > > Andrzej > > > > On 3 Dec 2012, at 17:15, Murray Eisenberg <firstname.lastname@example.org> wrote: > >> Having a built-in function to do something, e.g., find rank of a matrix, tends to discourage students when they are asked to build up a function of their own that accomplishes the same thing beginning with more basic operations. They just don't appreciate the value of the exercise as a means to building and reinforcing their understanding. Moreover, it becomes too easy for them to check whether their own function works properly; without the higher-level function they formerly had to devise test cases and check their function's results by hand. >> >> >> On Dec 3, 2012, at 4:04 AM, Andrzej Kozlowski <email@example.com> wrote: >> >>> >>> On 2 Dec 2012, at 11:01, Murray Eisenberg <firstname.lastname@example.org> wrote: >>> >>>> However, I've always had mixed feelings as Mathematica has grown to >>>> build in more and more mathematical functions. At times this has taken >>>> the edge off what was a valuable exercise for my undergraduate students: >>>> defining more complicated functions -- e.g., div in vector analysis or >>>> nullSpace in linear algebra -- that forced students to understand the >>>> precise underlying definitions and algorithms. And it tended to take >>>> away a sense of power and accomplishment when students could start by >>>> defining the simplest kind of function, such as performing a single >>>> elementary row operation, and step-by-step building ever more >>>> complicated functions, culminating in something relatively >>>> sophisticated, such as finding the orthogonal projection of a vector >>>> upon the span of a given set of vectors, and even going further, such as >>>> using the latter to find the least-squares solution to an overdetermined >>>> linear system. >>> >>> But what stops you from continuing to do this once Mathematica has these >>> new functions? In fact, one of my favourite methods of teaching >>> Mathematica and mathematics at the same time is to ask students to >>> emulate with their own code some particular mathematical function that >>> exists in Mathematica. There is a great deal one can learn by doing this >>> sort of thing. The the existence of a Mathematica function in this >>> situation (particularly a well documented one) is actually a great
>>> bonus. Besides, of course, there is a difference between the needs of >>> teachers and those of researchers and other users - for many purposes >>> user defined functions are too inefficient for serious work (and even >>> more so when these users are not expert programmers). On a personal >>> level: I spend a great deal of my time developing mathematical >>> structures in Mathematica, but far from being dismayed when they are >>> made obsolete in new versions by more efficient built-in functions, I am >>> always happy and excited when this happens. This is because almost >>> always the existence of these new functions opens up new possibilities, >>> and quite often things that were quite unrealistic in earlier versions >>> become easy in a new one. From my perspective, the most exciting thing >>> about Mathematica 9 I have noticed so far is the ability to easily >>> simulate various stochastic processes with functions such as >>> RandomFunction, ContinousMarkovProcess, ItoProcess, etc. This alone is >>> worth the upgrade even though it makes many and perhaps most of my >>> contributions to the Wolfram Demonstrations Project obsolete. But that >>> it the price I am happy to pay as I can already see a number of new >>> things that I can now do with these functions that did not appear ever >>> worth attempting before. The same thing happened with the upgrade from >>> version 7 to 8, with the appearance of the FinancialDerivative function. >>> >>> The presence of these new functions in no way makes it more difficult to >>> teach students the algorithms behind them, but it also makes Mathematica >>> the best tool I know of for development and application of advanced >>> financial models, particularly in the area of derivative pricing (in >>> which I have been interested for many years). >>> >>> Of course anyone developing tools for Mathematica for commercial >>> purposes will have "mixed feelings" when Wolfram Research, with all the >>> advantages that it has, builds-in functions that make these tools >>> inefficient and obsolete. However, this is no different from the >>> experience of many developers of commercial software that suddenly finds >>> itself competing with functionality included in the operating system. I >>> have been a user of Apple Macs almost from the beginning and I remember >>> many times reading and hearing complaints from software developers about >>> "unfair" competition from Apple. But now we know that this process is >>> unstoppable and today a vast number of things that once used to need a >>> commercial (or shareware) program are now either done by the operating >>> system or by programs freely provided by Apple with the latest version >>> of Mac OS. (The same thing is true in the Microsoft world). Developers >>> of these programs have either given up or have found a way to add value >>> to their programs which is sufficiently large compared to what if >>> offered form free by Apple, to make them still worth their price to at >>> least some users. >>> >>> I will take this opportunity to respond to a typical "straw man" >>> argument in another response to this post. I am referring to "those who >>> say that Mathematica users should never buy a third party application". >>> I have never read anybody write anything so ridiculous in this forum so >>> I would like to see some references (if they exists). In fact, I myself >>> have purchased third-party applications which, not surprisingly, have >>> eventually become obsolete, but I would never give this as a reason
>>> against buying them. They more than paid back their price once and I
>>> also learned a lot from them. The point I have tried to make is this: >>> before a user decides to purchase a commercial package he should first >>> master enough Mathematica to judge whether the kind of things he wants >>> to do with it can be done without much effort with the standalone
>>> version or not. The decision should be his and it should be an informed >>> one. What I object to is habitual pouncing on new and obviously not
>>> fully informed users, without even fully finding out their real needs, >>> and suggesting or insinuating that they should bypass the necessary
>>> learning process by buying a commercial add on package. Also, even when >>> an add-on package is found useful, it should never be a reason for
>>> skipping the need to learn such things as basic syntax and the working >>> of the very basic (non mathematical) programming constructs. This is
>>> also the main reason why I am less than enamoured with packages that
>>> provide supposed "short-cuts", that often only appear to be such to
>>> people who have not mastered the foundations of the language. >>> >>> Andrzej Kozlowski >>> >> >> --- >> Murray Eisenberg email@example.com >> Mathematics & Statistics Dept. >> Lederle Graduate Research Tower phone 413 549-1020 (H) >> University of Massachusetts 413 545-2838 (W) >> 710 North Pleasant Street fax 413 545-1801 >> Amherst, MA 01003-9305 >> >> >> >> >>
--- Murray Eisenberg firstname.lastname@example.org Mathematics & Statistics Dept. Lederle Graduate Research Tower phone 413 549-1020 (H) University of Massachusetts 413 545-2838 (W) 710 North Pleasant Street fax 413 545-1801 Amherst, MA 01003-9305