There are lots of ways to program this. Some are easy to set up, but are probably not optimal for performance. Here are two easy ones.
IR := n -> ArrayTools:-FlipDimension(LinearAlgebra:-MatrixScalarMultiply(LinearAlgebra:-IdentityMatrix(n,compact=false),-1,inplace=true),2);
seq(IR(n), n=1..5);
IR2:=n->Matrix(n,n,(i,j)->`if`(i=n-j+1,-1,0));
seq(IR2(n), n=1..5);
acer
First things first. If you want to use < and > symbols in your posts, then enter then (without spaces or quotes) as "& l t ;" and "& g t ;". That's for marked up HTML posts here, which is the default. Alternatively, click on "Input format" just below the entry box and select a plain text format for the post.
Now, the Optimization package does purely numeric computation. So rather than have function V attempt a symbolic integral for every (E,a) pair, you can set it up to do purely numeric quadrature from the get go. It'd likely be more efficient.
Below, I set up OptE as a procedure that is gentle for plot(). If any particular Maximize() call returns unevaluated (as can possibly happen) then OptE returns the value undefined. plot() should handle that OK. Of course, if you wish to use the solutionmodule output method of Maximize, then all type checking I have to test that it has actually returned a numeric value would need to look slightly different.
Notice also that I put so-called unevaluation quotes around the V call, inside OptE. That's because otherwise the Maximize() routine would try to evaluate V(E,a) before finding out what any values of E were. It would then stop, with an error message. There are other ways of working around that issue.
V := (E,a) -> evalf(Int(-1/2*E*(-r+E)/r*((1/2*r)^(-1+a)*(1-1/2*r)^(-1+a)/Beta(a,a)),r = E .. 2,digits=10));
V(1,1);
OptE:=proc(a)
global V;
local result;
result := Optimization[Maximize]('V'(E,a),E=0..2);
if type(result,list) and type(rhs(op(op(2,result))),numeric) then
result := rhs(op(op(2,result)));
else
result := undefined;
end if;
end proc:
plot(OptE,0.5..1.0);
If you aren't concerned about plot() and handling any problematic return values from Maximize() then you could use simply this,
OptE:=a->rhs(op(op(2,Optimization[Maximize]('V'(E,a),E=0..2))));
If a V() call returns unevaluated (as could happen if the quadrature failed) then Maximize() would throw an error. You could guard against that by putting the Maximize() call within a try..catch:..end try clause and by having OptE return undefined in such a case.
acer
You assign to U,S, and Vt within the procedure. And doubtless those variables are declared as locals of the procedure (either explicitly by you, or implicitly, alongside a warning, by maple at the procedure creation moment).
But in that case, when U, S, and Vt are locals, they cannot be used in the SingularValues call as part of the 'output' options. The options processing of the SingularValues routine won't recognize them as valid.
But you should be able to use the global names instead. That is, use them like so,
output = [':-U', ':-S', ':-Vt']
You did the right thing, by quoting them, because those global names might have been assigned values, elsewhere. (For example, by running your example multiple times, outside of any procedure.)
It would be nice if the help-pages gave more examples where this was done.
acer
Your simpleftilde(x,0) will call ftilde(x,0), not f(x,0) as you seem to suggest.
And ftilde(x,0) will call f(0,0). But your defn of f has, inside it, 1/(x+lambda). So when x and lambda are both zero, evaluating that causes that exception.
acer
No, that notation does not usually mean that the function is linear. It might be linear, but it does not have to be.
Instead, it usually means that it is a scalar function from the reals to the reals. The domain is in the reals, and range is in the reals.
The sine function is an example, of an f:R->R.
acer
You might also find these of interest,
RootFinding:-Analytic(x^3-exp(x),x=-10-0.0001*I..10+0.0001*I);
Student:-Calculus1:-Roots(x^3-exp(x),numeric=true);
acer
f:=t->t^2:
solve({f(x)=4},x);
solve({f(x)=4,x>0},x);
acer
Several of those LinearAlgebra calls are not being done "in-place". So unnecessary Matrices are being produced, which is more garbage requiring collection than is necessary.
Note that every time one sees those "bytes used" messages in TTY Maple (or the bottom counters get updated in the GUI) there is garbage collection occuring. When bytesused goes up much faster than bytealloc, it usually means that a great deal of garbage is being produced. Garbage collection is relatively expensive, and very expensive compared to hardware numeric operations doen externally.
Also, the use of that RandomTools routine as the Matrix initializer doesn't seem best. I believe that using it (as posted, originally) involves many procedure calls. Maple procedure calls are very expensive. And those would return software float scalars, which will all become more garbage. But the Statistics package can populate a hardware datatype Vector, using compiled external code to generate the random numbers. And then ArrayTools may be used to copy such random hardware data (again using compiled external code) into the complex[8] Matrix, without any software floats being produced.
It may be possible to use ArrayTools:-Alias, as an alternative to some of my ArrayTools use below.
Does this code do the same thing? (I may have made mistakes.)
Feynman_random_rho := proc(N::posint, d::posint:=2)::'Matrix'(complex[8]);
local rho, temp, X, a, rtemp, temp2;
X := Statistics:-RandomVariable(Normal(0,1)):
temp := Matrix(d^N, d^N,datatype=complex[8]);
a:=Statistics:-Sample(X,d^N * d^N):
rtemp := ArrayTools:-ComplexAsFloat(temp);
ArrayTools:-Copy(d^N * d^N, a, 0 , 1, rtemp, 0, 2);
temp2 := Matrix(d^N, d^N,datatype=complex[8]);
a:=Statistics:-Sample(X,d^N * d^N):
rtemp := ArrayTools:-ComplexAsFloat(temp2);
ArrayTools:-Copy(d^N * d^N, a, 0 , 1, rtemp, 0, 2);
LinearAlgebra[Add](temp, temp2, 1,I,inplace=true);
rho := LinearAlgebra[HermitianTranspose](temp).temp;
LinearAlgebra:-MatrixScalarMultiply(rho,1/LinearAlgebra[Trace](rho),inplace=true);
end proc:
acer
One of the big differences between Maple and regular LaTeX is that the former is (almost) "What You See Is What You Get" while the latter is a scheme for markup that must usually be further processed prior to display.
That's a simplification, of course. There are WYSIWYG applications for LaTeX, some commerical and some free.
LyX is one of the older free ones. And Maple brings huge computer algebra functionality to the table.
In my experience, people really wanting fine-grained control of layout and typesetting often eventually need to resort to something with as much power as LaTeX (or even of its underlying engine, TeX). As soon as one encounters any special issues with a WYSIWYG editor, the question of finer control arises.
You named one such instance: programmatic control of typesetting, for entering symbols, say. A great many people do not consider that aspect, up front. So if it's a concern of major importance for you, then do get the right answers.
As far as I know, there is no mechanism for programmatically entering all the symbols that Maple knows how to typeset. And I don't know of any means for importing LaTeX or TeX into Maple, either. I'd be delighted to learn otherwise.
When Maple's "2D Math" suffices, it can save a great deal of time. It allows lots of nice, easily entered 2D Math typesetting. And it's wonderful to be able to immediately do symbolic calculations on that input. Maple also has abilities to convert expressions and worksheets to LaTeX.
There's very little that can provide the sort of fine, powerful, typesetting control that TeX does. Maybe you won't need to prepare photo-ready quality typesetting such as major journals need. Perhaps, if you got to that point, you could use Maple's exporting facilities to generate LaTeX from what you already had.
acer
There are several really nice texts on LaTeX. One that I've always enjoyed is _The LaTeX Companion_ by Goossens, Mittelbach, and Samarin. Look for the later edition.
There's lots online, to get you started. You might also enjoy this thorough
overview of TeX at wikipedia.
Leslie Lamport wrote LaTeX as a simplified, easier-to-use format of TeX. It is a delight to use: powerful, but straightforward. I doubt that you would regret learning it.
I suggest
CTAN as a good site, for getting started.
acer
To answer the question at the end of your post, no, use of subscripts need not mean use of indexed names.
If you toggle the subscripted object (input by typing, say, m_0) to be a unique name (distinct from m) then the later subs m=k will not affect it. You can convert the subscripted object into a unique name, distinct from m or indexed m, by using the context-sensitive menu on it.
Select just the object such as what you got from typing m_0, with the mouse, and then right click to activate the context-sensitive menus. Choose the context-menu action,
2D Math -> Convert To -> Atomic Identifier
acer
This reminds me of a pet peeve of mine. When I get email with .mw attachments, they always get corrupted by my ISP's webmail interface. I think that it may be related to XML as the format. I've seen three different webmail systems do this. It gets tiresome, having to ask people to resend their .mw attachments zipped, which works.
Now, somewhere I read that maplenet or some other thing can use a special compressed .mwz format. Since worksheets are not usually huge, maybe .mwz could be made the default worksheet format, as decompression on the fly wouldn't be so bad a penalty.
acer
?algcurve
That should pull up a related worksheet, in Maple 11.
There is a references section named "Related Information" at the bottom.
acer
eq:=x^3+x-1+0;
fsolve(eq);
Digits:=14:
fsolve(eq);
acer
with(LinearAlgebra):
A := RandomMatrix(2);
sol1 := MatrixFunction(A,cos(x),x);
# You are currently computing something like this?
# I presume that you meant to take the cosine of
# each of the eigenvalues in L?
# (Did you want normalization in P?)
evals,evecs := Eigenvectors(A):
sol2 := simplify( evecs . DiagonalMatrix(map(cos,evals)) . evecs^(-1) );
acer