Carl Love

Carl Love

28095 Reputation

25 Badges

13 years, 101 days
Himself
Wayland, Massachusetts, United States
My name was formerly Carl Devore.

MaplePrimes Activity


These are answers submitted by Carl Love

To leave a space without printing the quote marks, use back quotes ` `. This is the character under the Escape on most US keyboards. It's also called accent grave. It has ASCII value 96. These quote marks do not appear in the pretty-printed output.

A conversion to algebraic normal form is available in the Logic package; it just goes by a different name: MOD2. It is part of command Canonicalize as option form= MOD2.

Logic:-Canonicalize(&not a, form= MOD2);

Logic:-Canonicalize(a &or b, form= MOD2);

In this form, XOR is represented by +, and AND is represented by juxtaposition/multiplication.

 

A command to plot the quadratic is

plot(x^2+2, x= -2..2);

There is no need to specify a y-range. However, note that the y-axis of the plot starts at 2, not 0. If you want it to start at 0, then you need to specify the y-range:

plot(x^2+2, x= -2..2, y= 0..6);

remove(t-> degree(t,x)=1, poly);

Use plot3d instead of implicitplot. You just need to take the lhs of your equations (equivalent to getting rid of the "=0" part). Note from the plot that there are vast regions of the b-c plane where the floating-point evaluation of your functions is 0. Now reduce the view. Redo the plot3d with option view= [-200..200, -200..200, -1..1]. The piecewise-linear nature of the plots leads me to believe that the numerical evaluation of your expressions is highly suspect, and thus the results of both implicitplot and DirectSearch (or any other numerical solver) are worthless.

See command fprintf. This lets you print exactly what you want to a file.

One way is to extract the data from the plot.

sol1:= dsolve(
     [diff(u(theta),theta) = 427.2461*u(theta)+385620.123/u(theta)-25671.3871,
      u(0) = .6
     ], numeric
):
plots[odeplot](sol1, 0..0.18, color = red):
A:= op([1,1], %);

A[1..10, 1..2];

There are two ways to "clear" a variable.

1.

unassign('a');

2.

a:= 'a';

In either case the single quotes are required.

@verdin The solution for the real and for the imaginary parts could be run in separate processes. This has the potential to cut your time in half. There is no obvious way to parallelize the individual solves, so I don't think that you could get any more savings than that.

Make your two equations to be solved into a list and apply Grid:-Map to it. This will run the solves in separate processes.

How about this. The key to emphasizing the inequality aspect is using plot option filled. I overlayed two copies of the plot so that I could have both the grid and the surface without the grid being black. The transparency option also serves to highlight the "solid" nature of the object being plotted (i.e., that it is more than a surface).

Fplot:= x^2*y, x= 0..1, y= 0..1, grid= [10$2], filled:
plots:-display(
     [plot3d(Fplot, style= wireframe), plot3d(Fplot, style= patchnogrid)],
     orientation= [130,65], axes= boxed,
     view= [(0..1) $ 3], transparency= 0.2
);


The mapping < 2, 2 > -> < 1, 1, 1 > and < 1, 4 > -> < 1, 2, 0 > is just a random choice made to make an example. The point of the wiki page is that once those two choices are made, the action of the mapping on any other vector in R^2 is determined.

It's a trivial application of LinearAlgebra:-LinearSolve:

d:= < <1,0,0> | <0,-2,0> | <1,0,1> >: #The basis from the wiki page.
Rep:= (D,v)-> LinearAlgebra:-LinearSolve(D,v);
Rep(d, <1,1,1>);

Here's an example to show what the results returned by DirectSearch:-SolveEquations mean and how to extract the individual results.


restart:

f,g:= 'randpoly([x,y]) + rand(0..99)()' $ 2;

-4*x^3*y-83*x^2*y^2-10*y^4+97*x^2-73*y^2-62*x+33, 72*x^3*y^2+37*x^2*y^3-23*x*y^4-92*x^4+6*x*y^3+74*y^4+58

Sol:= DirectSearch:-SolveEquations([f,g]);

Sol := [8.98117704412354*10^(-17), Vector(2, {(1) = 0.3667096848e-8, (2) = 0.8738659574e-8}), [x = 1.06474017545247, y = .656111069248074], 86]

The third component is the solutions, obviously. The second component is the vector of residuals:

eval(<f,g>, Sol[3]);

Vector(2, {(1) = 0.3667105730e-8, (2) = 0.8738652468e-8})

The first component is the sum of the squares of the residuals:

add(r^2, r in Sol[2]);

HFloat(8.98117704412354e-17)

The fourth component is the number of times that the system of equations was evaluated, which is verified below.

F:= proc(X,Y)
global Fcnt;
     Fcnt:= Fcnt+1;
     eval(f, [x= X, y= Y])
end proc:  

G:= proc(X,Y)  eval(g, [x= X, y= Y])  end proc:

Fcnt:= 0:

DirectSearch:-SolveEquations([F,G]);

[8.98500185640660*10^(-17), Vector(2, {(1) = 0.3667210646e-8, (2) = 0.8739263535e-8}), Vector(2, {(1) = 1.06474017545246, (2) = .656111069248073}), 86]

Fcnt;

86

The individual solutions can be extracted like this:

eval(x, Sol[3]); eval(y, Sol[3]);

HFloat(1.064740175452467)

HFloat(0.6561110692480737)

 

``


Download SolveEquations.mw

You need to split the inequality into two and use solve. Like this:

T:= 4477.25+.25*(t-32450):
solve({4477.25 <= T,T <= 16042.25}, t);

Use * to represent multplication:

y - y1 = m*(x - x1);

 

First 302 303 304 305 306 307 308 Last Page 304 of 395