acer

32505 Reputation

29 Badges

20 years, 11 days
Ontario, Canada

Social Networks and Content at Maplesoft.com

MaplePrimes Activity


These are answers submitted by acer

You have assigned an expression to the name `w`, not a procedure. So it's not appropropriate to then use `w` in a function call such as `w(x)`.

Like `plot` and `evalf(Int(...))` and several other commands, `fsolve` can work with either operator form (procedures, say) or expressions. Mixing these up is a common mistake (so don't feel bad about it).

Hence you could be calling fsolve like,

   fsolve(w = 0, x = kk .. kk+1);

instead of as your original,

   fsolve(w(x) = 0, x = kk .. kk+1);

You might get better performance here by using RootFinding:-NextZero instead of fsolve for this problem. For that you would need to produce an operator (procedure) by unapplying expression `w` with respect to name `x`. And then you could apply `NextZero` repeatedly, such as,

wf:=unapply(w,x):
RootFinding:-NextZero(wf,5);
                          6.584620042

RootFinding:-NextZero(wf,%);
                          12.72324078

RootFinding:-NextZero(wf,%);
                          18.95497141

Or you could use it in a fancier way, such as in my answer here.

Note also that your code using `fsolve` may be doing inadvertant duplication of attempts (when it fails to find a root), due to your particular check of whether `zz` is of type `float`. If you are running this code at the top level then your type check call type(zz,float) is going to repeat each failed attempt where `zz` is the unevaluated function call (to itself) that `fsolve` returns. This code would run faster if the check were like type(eval(zz,1), float) or if the computation were run within a procedure having local variable `zz` instead. The point is that full evaluation of the argument `zz` as the argument of the call to `type` will reevaluate those returned calls to fsolve and so also repeat the failing computations. See here for some notes on this.

acer

Change the instance of Textfield[TFxv] to TextField[TFxv] to correct the typo.

acer

Try it as,

int(diff(w(s),s,s),s=0..L,continuous);

You may wish to convert a result involving both `diff` and `D` to just one or the other.

acer

restart:

assume(x>0,1>x):

L:=[x^3,x^4,x^2,x,1,0];

                            [  3    4    2          ]
                       L := [x~ , x~ , x~ , x~, 1, 0]

sort( L ); # the usual, and not what is wanted

                          [            2    3    4]
                          [0, 1, x~, x~ , x~ , x~ ]

sort( L, (a,b)->is(a<b) );

                          [     4    3    2       ]
                          [0, x~ , x~ , x~ , x~, 1]

sort( L, (a,b)->is(a>b) );

                          [         2    3    4   ]
                          [1, x~, x~ , x~ , x~ , 0]

acer

That should be sin(x) not sinx.

acer

Those should be single left quotes in that call to lprint, but you appear to have them as single right quotes.

You could also do the printing by using printf instead of lprint, ie, replace

lprint(r1, `=`, q, `*`, r2, `+`, r3);

by, say,

printf("%a = %a * %a + %a\n", r1,q,r2,r3);

acer

restart:

MyHandler := proc(operator,operands,default_value)
   NumericStatus( division_by_zero = false );
   return infinity;
end proc:

NumericEventHandler(division_by_zero=MyHandler):

for i in {1, 2/0, -3, 1/4, 5} do
if i::posint then print(i)  fi;
od;

                               1
                               5

select(x->is(x::posint), {1, 2/0, -3, 1/4, 5});

                             {1, 5}

acer

So, something like this?

restart:

lambda0:=PL-R3*x:
Psi0:=PL+R3*S0*(R1-1)-R1*R3*x:
S0:=(Q-1)/Q:

P:=piecewise(x<S0,lambda0,x>S0,Psi0):

plot3d(eval(P,[R3=-5,k=4,R1=0.0006,Q=1.2]),x=0..1,PL=0..1,labels=[x,PL,'P']);

acer

You could try simplification with side relations, ie, see ?simplify,siderels

restart:

ee:=-1/4*m*omega*sin(1/2*omega*T)*(2*cos(1/2*omega*T)^2*xa^2      
    +2*cos(1/2*omega*T)^2*xb^2-xa^2-2*xa*xb-xb^2)/                
    (cos(1/2*omega*T)^2-1)/cos(1/2*omega*T):                      

EE:=simplify(combine(simplify(simplify(ee,                        
             {cos(omega*T/2)^2-1=-sin(omega*T/2)^2}),size)),size);

                                  2     2
                      omega m ((xa  + xb ) cos(omega T) - 2 xa xb)
            EE := 1/2 --------------------------------------------
                                      sin(omega T)

length(ee), length(EE);

                                   247, 113

acer

It's not clear to me whether you also want to keep the collection of scalar products by assigning that to some variable name, or whether you are just interested in the final sum. Below, I presume the latter, but let us know if that's not the case.

If you are asking how to sum all the entries of the elementwise product of Matrices A and B then there are several ways, including,

add(x, x in A*~B);

add(x, x in zip(`*`,A,B));

add( add( A[i,j]*B[i,j], i=1..N), j=1..N );

convert(A,Vector) . convert(B,Vector);

That last way above is slower for default datatype=anything Matrices but faster for datatype=float[8] Matrices.

acer

See the help-page for the interface command, and in particular the setting for warnlevel on thay page.

By invoking interface(warnlevel=1) or interface(warnlevel=0) the warnings about implicitly declared locals should be suppressed.

It's a better idea to declare your locals explicitly, rather than to suppress such warnings. If you leave them only implicitly declared then future readers of your code (a course instructor, colleague, or even you) may be left wondering whether you intended them as locals or as globals and whether your code functions as intended.

acer

You can comstruct an assembly of Embedded Components (Sliders, etc) which does this.

A worksheet with such components can also be run in the free MaplePlayer. Perhaps you can convince your administrator to allow the free player to be installed on the computer connected to the classroom's overhead projector.

One convenient way to construct such Embedded Components in Maple 17, as in your simple case, is to use the Explore command with the invocation shown below.

The attached worksheet looks better in Maple (than it does with its picture inlined into this Answer). It has three Sliders in its bottom half.

 

Explore( plots:-display(plottools:-circle([cx,cy],radius,color=red),
                        view=[-10..10,-10..10]),
         parameters=[cx=-10.0..10.0,cy=-10.0..10.0,radius=0.0..10.0],
         initialvalues=[cx=0.0,cy=0.0,radius=5.0] );

cx:

cy:

radius:

 

 

``

 

Download simplecircle.mw

 

The worksheet that uses Explore for Maple 17 is at the link above.

You could also build such a simple assembly by hand. It's very similar to some introductory examples on Embedded Components in the Help system. Here is one version as another attachment, in the link below. It's assembly of components was constructed by hand. This should run, as is, in Maple 17, 16,.. ,13, 12.

manualcircle.mw

acer

I'm not completely sure how your data is meant to be interpreted. Perhaps I've understood your intention, for what I show below.

I don't show how to obtain an interpolatory bivariate polynomial in the explicit sense. Instead I show how to create a procedure `f` which can be used to interpolate at any (x,y) point. Hence you should be able to call `f` at points of your own choice. I show how it can be used to produce a 3D plot, for example.

Is there a typo in your list `c`? Did you mean for its second entry to be -0.87 say?

(For some reason only the first portion of my attached worksheet is being inlined into this answer. Let me know if you cannot load and see the whole thing.)

restart:

a := [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:

b := [ 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,
       0.011, 0.011, 0.011, 0.011, 0.011, 0.011, 0.011, 0.011, 0.011, 0.011]:

c := [ -0.88, -0.87, -0.86, -0.82, -0.77, -0.71, -0.66, -0.62, -0.57, -0.54,
       -0.89, -0.88, -0.85, -0.81, -0.76, -0.71, -0.66, -0.61, -0.57, -0.53]:

# It's convenient to use a slightly different form of the data.

A:=Vector(a[1..10]):
B:=Vector([b[1],b[11]]):
C:=LinearAlgebra:-Transpose(Matrix(2,10,c)):

plots:-surfdata(C, 1..10, 0.001..0.011,
                orientation=[-111,83,-14], labels=[x,y,z]);

# Create a procedure `f` which can interpolate at a given (x,y) point.

f:=proc(x,y,K::identical(cubic,linear,spline):=spline)
   if not type(x,numeric) and type(y,numeric) then
      return 'procname'(args);
   end if;
   CurveFitting:-ArrayInterpolation([A,B],C,Array([[[x,y]]]),
                                    'method'=K)[1,1];
end proc:

# We can visually compare the effects of various interpolation schemes.
# Note how the first plot differs from the other two.

plots:-display(Array([
   plot3d('f(x,y,linear)',x=1..10,y=0.001..0.011),
   plot3d('f(x,y,cubic)',x=1..10,y=0.001..0.011),
   plot3d('f(x,y,spline)',x=1..10,y=0.001..0.011)
                      ]),
               glossiness=0.2, lightmodel=Light1,
               orientation=[-111,83,-14]);

 

Download inter3dexample.mw

acer

I'm not sure whether this is coursework, and whether you are supposed to be able to show it manually (ie. without using Maple). If so, then you may be able to do these steps by hand.

restart:

# For posint N, you could try showing this manually.
b := Product(5^(1/2^k)+1, k=1..N) = Sum(5^((i-1)/(2^N)),i=1..2^N):

XN := 4/Product(5^(1/2^k)+1, k= 1..N);

                                         4          
                         XN := ---------------------
                                   N     / /1 \    \
                               ,--------'| |--|    |
                                  |  |   | | k|    |
                                  |  |   | \2 /    |
                                  |  |   \5     + 1/
                                  |  |              
                                 k = 1  
            
subs(b,XN);

                                     4       
                               --------------
                                  N          
                                 2    /i - 1\
                               -----  |-----|
                                \     |  N  |
                                 )    \ 2   /
                                /    5       
                               -----         
                               i = 1 
        
# But now that's just a simple geometric sum.
# You should be able to get the following without Maple.
simplify(value(%)) assuming N::posint;

                                 / (-N)\    
                                 \2    /    
                                5        - 1

x := eval(%, N=4);
                                    (1/16)    
                              x := 5       - 1

(%+1)^48;
                                     125

acer

restart:
en:=Sum((sqrt(a*k^3+b*k^2+c*k+1)-sqrt(a*k^3+b*k^2+c*k))^(1/3),k=0..n-1):

# First, find a,b,c

value(eval(en-sqrt(n),n=2)):
s2:=solve(%):
e2:=simplify(eval(en,s2)):
value(eval(e2-sqrt(n),n=3)):
s3:=simplify(solve(%)):
e3:=simplify(eval(e2,s3)):
value(eval(e3-sqrt(n),n=4)):
s4:=simplify(solve({%})):
sol:=solve(s2 union s3 union s4);
                    {a = 16, b = 24, c = 9}
Z:=eval(en,sol):

# And now, by induction, show true for all n::posint

value( eval(Z-sqrt(n),n=1) );

                               0

value( combine( (Z=sqrt(n)) - eval(Z=sqrt(n),n=n-1) ) ):
lhs(%)^3 - rhs(%)^3:
simplify(%) assuming n::posint, n>1;

                               0

acer

First 248 249 250 251 252 253 254 Last Page 250 of 337