Maple Questions and Posts

These are Posts and Questions associated with the product, Maple

This post is motivated by a question asked by @vs140580  ( The program is making intercept zero even though There is a intercept in regression Fit (A toy code showing the error attached) ).

The problem met by @vs140580 comes from the large magnitudes of the (two) regressors and the failure to Fit/LinearFit to find the correct solution unless an undecent value of Digits is used.
This problem has been answerd by @dharr after scaling the data (which is always, when possible, a good practice) and by 
myself while using explicitely the method called "Normal Equations" (see https://en.wikipedia.org/wiki/Least_squares).

The method of "Normal Equations" relies upon the inversion of a symmetric square matrix H whose dimension is equal to the number of coefficients of the model to fit.
It's well known that this method can potentially lead to matrices H extremely ill-conditionned, and thus face severe numerical problems (the most common situation being the fit of a high degree polynomial).
 

About these alternative methods:

  • In English: http://www.math.kent.edu/~reichel/courses/intr.num.comp.1/fall09/lecture4/lecture4.pdf
  • In French: https://moodle.utc.fr/pluginfile.php/24407/mod_resource/content/5/MT09-ch3_ecran.pdfI


The attached file illustrates how the QR decomposition method works.
The test case is @vs140580's.

Maybe the development team could enhance Fit/LinearFit in future versions by adding an option which specifies what method is to be used?

 

restart:

with(Statistics):

interface(version)

`Standard Worksheet Interface, Maple 2015.2, Mac OS X, December 21 2015 Build ID 1097895`

(1)

Data := Matrix([[4.74593554708566, 11385427.62, 2735660038000], [4.58252830679671, 25469809.77, 12833885700000], [4.29311160501838, 1079325200, 11411813200000000], [4.24176959154225, 1428647556, 18918585950000000], [5.17263072694618, 1428647556, 18918585950000000], [4.39351114955735, 1877950416, 30746202150000000], [4.39599006758777, 1428647556, 18918585950000000], [5.79317412396815, 2448320309, 49065217290000000], [4.48293612651735, 2448320309, 49065217290000000], [4.19990181982522, 2448320309, 49065217290000000], [5.73518217699046, 1856333905, 30648714900000000], [4.67943831980476, 3071210420, 75995866910000000], [4.215240105336, 2390089264, 48670072110000000], [4.41566877563247, 3049877383, 75854074610000000], [4.77780395369828, 2910469403, 74061327950000000], [4.96617430604669, 1416936352, 18891734280000000], [4.36131111330988, 1416936352, 18891734280000000], [5.17783192063198, 1079325200, 11411813200000000], [4.998266287191, 1067513353, 11402362980000000], [4.23366152474871, 2389517120, 48661380410000000], [4.58252830679671, 758079709.3, 5636151969000000], [6.82390874094432, 1304393838, 14240754750000000], [4.24176959154225, 912963601.2, 8621914602000000], [4.52432881167557, 573965555.4, 3535351888000000], [4.84133601918601, 573965555.4, 3535351888000000], [6.88605664769316, 732571773.2, 5558875538000000], [4.35575841415627, 1203944381, 13430693320000000], [4.42527441640593, 955277678, 8795128298000000], [6.82390874094432, 997591754.9, 8968341995000000], [4.35144484433733, 143039477.1, 305355143300000]]):

# Direct use of LinearFit.
#
# As far as I know LinearFit is based on the resolution of the "Normal Equations"
# (see further down), a system of equations that is known to be ill-conditioned
# when regressors have large values (in particular when polynomial regression
# is used).

X := Data[.., [2, 3]]:
Y := Data[.., 1]:


LinearFit(C1+C2*v+C3*w, X, Y, [v, w]);

Warning, model is not of full rank

 

HFloat(6.830889923844425e-9)*v-HFloat(2.275143726335622e-16)*w

(2)

# For roundoff issues the 3-by-3 matrix involved in the "Normal Equations" (NE)
# appears to of rank < 3.
# The rank of this matrix is rqual to 1+rank(X) and one can easily verify that
# the 2 columns of X are linearly independent:

LinearAlgebra:-LinearSolve(X, Vector(numelems(Y), 0));
LinearAlgebra:-Rank(X);

 

Vector[column]([[0.], [-0.]])

 

2

(3)

# Solve the least squares problem by using explicitely the NE.
#
# To account for an intercept we augment X by a vector column of "1"
# traditionally put in column one.
Z := `<|>`(Vector(numelems(Y), 1), X):  
A := (Z^+ . Z)^(-1) . Z^+ . Y;          # Normal Equations

A := Vector(3, {(1) = 4.659353816079307, (2) = 0.5985084089529947e-9, (3) = -0.27350964718426345e-16}, datatype = float[8])

(4)

# What is the rank of Z?
# Due to the scale of compared to "1", Rank fails to return the good value
# of rank(Z), which is obviously equal to rank(X)+1.

LinearAlgebra:-LinearSolve(Z, Vector(numelems(Y), 0));
LinearAlgebra:-Rank(Z);

Vector[column]([[0.], [0.], [-0.]])

 

2

(5)


A WORKAROUND : SCALING THE DATA

model := unapply( LinearFit(C1+C2*v+C3*w, Scale(X), Scale(Y), [v, w]), [v, w] );

proc (v, w) options operator, arrow; -HFloat(1.264691577813453e-15)+HFloat(0.6607154853418553)*v-HFloat(0.8095150669884322)*w end proc

(6)

mX, sX := (Mean, StandardDeviation)(X);
mY, sY := (Mean, StandardDeviation)(Y);

mX, sX := Vector[row](2, {(1) = 1447634550.7963333, (2) = 24441399854567932.}, datatype = float[8]), Vector[row](2, {(1) = 871086770.7242773, (2) = 23354440973344224.}, datatype = float[8])

 

HFloat(4.857279402730572), HFloat(0.789073010656694)

(7)

MODEL := model((x1-mX[1])/sX[1], (x2-mX[2])/sX[2]) * sY + mY

HFloat(4.659353816079309)+HFloat(5.985084089530032e-10)*x1-HFloat(2.7350964718426736e-17)*x2

(8)

# Check that the vector of regression coefficients is almost equal to A found above
# relative error lesst than 10^(-14)

A_from_scaling       := < coeffs(MODEL) >:
Relative_Discrepancy := (A_from_scaling - A) /~ A

Relative_Discrepancy := Vector(3, {(1) = 0.5718679809000842e-15, (2) = 0.14166219140514066e-13, (3) = 0.14308415396983588e-13}, datatype = float[8])

(9)


THE QR DECOMPOSITION  (applied on raw data)

The QR decomposition, as well as Given's rotation method, are two alternatives to the the NE method
to find the vector of regression coefficients.
Both of them are known to be less sensitive to the magnitudes of the regressors and do nt require (not
always) a scaling of the data (which can be quite complex with polynomial regression or when some
transformation is used to liearize the statistical model, for instanc Y=a*exp(b*X) --> log(Y)=log(a)+b*X).

N := numelems(Y);
P := numelems(Z[1]);

30

 

3

(10)

# Perform the QR decomposition of Z.

Q, R := LinearAlgebra:-QRDecomposition(Z, fullspan);

Q, R := Vector(4, {(1) = ` 30 x 30 `*Matrix, (2) = `Data Type: `*float[8], (3) = `Storage: `*rectangular, (4) = `Order: `*Fortran_order}), Vector(4, {(1) = ` 30 x 3 `*Matrix, (2) = `Data Type: `*float[8], (3) = `Storage: `*triangular[upper], (4) = `Order: `*Fortran_order})

(11)

# Let C the column vector of length P defined by:

C := (Q^+ . Y)[1..P];

C := Vector(3, {(1) = -26.6044149698075, (2) = -.517558353158176, (3) = -.881007519371895})

(12)

# Then the vector of regression coefficients is given by:

A_QR                 := (R[1..P, 1..P])^(-1) . C;
Relative_Discrepancy := (A_QR - A) /~ A

A_QR := Vector(3, {(1) = 4.65935381607931, (2) = 0.5985084090e-9, (3) = -0.2735096472e-16})

 

Relative_Discrepancy := Vector(3, {(1) = 0.3812453206e-15, (2) = 0.1105656128e-13, (3) = 0.1216778632e-13})

(13)

# The matrix H = Z^+ . Z writes

H                    := Z^+ . Z:
H_QR                 := R^+ . Q^+ . Q . R:
Relative_Discrepancy := (H_QR - H) /~ H

Relative_Discrepancy := Matrix(3, 3, {(1, 1) = -0.1184237893e-15, (1, 2) = 0., (1, 3) = -0.3491343943e-15, (2, 1) = 0., (2, 2) = 0.1930383052e-15, (2, 3) = 0.3369103254e-15, (3, 1) = -0.1745671971e-15, (3, 2) = -0.5053654881e-15, (3, 3) = -0.1366873891e-15})

(14)

# H_QR expression is required to obtain the covariance matrix of the regression coefficients.


 

Download LeastSquares_and_QRdecomposition.mw


 

 

To illustrate, here is an HTML example that overlays a circle and a letter

<span style="position: relative; font-size: 2em;">&#x25CB;<span style="position: absolute; top: 1.0em; right: 0.4em; font-size: 0.4em;">Y</span></span>

than can be pasted here to visualize.

I am not sure if that is possible with Maples typesetting tags.

Hello everyone!

I have an expression for the resonant frequency in terms of some geometric paremeter, say "x", i.e. f(x). I want to plot it together with the resonant wavelength (lambda=c/f) in the same plot. The "dualaxisplot" produces two curves (f(x), lambda(x)) with two uniform axes to the left and to the right. I am wondering is there a reasonably simple way to make it look as one curve, but with the second (e.g. lambda) axes nonuniformely scaled to fit the curve f(x)?

Many thanks in advance for your suggestions!

restart;

Frac_C := proc (expr, a, t, alpha) local ig, m, tau;

m := ceil(alpha);

ig := (t-tau)^(m-alpha-1)*(diff(eval(expr, t = tau), tau$m));

`assuming`([(int(ig, tau = a .. t))/GAMMA(m-alpha)], [a < t]);

end proc;
r := .5;

k := .7;

eq1 := Frac_C(x, 0, t, r)-y(t) = 0;

eq2 := Frac_C(y, 0, t, k)-x(t)-2*t = 0;

eq3 := x(0)-y(1) = 0;

eq4 := Frac_C(x, 0, t, r)-(eval(diff(y(x), x), x = 1)) = 0;

eq5 := Frac_C(x, 0, t, r)-(eval(diff(y(x), x, x), x = 1)) = 0;

eq6 := eval(diff(y(x), x), x = 0)-x(1)-2 = 0;

eq7 := y(0) = 0;

N := 5;

x[c] := [seq(a[i], i = 0 .. N)];

y[c] := [seq(b[i], i = 0 .. N)];

for n to N do

subs([seq(x(i) = x[c][i], i = 0 .. n), seq(y(i) = y[c][i], i = 0 .. n)], {eq1, eq2, eq3, eq4, eq5, eq6, eq7});
soln := solve({eq3, eq4, eq5, eq6, eq7, seq(coeff(lhs(eq), t, j) = 0, eq in {eq1, eq2})}, {a[n+1], b[n+1]});

x[c][n+1] := eval(a[n+1], soln);

y[c][n+1] := eval(b[n+1], soln);

end do;

x[s] := add(x[c][i]*t^(i-1), i = 1 .. N+1);

y[s] := add(y[c][i]*t^(i-1), i = 1 .. N+1);

x[s];

y[s];

Hi, i want to calculate fourier transform of functions with fractional powers. how can i do this? for example what is fourier transform of sqrt(x) ? I want a function or an expression as output, not the inetgral itself. thnx in advance

restart:with(inttrans):

f := x -> x^(1/2);
int(f(x)*exp(-I*w*x), x = -infinity .. infinity);

proc (x) options operator, arrow; x^(1/2) end proc

 

int(x^(1/2)*exp(-I*w*x), x = -infinity .. infinity)

(1)

fourier(f(x),x,w)

fourier(x^(1/2), x, w)

(2)

 

 

Download fracfourier.mw

How can I export data from the plot? Following is my Maple code.

 

restart;
with(PDEtools);
v_0 := 1;
vstar := 10;
r_0 := 1;
k := 0.1;
m := 0.1;
PDE := diff(v(r, t), t) = k*(diff(v(r, t), r, r) + diff(v(r, t), r)/r);
                                                / d         \
                           /  2         \   0.1 |--- v(r, t)|
          d                | d          |       \ dr        /
  PDE := --- v(r, t) = 0.1 |---- v(r, t)| + -----------------
          dt               |   2        |           r        
                           \ dr         /                    

ans := pdsolve(PDE, HINT = f(r)*g(t));
                             /                            
                             |                            
                             |                            
ans := Typesetting:-mcomplete|vApplyFunction(rt)equalsf__1
                             |                            
                             |                            
                             \                            

                                              //               
                                              ||               
                                              ||DifferentialD  
  ApplyFunction(r) f__2ApplyFunction(t) where ||-------------- 
                                              ||DifferentialDt 
                                              \\               

  f__2ApplyFunction(t)equals0.1 f__2ApplyFunction(t) _c[1]

               2                                                 
  DifferentialD                                                  
  --------------- f__1ApplyFunction(r)equals1. f__1ApplyFunction(
                2                                                
  DifferentialDr                                                 

                /DifferentialD                      \//  
             1. |-------------- f__1ApplyFunction(r)|||  
                \DifferentialDr                     /||  
  r) _c[1] - ----------------------------------------||, 
                                r                    ||  
                                                     \\  

                    /[           /                           [ /
                    |[           |                           [ |
                    |[           |                           [ |
  Typesetting:-_Hold|[PDESolStruc|v(r, t) = f__1(r) f__2(t), [< 
                    |[           |                           [ |
                    |[           |                           [ |
                    \[           \                           [ \

   d                               
  --- f__2(t) = 0.1 f__2(t) _c[1], 
   dt                              

                                       / d         \\ ]\]\\
    2                               1. |--- f__1(r)|| ]|]||
   d                                   \ dr        /| ]|]||
  ---- f__1(r) = 1. f__1(r) _c[1] - ---------------- >]|]||
     2                                     r        | ]|]||
   dr                                               | ]|]||
                                                    / ]/]//


build(ans);
                  /1         \             /           (1/2)  \
v(r, t) = c__3 exp|-- _c[1] t| c__1 BesselJ\0, (-_c[1])      r/
                  \10        /                                 

             /1         \             /           (1/2)  \
   + c__3 exp|-- _c[1] t| c__2 BesselY\0, (-_c[1])      r/
             \10        /                                 


design;
BC1 := eval(v(r, t) - v_0 = 0, r = 20);
                    BC1 := v(20, t) - 1 = 0

BC2 := D[1](v)(0, t) = 0;
                    BC2 := D[1](v)(0, t) = 0

NULL;
IC := v(r, 0) = v_0 + (vstar - v_0)*exp(-0.5*(r - r_0)^2/m^2)/(m*sqrt(2*Pi));
                                    (1/2)    /            2\
   IC := v(r, 0) = 1 + 25.38853126 2      exp\-50. (r - 1) /

conds := {BC1, BC2, IC};
              /                  
    conds := { v(20, t) - 1 = 0, 
              \                  

                                 (1/2)    /            2\  
      v(r, 0) = 1 + 25.38853126 2      exp\-50. (r - 1) /, 

                       \ 
      D[1](v)(0, t) = 0 }
                       / 


answer:=pdsolve(PDE,conds,HINT=);
Error, invalid =
Typesetting:-mambiguous(answerAssignpdsolveApplyFunction(PDEcomma

  condscommaTypesetting:-mambiguous(HINTequalslowast, 

  Typesetting:-merror("invalid =")))semi)


u := r -> v_0 + (vstar - v_0)*exp((-1)*0.5*(r - r_0)^2/m^2)/(m*sqrt(2*Pi));
u := proc (r) options operator, arrow, function_assign; 

   v_0+(vstar-v_0)*exp(-.5*(r-r_0)^2/m^2)/(m*sqrt(2*Pi)) end proc


plot(u(r), r = 0 .. 10);

conds := {BC1, BC2, IC};
              /                  
    conds := { v(20, t) - 1 = 0, 
              \                  

                                 (1/2)    /            2\  
      v(r, 0) = 1 + 25.38853126 2      exp\-50. (r - 1) /, 

                       \ 
      D[1](v)(0, t) = 0 }
                       / 


BCs := {BC1, BC2};
          BCs := {v(20, t) - 1 = 0, D[1](v)(0, t) = 0}

pde_solve = pdsolve(PDE, BCs, IC);
solution := pdsolve(PDE, conds, numeric);
                  solution := _m1440390954528

t1 = 0 .. 10;
r1 = 0 .. 10;
solution, t1, r1;
                        solution, t1, r1

sol := pdsolve(PDE, conds, numeric, time = t, range = 0 .. 20, spacestep = 0.1, timestep = 0.1);
                     sol := _m1440421519392

sol:-animate(t = 0 .. 20, frames = 100);

M := sol:-value();

sol:-plot3d(r = 0 .. 10, t = 0 .. 20);

I have give this below fit command my data is only continous data either positive or negative float data. Their never any complex number at all.

I use the below fit command

Error, complex argument to max/min

It can be observed it is running into error in C1 I dont know why can someone suggest where should I check and why is this happening kind help.   In Excel we can see the intercept coming big.

 

I attach the toycode to see the error I get too

toycode.mw

I want to know the exponent of one particular factor of an integer. For example:

k:=24;

ifactor(k) = (2)^3(3)

and I want to write a module to extract the exponent of (3) for any arbitrary k.

I can't select for the presence of 3 because it will pick up the factor (2)^3 and then it gets complicated to decide that I don't want this factor anyway.

If I somehow manage to select the factor (3) using "op" and scanning through each factor in turn, then substitute 3=x, it turns out that degree(%,x) doesn't work because the factor x is enclosed in brackets; similarly trying

log(%,3) fails for the same reason.

There has to be a simple way, but I just don't see it.

Any suggestions are appreciated.

In GraphTheory ,how do you make more than one edge between two points.

Could you help me to solve this problem for the parameter beta?

restart;

e1:= 0.5; e2:=0.2;theta:=5;yeq:=e2;

.5

 

.2

 

5

 

.2

(1)

f:=(theta*x-1)*(1-x)*(1+beta*x^2)-y;
g:=x/(1+beta*x^2); gs:=unapply(g,x);

(5*x-1)*(1-x)*(beta*x^2+1)-y

 

x/(beta*x^2+1)

 

proc (x) options operator, arrow; x/(beta*x^2+1) end proc

(2)

fs:=subs(y=yeq,f);

(5*x-1)*(1-x)*(beta*x^2+1)-.2

(3)

assumptions:=x>1/theta, x<1,beta>0,beta<1,gs(x)>e1;
solve(fs=0,x,useassumptions) assuming assumptions;

1/5 < x, x < 1, 0 < beta, beta < 1, .5 < x/(beta*x^2+1)

 

Warning, solve may not respect assumed property 'real' on 'x/(beta*x^2+1)'.

 

Error, (in type/realcons) too many levels of recursion

 

gs2:=subs(beta=0.6,gs(x));

x/(.6*x^2+1)

(4)

sol:= solve(subs(beta=0.6,fs=0),x,useassumptions) assuming x>1/theta, x<1;

.2514854589, .9665623271

(5)

subs(x=sol[1],gs2);

.2422912423

(6)

 

Download Rootsfind.mw

I put this command and It keep saying  plot(f(x), x = -0.667 .. 1.71, y = -5 .. 20, gridlines); Error, (in plot) unexpected options: [1.71 = -.667 .. 1.71, y = -5 .. 20] . How can I fix this

How can I show all the parameters in title ?

restart;

with(DEtools):with(plots):with(plottools):

 

 

sigma1:=e1*alpha: sigma2:=e2*delta:

g:=x/(1+beta*x^2);
f:=(theta*x-1)*(1-x)*(1+beta*x^2)-y;
h:=alpha*g-z-sigma1;
j:=delta*y-sigma2;

x/(beta*x^2+1)

 

(theta*x-1)*(1-x)*(beta*x^2+1)-y

 

alpha*x/(beta*x^2+1)-e1*alpha-z

 

-delta*e2+delta*y

(1)

 

 

p0:=theta->plot([1/theta,y,y=0..1],linestyle=dash,color= green):
p1:=e1->plot([x,e1,x=0....1.5],color=blue):
q0:=animate(p0,[theta],theta=2...10):
q1:=animate(p1,[e1],e1=0.1..1):
q2:=plot([1,y,y=0..1],linestyle=dash,color= green):
p3:=beta->plot([x,x/(1+beta*x^2),x=0..1.5],color=magenta);
q3:=animate(p3,[beta],beta=0..1.5):

display([q0,q1,q2,q3],view=[0..1.5,0..1]);

proc (beta) options operator, arrow; plot([x, x/(1+beta*x^2), x = 0 .. 1.5], color = magenta) end proc

 

 

 

Download animate_plots.mw

# countourplot3d piggybacks on top of plot3d.
# For the "coloring=[lowColor, highColor]", the "filledregions=true" option must be present.
# If "filledregions=true" is not present, plot3d will throw an error.
# This code shows the three cases, only one of which will work.
Note to support. I cannot add a new tag. contourplot3d should be a tag.

restart;
with(plots);
with(ColorTools);
cGr4s := Color([0.50, 0.50, 0.50]);
contourplot3d(-5*d/(d^2 + y^2 + 1), d = -3 .. 3, y = -3 .. 3, color = black, thickness = 3, coloring = [cGr4s, cGr4s], contours = [-2, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, 2]);
contourplot3d(-5*d/(d^2 + y^2 + 1), d = -3 .. 3, y = -3 .. 3, filledregions = false, color = black, thickness = 3, coloring = [cGr4s, cGr4s], contours = [-2, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, 2]);
contourplot3d(-5*d/(d^2 + y^2 + 1), d = -3 .. 3, y = -3 .. 3, filledregions = true, color = black, thickness = 3, coloring = [cGr4s, cGr4s], contours = [-2, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, 2]);

Hi all,

I am quite a rookie in using Maple.

A project is going on while I need to use previous formulas and variables defined in A.mw, while I don't want to redefine everything again in my worksheet, is there any approach to inherit everything in A.mw to my current worksheet?

First 211 212 213 214 215 216 217 Last Page 213 of 2218