roman_pearce

Mr. Roman Pearce

1678 Reputation

19 Badges

20 years, 218 days
CECM/SFU
Research Associate
Abbotsford, British Columbia, Canada

I am a research associate at Simon Fraser University and a member of the Computer Algebra Group at the CECM.

MaplePrimes Activity


These are replies submitted by roman_pearce

Maple's non-commutative algebra is limited to Ore algebras, where non-commutative expressions can be put into a canonical form. Since the kernel rearranges terms in a product, there is no way to implement this "natively" in Maple. You would have to write a whole package with its own data structure and operations. As far as I know, nobody has done that for abstract linear algebra. In any case "solving" would not be easy.
Maple's non-commutative algebra is limited to Ore algebras, where non-commutative expressions can be put into a canonical form. Since the kernel rearranges terms in a product, there is no way to implement this "natively" in Maple. You would have to write a whole package with its own data structure and operations. As far as I know, nobody has done that for abstract linear algebra. In any case "solving" would not be easy.
Correction: if you have a 64-bit machine with at least 2GB of ram you can actually construct 2^(2^32)-1 in Maple. Unfortunately you can not do anything with it other than hit the stack limit. I like to think that my invesigation would have squandered the entire world's computing capacity in 1965.
Correction: if you have a 64-bit machine with at least 2GB of ram you can actually construct 2^(2^32)-1 in Maple. Unfortunately you can not do anything with it other than hit the stack limit. I like to think that my invesigation would have squandered the entire world's computing capacity in 1965.
Maple doesn't really have anything good to handle this. The first problem is representing GF(2^32). Maple has the GF package, and you can construct GF(2^32) as follows:
G := GF(2,32);
However, you can't use this representation of the field to factor polynomials over the field. At the very least you get a way to represent the field.
g := G[extension];
alias(y=RootOf(convert(g,'polynom')));
Now you have a placeholder 'y' which represents elements of GF(2^32). You can check that y^32 is a linear combination of lower powers of y.
simplify(y^32);
Now you can construct polynomials in x with coefficients in Z_2[y]. You will have to factor and test irreducibility mod 2. ie:
f := x^3 + (y^2 + y + 1)*x  + (y+1);
Factor(f) mod 2;  # use to factor
Irreduc(f) mod 2;  # use to test irreducibility
At the very least, this will get you computing with polynomials whose coefficients are elements of GF(2,32). As for how to generate, say, a polynomial in Z_2[x,y] with order 2^(2^32)-1, you're on your own. Maple isn't even going to show me that number, probably because it has 1.3 billion decimal digits.
Maple doesn't really have anything good to handle this. The first problem is representing GF(2^32). Maple has the GF package, and you can construct GF(2^32) as follows:
G := GF(2,32);
However, you can't use this representation of the field to factor polynomials over the field. At the very least you get a way to represent the field.
g := G[extension];
alias(y=RootOf(convert(g,'polynom')));
Now you have a placeholder 'y' which represents elements of GF(2^32). You can check that y^32 is a linear combination of lower powers of y.
simplify(y^32);
Now you can construct polynomials in x with coefficients in Z_2[y]. You will have to factor and test irreducibility mod 2. ie:
f := x^3 + (y^2 + y + 1)*x  + (y+1);
Factor(f) mod 2;  # use to factor
Irreduc(f) mod 2;  # use to test irreducibility
At the very least, this will get you computing with polynomials whose coefficients are elements of GF(2,32). As for how to generate, say, a polynomial in Z_2[x,y] with order 2^(2^32)-1, you're on your own. Maple isn't even going to show me that number, probably because it has 1.3 billion decimal digits.

Maple isn't trying to access the internet, the interface and the kernel are communicating using a port on the local machine. It's a standard way for processes to communicate in the Unix world. For example, almost all graphical programs on Unix are built for X11. To run them you have to run an X11 server on your machine. This server opens port 6000 and programs send commands over that port to draw their windows and graphics. Windows and Mac OS X don't use ports to draw things on the screen, but they do allow programs to open ports and communicate over them. It's a standard model for allowing processes to communicate. Also, it's worth noting that Maple's ports aren't accessible to other programs, or to anyone on the internet. There are probably ways to make them accessible (for example, if you wanted to run the kernel on one machine and the interface on another), but I don't know enough about that to comment.

Maple isn't trying to access the internet, the interface and the kernel are communicating using a port on the local machine. It's a standard way for processes to communicate in the Unix world. For example, almost all graphical programs on Unix are built for X11. To run them you have to run an X11 server on your machine. This server opens port 6000 and programs send commands over that port to draw their windows and graphics. Windows and Mac OS X don't use ports to draw things on the screen, but they do allow programs to open ports and communicate over them. It's a standard model for allowing processes to communicate. Also, it's worth noting that Maple's ports aren't accessible to other programs, or to anyone on the internet. There are probably ways to make them accessible (for example, if you wanted to run the kernel on one machine and the interface on another), but I don't know enough about that to comment.

That's a brush off. These sorts of things happen on 10.3.9 too.
Here is an example: # first row is x values, second row is y values data := Matrix([[1, 3, 4, 7, 9], [2, 1, 3, -1, 0]]); # it is easier to work with the data in this format data := convert(LinearAlgebra:-Transpose(data), listlist); # x is the variable name to use in the curve definition C1 := CurveFitting[Spline](data, x, degree=1); # linear interpolation C2 := CurveFitting[Spline](data, x, degree=2); # quadratic C3 := CurveFitting[Spline](data, x, degree=3); # cubic P := plots[pointplot](data, symbol=circle): P1 := plot(C1, x=1..9): P2 := plot(C2, x=1..9): P3 := plot(C3, x=1..9): # look at first curve, second curve, etc plots[display](P,P1); plots[display](P,P2); plots[display](P,P3); # look at all the curves plots[display](P,P1,P2,P3);
Here is an example: # first row is x values, second row is y values data := Matrix([[1, 3, 4, 7, 9], [2, 1, 3, -1, 0]]); # it is easier to work with the data in this format data := convert(LinearAlgebra:-Transpose(data), listlist); # x is the variable name to use in the curve definition C1 := CurveFitting[Spline](data, x, degree=1); # linear interpolation C2 := CurveFitting[Spline](data, x, degree=2); # quadratic C3 := CurveFitting[Spline](data, x, degree=3); # cubic P := plots[pointplot](data, symbol=circle): P1 := plot(C1, x=1..9): P2 := plot(C2, x=1..9): P3 := plot(C3, x=1..9): # look at first curve, second curve, etc plots[display](P,P1); plots[display](P,P2); plots[display](P,P3); # look at all the curves plots[display](P,P1,P2,P3);
Short answer: use the dot operator `.` for times. Long answer: define your own operator:
TIMES := proc()
  local i, j;
   for i to nargs do
     if type(args[i],`+`) then
       return add(TIMES(args[1..i-1],j,args[i+1..-1]), j=args[i])
     end if;
   end do;
   'TIMES'(args);
end proc:
Then you would want it to display nicely, so you could do
`print/TIMES` := proc() local i;
 cat(args[1],seq(op([`*`,args[i]]), i=2..nargs)) 
end proc;
Finally you'd want to define your own operator for non-commutative powers.
POWER := proc(a,n::posint)
  if n=1 then a else TIMES(a,POWER(a,n-1)) end if;
end proc;
Not very efficient, but it does what you want. Try POWER(a+b,2);
I finally got around to checking this out, and it's quite interesting. For people who don't know what percolation theory is about, this link will introduce the topic. By the way, you might consider using a compression program like zip on your worksheet. The file I downloaded was 11 MB, and it compresses down to 60KB. I honestly don't know why Maple can't compress worksheets automatically.
You know, I've been using 10.02 since it was officially released and I'm really pleased with the small boost in Mac performance. Whenever you take the time to improve the performance of your software it shows that you are thinking about users. Nobody is really willing to pay for small performance improvements, but it makes a huge difference in how people perceive both your software and your company. Sluggish performance is right behind bugs on the list of user annoyances, and I'm glad to see the ongoing effort to improve Maple. Keep up the good work!
I'd like to see a demo of a Maple virus using autoexec code :) Sorry, couldn't resist. I'd be interested in a free session.
First 34 35 36 37 38 39 Page 36 of 39