Coffeescript-inspired syntax is nice, but unfortunately Matlab is clearly superior for anything mathematical than most other languages, so drawing some inspiration from it wouldn't hurt...
For example:
m1 = matrix([1, 2, 5],
[2, -1, 6],
[5, 10, -1])
why not adapt a simpler syntax for constructing multi-dimensional arrays:
Also, a special constructor for matrices and vectors is redundant - in a mathematical language, a list/array is the special case, not a matrix/vector. Besides, vectors are just a special case of matrices, no need to treat them differently, especially since the dot product is not overloaded in Calculize.
Matlab also wins by having a special syntax for matrix transpose. Now, this depends on the implementation ( AFAIK, Matlab doesn't actually transpose the matrix, it simply uses a different algorithm for further calculations), but would still be nice, since it's often useful (necessary) when trying to multiply matrices.
I don't think you should consider vectors a special case of matrices - that makes tensors difficult to handle. The other way around generalizes better.
> I don't think you should consider vectors a special case of matrices - that makes tensors difficult to handle. The other way around generalizes better.
I guess (from the first sentence) that you mean to regard matrices as a special case of tensors (which certainly generalises well), rather than of vectors (which is possible but ugly)?
No, I certainly do mean to regard matrices as a special case of vectors. While it's true that one rarely needs more than 3 dimensions to their array, I see no point in setting an upper limit.
Probably this is just a lapsus lingue, but what you are saying makes no sense.
Vectors are a special case of matrices, which are a special case of tensors (finally, scalars, which is just a fancy name for plain numbers, are a special case of vectors). Although there are many mathematical representation of all these objects (geometrical, functional, etc.), they can be written as multidimensional arrays (after selecting for a base).
Thus, scalars are 1x1 matrices, and a vector of size n is actually a nx1 matrix. Although a common high-school notation of a vector is x = (1, 2, 3), a vector is actually
x = [ 1
2
3 ]
Tensors are the extension of matrices to further dimensions.
What are the two dimensions of which you speak here? The 'row' and 'column' dimensions of a matrix? If so, that's exactly what tensors do: A matrix is a 2-tensor (better, a (1, 1)-tensor, but let's not get into that). If you want an m-dimensional generalisation, just use an m-tensor.
One major problem with any JS-based language for number crunching is JS' lack of any numeric types other than a double.
I don't know how well the string-based workarounds really work, for arbitrary precision math ... but I'd imagine that they wouldn't be terribly fast or convenient. It's a real shame.
Current versions of Firefox and Chrome have typed arrays, which add more numeric types for performance optimization. Hopefully we will see them in other browsers soon: https://developer.mozilla.org/en/javascript_typed_arrays
It would need lots and lots and lots of work before I would call it a fantastic teaching tool. For example, it is spectacularly naive at plotting functions. Even a relatively simple function such as 1/sin(x) already brings it to its knees.
I really like the look of this. I developed http://kayali.sf.net (Maxima/Qt based) and achieving such a clean look is very difficult. Having a web based app makes a lot of sense these days especially for students.
For example:
why not adapt a simpler syntax for constructing multi-dimensional arrays: Also, a special constructor for matrices and vectors is redundant - in a mathematical language, a list/array is the special case, not a matrix/vector. Besides, vectors are just a special case of matrices, no need to treat them differently, especially since the dot product is not overloaded in Calculize.Matlab also wins by having a special syntax for matrix transpose. Now, this depends on the implementation ( AFAIK, Matlab doesn't actually transpose the matrix, it simply uses a different algorithm for further calculations), but would still be nice, since it's often useful (necessary) when trying to multiply matrices.