Education

Teaching and learning about math, Maple and MapleSim

When we plot a curve with the option  style=point  , symbols go evenly not along the length of this curve, but along the range of the independent variable. For this reason the plot often looks unattractive. Here are two examples. In the first example, the default option  adaptive=true  is used, in which Maple adds points in some places.

restart;
plot(surd(x,3), x=-2.5..2.5, style=point, scaling=constrained, symbol=solidcircle, symbolsize=8, numpoints=30, size=[800,300]);
plot(surd(x,3), x=-2.5..2.5, style=point, scaling=constrained, symbol=solidcircle, symbolsize=8, numpoints=30, adaptive=false, size=[800,300]);

                

                           


The  UniformPointPlot  procedure allows you to plot curves by symbols (as for  style=point), and these symbols go from each other at equal distances, measured along this curve. The procedure uses a well-known formula for the length of a curve in two and three dimensions. The procedure parameters are clear from the three examples below.

UniformPointPlot:=proc(F::{algebraic,list},eq::`=`,n::posint:=40,Opt::list:=[symbol=solidcircle, symbolsize=8, scaling=constrained])
local t, R, P, g, L, step, L1, L2;
uses plots;
Digits:=4:
t:=lhs(eq); R:=rhs(eq);
P:=`if`(type(F,algebraic),[t,F],F); 
g:=x->`if`(F::algebraic or nops(F)=2,evalf(Int(sqrt(diff(P[1],t)^2+diff(P[2],t)^2), t=lhs(R)..x, epsilon=0.001)),evalf(Int(sqrt(diff(P[1],t)^2+diff(P[2],t)^2+diff(P[3],t)^2), t=lhs(R)..x, epsilon=0.001))):
L:=g(rhs(R)); step:=L/(n-1);
L1:=[lhs(R),seq(fsolve(g-k*step, fulldigits),k=1..n-2),rhs(R)];
L2:=map(s->`if`(type(F,algebraic),[s,eval(F,t=s)],eval(F,t=s)), L1):
`if`(F::algebraic or nops(F)=2,plot(L2, style=point, Opt[]),pointplot3d(L2, Opt[]));
end proc:

   
Examples of use:

UniformPointPlot(surd(x,3), x=-2.5..2.5, 30);

                             

UniformPointPlot([5*cos(t),3*sin(t)], t=0..2*Pi, [color=red,symbol=solidcircle,scaling=constrained, symbolsize=8,  size=[800,400]]);

                             

UniformPointPlot([cos(t),sin(t),2-2*cos(t)], t=0..2*Pi, 41, [color=red,symbol=solidsphere, symbolsize=8,scaling=constrained, labels=[x,y,z]]);

                             
Here's another example of using the same technique as in the procedure. In this example, we are plotting Archimedean spiral uniformly colored with 7 rainbow colors:

f:=t->[t*cos(t),t*sin(t)]:
g:=t->evalf(Int(sqrt(diff(f(s)[1],s)^2+diff(f(s)[2],s)^2), s=0..t)):
h:=s->fsolve(s=g(t), t):
L:=evalf(g(2*Pi)): step:=L/7:
L1:=[0,seq(h(k*step), k=1..6),2*Pi]:
Colors:=convert~([Red,Orange,Yellow,Green,Blue,Indigo,Violet], string):
plots:-display(seq(plot([f(t)[], t=L1[i]..L1[i+1]], color=Colors[i], thickness=12), i=1..7), scaling=constrained, size=[500,400]);

                             

Uniform_Point_Plot.mw

A few weeks ago a television station in Toronto asked me if I’d share some tips on how parents could help their kids stay engaged with remote learning. My initial reaction was to run for the hills – appearing on live TV is not my cup of tea. However my colleagues persuaded me to accept. You can see a clip of that segment here - I’ve included it in this post because otherwise someone on the marketing team would have ;-)

My tips are based on a wide variety of experiences. My role at Maplesoft requires me to speak with educators at all levels, and remote learning has been a hot topic of conversation lately, as you can imagine. As well, in my past life (i.e. life before kids) I was a high school math tutor, and now as a parent I’m in the thick of it helping my son navigate Kindergarten remotely.

So here are my 5 tips on how parents of elementary and high-school aged children can help their kids stay engaged with remote learning. If you have other tips, including suggestions for university students, feel free to leave them in the comments sections. And if these tips help you, please let me know. It will have made the stress of my appearance on TV worthwhile!

 

Tip 1: Look for the positives

These are unprecedented times for kids, parents and teachers. Over the course of the last 6-7 months, learning as we’ve grown to know it has changed radically. And while the change has been incredibility difficult for everyone, it’s helpful to look for the positives that remote learning can bring to our children:

  • Remote learning can help some kids focus on their work by minimizing the social pressures or distractions they may face at school.
  • Older kids are appreciating the flexibility that remote learning can offer with respect to when and how they complete their work.  
  • Younger kids are loving the experience of learning in the presence of mom and dad. My 4 year old thinks it’s awesome that I now know all the lyrics to the songs that he learns in school.
  • As many remote learning classrooms include students from across the school board, this can provide kids with the opportunity to connect with their peers from different socio-economic backgrounds living across the city.

 

Tip 2: Don’t shy away from your kid’s teacher

While some kids are thriving learning from home, we know that others are struggling.

If your high school student is struggling at school, do whatever it takes to convince them to connect with their teacher. If your child is younger, make the connection yourself.

In my role, I’ve had the opportunity to work with many teachers, and rest assured, many of them would welcome this engagement.  They want our kids to succeed, but without the face-to-face classroom interaction it’s becoming increasingly more difficult for them to rely on visual cues to see how your child is doing and if they are struggling with a concept.

So I encourage you to reach out to your kid’s teacher especially if you notice your child is having difficulty.

 

Tip 3: Get creative with learning

Another benefit of remote learning is that it presents us with a unique opportunity to get creative with learning.

Kids, especially those in middle school and high school, now have the time and opportunity to engage with a variety of different online learning resources. And when I say online learning resources, I mean more than just videos. Think interactive tools (such as Maple Learn), that help students visualize concepts from math and science, games that allow students to practice language skills, repositories of homework problems and practice questions that allow kids to practice concepts, the list goes on.

Best of all, many content providers and organizations, are offerings these resources and tools available for free or at a substantially reduced cost to help kids and parents during this time.

So if your child is having difficulty with a particular subject or if they are in need of a challenge, make sure to explore what is available online.

 

Tip 4: Embrace the tech

To be successful, remote learning requires children to learn a host of new digital skills, such as how to mute/unmute themselves, raise their hands electronically, turn on and off their webcam, toggle between applications to access class content and upload homework, keep track of their schedule via an electronic calendar, etc. This can be daunting for kids who are learning remotely for the first time.

As a parent you can help your child become more comfortable with remote learning by setting aside some time either before or after class to help them master these new tools. And since this is likely new to you, there are some great videos online that will show you how to use the system your school has mandated be it Microsoft Teams, Google Classroom or something else.  

 

Tip 5: It’s a skill

Remember that remote learning is a skill like any other skill, and it takes time and practice to become proficient.

So remember to be patient with yourself, your kids, and their teachers, as we embark on this new journey of learning. Everyone is trying their best and I truly believe a new rhythm will emerge as we progress through the school year.

We will find our way.

DataFrames: An example from the 2020 U.S. Presidential election

(Or why DataFrames are more powerful and readable than spreadsheets.)

 

In this example of working with DataFrames, the goal is to use a spreadsheet from a website, which contains polling data, to estimate the probability each of the two candidates from the major parties will win the US Presidential election in November.  I first tried doing the calculations with a spreadsheet, but I discovered DataFrames was far more powerful. Warning: This worksheet uses live data. Hence the outcome at the end of the worksheet is likely to change daily. A more extensive example with even more common DataFrame operations should be available soon.

 

How the US Presidential election works - highly simplified version: In the US there are only two parties for which their candidate could win the election:  the Democratic party and Republican party. The Republican party is often referred to as the "Grand Old Party", or GOP. Each state executes its own election. The candidate who receives the most votes wins the states "electoral votes" (EV). The number of the electoral votes for each state is essentially proportional to the population of the state. A candidate who receives a total of 270 or more EVs out of 538, is declared the president of the US for the next term, which starts January 20 of 2021.

 

Creating DataFrame from web based data:

First I download the data from the website. It is a CSV spreadsheet.

 

restart; interface(displayprecision = 3); interface(rtablesize = [6, 8]); web_data := Import("https://www.electoral-vote.com/evp2020/Pres/pres_polls.csv")

_m2211970420352

Each row contains information about a poll conducted in one of the states.  The first poll starts on row 2, hence the number of polls are:

Npolls := upperbound(web_data, 1)-1

572

Now I want to create a new DataFrame containing only the most useful information. In web_data, many are the columns are not important. However I do want to keep the column label names from those columns I wish to retain.

 

web_data_cols := [1, 3, 4, 5, 6]; column_labels := convert(web_data[1, web_data_cols], list)

["Day", "State", "EV", "Dem", "GOP"]

 

Because  the first poll in web_data is labeled 2, I would like to relabel all the polls starting from 1

row_labels := [seq(1 .. Npolls)]

 

Creating a DataFrame from a Matrix or another DataFrame:  (with row labels and column labels)

 

Now I can build the DataFrame that I will be working with:

 

poll_data := DataFrame(web_data[2 .. (), web_data_cols], 'columns' = column_labels, 'rows' = row_labels)

_m2211956910784

What each column means

* "Day" - day of the year in 2020 when the poll within the state was halfway completed. The larger the value, the more recent the poll.

* "State" - the state in the US where the poll was conducted. The candidate that receives the most votes "wins the state".

* "EV" - the number of electoral votes given to the candidate who receives the most votes within the state.

* "Dem" - the percentage of people who said they are going to vote for the candidate from the Democratic party.

* "GOP" - the percentage of people who said they are going to vote for the candidate from the Republican party.

Sorting:

By using the sort function, using the `>` operator, I can see which polls are the more recent. (If you run the worksheet yourself, the outcome will change as more polls are added to the website spreadsheet.)

poll_data := sort(poll_data, "Day", `>`)

_m2211960016288

 

Selecting Unique entries - by column values:

For the my simple analysis, I will use only the most recent poll, one from each state. Hence, using AreUnique, I can pull the first row that matches a state name. This new DataFrame called states.

 

states := poll_data[AreUnique(poll_data["State"])]

_m2211969565344

(Note, one of the "states" is the District of Columbia, D.C., which is why there are 51 rows.)

 

Removing a column: (and relabeling rows)

This next example isn't necessary, but shows some of the cool features of DataFrames.

 

Since there is only 1 entry per state, I'm going to remove the "State" column and relabel all the rows with the state names

state_names := convert(states["State"], list); states := DataFrame(Remove(states, "State"), 'rows' = state_names)

2

_m2211957755840

 

Indexing by row labels:


This allow me to to display information by individual states. What is the data for California, Maine and Alaska?

states[["California", "Maine", "Alaska"], () .. ()]

_m2211977321984

 

Mathematics with multiple-columns:

 

My preference is to work with fractions, rather than percentages. Hence I want all the values in the "Dem" and "GOP" to be divided by 100 (or multiplied by 1/100).  Treating each column like a vector, the multiplication is performed individually on each cell. This is what the tilda, "~", symbol performs.

states[["Dem", "GOP"]] := `~`[`*`](states[["Dem", "GOP"]], 1/100.); states

_m2211957755840

 

Mathematics: using a function to calculate a column

 

For the next action, I want to use the power of the Statistics package to create a "probability of winning the state" function.

 

For simplicity, I will assume the outcome of the voting in a state is purely random, but is conditional to popularity of each candidate as measured by the polls. I'll assume the likelihood of an outcome follows a normal (Gaussian) distribution with the peak being at point where the difference of the polling of the two candidates is zero. (Note, other than 2016, where there was an unusually larger percentage of undecided voters on election day, this simple model is reasonable accurate. For example, in 2012, of the states which appeared to be the "closest", the winner over-performed his polling in half of them, and under-performed in the other half with a mean difference of nearly zero.)  From previous elections, the standard deviation of differences between polling values and the actual outcome is at most 0.05, however, it does increase with the fraction of undecided voters.

 

To mathematically model this situation, I have chosen to use the "Cumulative Density Function" CDF in the Statistics package. It will calculate the probability that a candidate polling with fraction f1 wins the election if the other candidate is polling with fraction f2.  The variable u is the fraction of undecided voters. It is included in the calculation to increase the spread of the possible outcomes.

 

win_prob := Statistics:-CDF(Statistics:-RandomVariable(Normal(0., 0.5e-1+(1/4)*u)), f1-f2)

1/2+(1/2)*erf((1/2)*(f1-f2)*2^(1/2)/(0.5e-1+(1/4)*u))

 

Converting this expression into a function using the worst named function in Maple, unapply:

win_prob_f := unapply(evalf(win_prob), [f1, f2, u])

proc (f1, f2, u) options operator, arrow; .5000000000+.5000000000*erf(.7071067810*(f1-1.*f2)/(0.5e-1+.2500000000*u)) end proc

 

Now I can calculate a DataFrames column of the "win probability", in this case, for the candidate from the Democratic platy. By apply the function, individually, using the columns "Dem" and "GOP", I produce:

dem_win_prob := `~`[win_prob_f](states["Dem"], states["GOP"], `~`[`-`](1, `~`[`+`](states["Dem"], states["GOP"])))

_m2212010910496

Appending a column:

 

I can add this column to the end of the states with the label "DemWinProb":

 

states := Append(states, dem_win_prob, label = "DemWinProb")

_m2212009017568

 

Mathematics of adding the entries of a column:

 

How many electoral votes are available? add them up.

Total_EV := add(states["EV"])

538

 

While the number of EV a candidate wins is discrete, I can use the "win probability" from each state to estimate the total number of EV each of the candidates might win. This means adding up number of EV in each state times, individually, the probability of winning that state:

Dem_EV := round(add(`~`[`*`](states["EV"], states["DemWinProb"])))

354

Currently, the candidate from the Democratic party is likely to win more then 300 electoral vtes.

 

What about for the candidate from the Republican / "GOP" party?

gop_win_prob := `~`[win_prob_f](states["GOP"], states["Dem"], `~`[`-`](1, `~`[`+`](states["Dem"], states["GOP"]))); GOP_EV := round(add(`~`[`*`](states["EV"], gop_win_prob)))

184

Summing the two EV values, we obtain the total number of electoral votes.

Dem_EV+GOP_EV

538

  NULL

 

Download DataFrames_Example.mw

In the present work we are going to demonstrate the importance of the study of vector analysis, with modeling and simulation criteria, using the MapleSim scientific software from MapleSoft. Nowadays, the majority of higher education centers direct their teaching of vector analysis in an abstract way and there are few or no teachers who carry out applications using modeling and simulation. (In spanish)

IPN_CICATA_2020.pdf

Expo_MapleSim_CICATA.zip

 

Question about deflection and vibration of beams occur with some regularity in this forum.  Search for "beam" to see several pages of hits.

In this post I present a general approach to calculating the vibrational modes of a beam that applies to both single-span and multi-span beams.  The code is not perfectly polished, but it is sufficiently documented to enable the interested user to modify/extend it as needed.

Vibrational modes of multi-span Euler-Bernoulli beams

through Krylov-Dunction functions

Rouben Rostamian
2020-07-19

restart;

Note:  Maple defines the imaginary unit I = sqrt(-1). We want to use the
symbol I as the beam's cross-sectional moment of inertia.
Therefore we redefine the imaginary unit (for which we have no

use) as II and free up the symbol I for our use.

interface(imaginaryunit=II):

with(LinearAlgebra):

 

The Euler-Bernoulli beam equation
"rho*A*((∂)^2u)/((∂)^( )t^2)+E*I*((∂)^(4)u)/((∂)^( )x^(4))=0".

 

We wish to determine the natural modes of vibration of

a possibly multi-span Euler-Bernoulli beam.


Separate the variables by setting u(x, t) = X(x)*T(t).   We get
-
"(rho*A)/(E*I)*(T ' ')/(T)=(X^((4)))/(X)=mu^(4)  "
whence
"T ' ' +(E*I)/(rho*A)*mu^(4)*T =0,           X^((4))-mu^(4)*X=0".

Let omega = sqrt(I*E/(rho*A))*mu^2.  Then

T(t) = C__1*cos(omega*t)+C__2*sin(omega*t)

 and
"X(x)=`c__1`*cosh(mu*x)+`c__2`*sinh(mu*x)+`c__3`*sin(mu*x)+`c__4`*cos(mu*x)."

 

The idea behind the Krylov-Duncan technique is to express X(x) 

in terms an alternative (and equivalent) set of basis
functions K__1 through K__4,, as
X(x) = a__1*K__1(mu*x)+a__2*K__2(mu*x)+a__3*K__3(mu*x)+a__4*K__4(mu*x),

where the functions K__1 through K__4 are defined in the next section.

In some literature the symbols S, T, U, V, are used for these

functions but I find it more sensible to use the indexed function

notation.

The Krylov-Duncan approach is particularly effective in formulating
and finding a multi-span beam's natural modes of vibration.

 

 

The Krylov-Duncan functions

 

The K[i](x) defined by this proc evaluates to the ith

Krylov-Duncan function.

 

Normally the index i will be in the set{1, 2, 3, 4}, however the proc is

set up to accept any integer index (positive or negative).  The proc evaluates

the index modulo 4 to bring the index into the set {1, 2, 3, 4}.   For

instance, K[5](x) and K[-3](x)i are equivalent to K[1](x) .

K := proc(x)
        local n := op(procname);

        if not type(n, integer) then
                return 'procname'(args);
        else
                n := 1 + modp(n-1,4);  # reduce n modulo 4
        end if;

        if n=1 then
                (cosh(x) + cos(x))/2;
        elif n=2 then
                (sinh(x) + sin(x))/2;
        elif n=3 then
                 (cosh(x) - cos(x))/2;
        elif n=4 then
                (sinh(x) - sin(x))/2;
        else
                error "shouldn't be here!";
        end if;

end proc:

Here are the Krylov-Duncan basis functions:

seq(print(cat(`K__`,i)(x) = K[i](x)), i=1..4);

K__1(x) = (1/2)*cosh(x)+(1/2)*cos(x)

K__2(x) = (1/2)*sinh(x)+(1/2)*sin(x)

K__3(x) = (1/2)*cosh(x)-(1/2)*cos(x)

K__4(x) = (1/2)*sinh(x)-(1/2)*sin(x)

and here is what they look like.  All grow exponentially for large x
but are significantly different near the origin.

plot([K[i](x) $i=1..4], x=-Pi..Pi,
        color=["red","Green","blue","cyan"],
        thickness=2,
        legend=['K[1](x)', 'K[2](x)', 'K[3](x)', 'K[4](x)']);

The cyclic property of the derivatives: 
We have diff(K__i(x), x) = `K__i-1`.  Let's verify that:

diff(K[i](x),x) - K[i-1](x) $i=1..4;

0, 0, 0, 0

The fourth derivative of each K__i  function equals itself. This is a consequence of the cyclic property:

diff(K[i](x), x$4) - K[i](x) $ i=1..4;

0, 0, 0, 0

The essential property of the Krylov-Duncan basis function is that their

zeroth through third derivatives at x = 0 form a basis for R^4:

seq((D@@n)(K[1])(0), n=0..3);
seq((D@@n)(K[2])(0), n=0..3);
seq((D@@n)(K[3])(0), n=0..3);
seq((D@@n)(K[4])(0), n=0..3);

1, 0, 0, 0

0, 1, 0, 0

0, 0, 1, 0

0, 0, 0, 1

As noted earlier, in the case of a single-span beam, the modal  shapes

are expressed as
X(x) = a__1*K__1(mu*x)+a__2*K__2(mu*x)+a__3*K__3(mu*x)+a__4*K__4(mu*x).

Then, due to the cyclic property of the derivatives of the Krylov-Duncan

functions, we see that:
"X '(x) = mu*(`a__1`*`K__4`(mu*x)+`a__2`*`K__1`(mu*x)+`a__3`*`K__2`(mu*x)+`a__4`*`K__3`(mu*x))".
X*('`⁢`')(x) = mu^2*(a__1*K__3(mu*x)+a__2*K__4(mu*x)+a__3*K__1(mu*x)+a__4*K__2(mu*x)).
"X ' ' '(x) = mu^(3)*(`a__1`*`K__2`(mu*x)+`a__2`*`K__3`(mu*x)+`a__3`*`K__4`(mu*x)+`a__4`*`K__1`(mu*x))".
Let us note, in particular, that
X(0) = a__1,
"X '(0)=mu*`a__2`",
X*('`⁢`')(0) = mu^2*a__3,
"X ' ' '(0)=mu^(3)*`a__4`".

 

A general approach for solving multi-span beams

 

In a multi-span beam, we write X__i(x) for the deflection of the ith span, where

0 < x and x < L__i and where L__i is the span's length.  The x coordinate indicates the

location within the span, with x = 0 corresponding to the span's left endpoint.

Thus, each span has its own x coordinate system.

 
We assume that the interface of the two adjoining spans is supported on springs

which (a) resist transverse displacement proportional to the displacement (constant of

proportionality of k__d  (d for displacement), and (b) resist rotation proportional to the
slope (constant of proportionality of k__t  (t for torsion or twist). The spans are numbered

from left to right. The interface conditions between spans i and i+1 are

 

1. 

The displacements at the interface match:
X__i(L__i) = `X__i+1`(0).

2. 

The slopes at the interface match
X*`'i`(L__i) = X*`'i+1`(0).

3. 

The difference of the moments just to the left and just to the right of the
support is due to the torque exerted by the torsional spring:
"E*I*(X ' `'i+1`(0)-X ' `'i `(`L__i`))=-`k__t` * X `'i+1`(0),"

4. 

The difference of the shear forces just to the left and just to the right of the
support is due to the force exerted by the linear spring:

"E*I*(X ' ' `'i+1`(0)-X ' ' '(`L__i`))= -`k__d` * `X__i+1`(0).  "

The special case of a pinned support corresponds to k__t = 0 and k__d = infinity.
In that case, condition 3 above implies that X*'`'i+1`(0) = X'*`'i`(L__i),
and condition 4 implies that `X__i+1`(0) = 0.


Let us write the displacements X__i and `X__i+1` in terms of the Krylov-Duncan

functions as:

 

"`X__i`(x)=`a__i,1`*`K__1`(mu*x)+`a__i,2`*`K__2`(mu*x)+`a__i,3`*`K__3`(mu*x)+`a__i,4`*`K__4`(mu*x),  "
"`X__i+1`(x)=`a__i+1,1`*`K__1`(mu*x)+`a__I+1,2`*`K__2`(mu*x)+`a__i+1,3`*`K__3`(mu*x)+`a__i+1,4`*`K__4`(mu*x)."


Then applying the cyclic properties of the Krylov-Duncan functions described

earlier, the four interface conditions translate to the following system of four
equations involving the eight coefficients `a__i,1`, `a__i,2`, () .. (), `a__i+13`, `a__i+1,4`.

"`a__i,1`*`K__1`(mu*`L__i`)+ `a__i,2`*`K__2`(mu*`L__i`)+`a__i,3`*`K__3`(mu*`L__i`)+`a__i,4`*`K__4`(mu*`L__i`)=`a__i+1,1`,"
mu*(`a__i,1`*K__4(mu*L__i)+`a__i,2`*K__1(mu*L__i)+`a__i,3`*K__2(mu*L__i)+`a__i,4`*K__3(mu*L__i)) = mu*`a__i+1,2`,
mu^2*(`a__i,1`*K__3(mu*L__i)+`a__i,2`*K__4(mu*L__i)+`a__i,3`*K__1(mu*L__i)+`a__i,4`*K__2(mu*L__i)-`a__i+1,3`) = -k__t*mu*`a__i+1,2`/(I*E)
mu^3*(`a__i,1`*K__2(mu*L__i)+`a__i,2`*K__3(mu*L__i)+`a__i,3`*K__4(mu*L__i)+`a__i,4`*K__1(mu*L__i)-`a__i+1,4`) = -k__d*`a__i+1,1`/(I*E)

which we write as a matrix equation
(Matrix(4, 8, {(1, 1) = K__1(mu*L__i), (1, 2) = K__2(mu*L__i), (1, 3) = K__3(mu*L__i), (1, 4) = K__4(mu*L__i), (1, 5) = -1, (1, 6) = 0, (1, 7) = 0, (1, 8) = 0, (2, 1) = K__4(mu*L__i), (2, 2) = K__1(mu*L__i), (2, 3) = K__2(mu*L__i), (2, 4) = K__3(mu*L__i), (2, 5) = 0, (2, 6) = -1, (2, 7) = 0, (2, 8) = 0, (3, 1) = K__3(mu*L__i), (3, 2) = K__4(mu*L__i), (3, 3) = K__1(mu*L__i), (3, 4) = K__2(mu*L__i), (3, 5) = 0, (3, 6) = -I*k__t/(mu*E), (3, 7) = -1, (3, 8) = 0, (4, 1) = K__2(mu*L__i), (4, 2) = K__3(mu*L__i), (4, 3) = K__4(mu*L__i), (4, 4) = K__1(mu*L__i), (4, 5) = -I*k__d/(mu^3*E), (4, 6) = 0, (4, 7) = 0, (4, 8) = -1}))*(Vector(8, {(1) = `a__i,1`, (2) = `a__i,2`, (3) = `a__i,3`, (4) = `a__i,4`, (5) = `a__i+1,1`, (6) = `a__i+1,2`, (7) = `a__i+1,3`, (8) = `a__i+1,4`})) = (Vector(8, {(1) = 0, (2) = 0, (3) = 0, (4) = 0, (5) = 0, (6) = 0, (7) = 0, (8) = 0})).

That 4*8 coefficient matrix plays a central role in solving

for modal shapes of multi-span beams.  Let's call it M__interface.

Note that the value of I*E enters that matrix only in combinations with
k__d and k__t.  Therefore we introduce the new symbols

K__d = k__d/(I*E),    K__t = k__t/(I*E).

 

The following proc generates the matrix `#msub(mi("M"),mi("interface"))`.  The parameters K__d and K__t 

are optional and are assigned the default values of infinity and zero, which

corresponds to a pinned support.

 

The % sign in front of each Krylov function makes the function inert, that is, it
prevents it from expanding into trig functions.  This is so that we can

see, visually, what our expressions look like in terms of the K functions.  To

force the evaluation of those inert function, we will apply Maple's value function,

as seen in the subsequent demos.

M_interface := proc(mu, L, {Kd:=infinity, Kt:=0})
        local row1, row2, row3, row4;
        row1 := %K[1](mu*L), %K[2](mu*L), %K[3](mu*L), %K[4](mu*L), -1,  0, 0, 0;
        row2 := %K[4](mu*L), %K[1](mu*L), %K[2](mu*L), %K[3](mu*L),  0, -1, 0, 0;
        row3 := %K[3](mu*L), %K[4](mu*L), %K[1](mu*L), %K[2](mu*L),  0, Kt/mu, -1, 0;
        if Kd = infinity then
                row4 := 0, 0, 0, 0, 1, 0, 0, 0 ;
        else
                row4 := %K[2](mu*L), %K[3](mu*L), %K[4](mu*L), %K[1](mu*L), Kd/mu^3, 0, 0, -1;
        end if:
                return < <row1> | <row2> | <row3> | <row4> >^+;
end proc:

Here is the interface matrix for a pinned support:

M_interface(mu, L);

Matrix(4, 8, {(1, 1) = %K[1](L*mu), (1, 2) = %K[2](L*mu), (1, 3) = %K[3](L*mu), (1, 4) = %K[4](L*mu), (1, 5) = -1, (1, 6) = 0, (1, 7) = 0, (1, 8) = 0, (2, 1) = %K[4](L*mu), (2, 2) = %K[1](L*mu), (2, 3) = %K[2](L*mu), (2, 4) = %K[3](L*mu), (2, 5) = 0, (2, 6) = -1, (2, 7) = 0, (2, 8) = 0, (3, 1) = %K[3](L*mu), (3, 2) = %K[4](L*mu), (3, 3) = %K[1](L*mu), (3, 4) = %K[2](L*mu), (3, 5) = 0, (3, 6) = 0, (3, 7) = -1, (3, 8) = 0, (4, 1) = 0, (4, 2) = 0, (4, 3) = 0, (4, 4) = 0, (4, 5) = 1, (4, 6) = 0, (4, 7) = 0, (4, 8) = 0})

And here is the interface matrix for a general springy support:

M_interface(mu, L, 'Kd'=a, 'Kt'=b);

Matrix(4, 8, {(1, 1) = %K[1](L*mu), (1, 2) = %K[2](L*mu), (1, 3) = %K[3](L*mu), (1, 4) = %K[4](L*mu), (1, 5) = -1, (1, 6) = 0, (1, 7) = 0, (1, 8) = 0, (2, 1) = %K[4](L*mu), (2, 2) = %K[1](L*mu), (2, 3) = %K[2](L*mu), (2, 4) = %K[3](L*mu), (2, 5) = 0, (2, 6) = -1, (2, 7) = 0, (2, 8) = 0, (3, 1) = %K[3](L*mu), (3, 2) = %K[4](L*mu), (3, 3) = %K[1](L*mu), (3, 4) = %K[2](L*mu), (3, 5) = 0, (3, 6) = b/mu, (3, 7) = -1, (3, 8) = 0, (4, 1) = %K[2](L*mu), (4, 2) = %K[3](L*mu), (4, 3) = %K[4](L*mu), (4, 4) = %K[1](L*mu), (4, 5) = a/mu^3, (4, 6) = 0, (4, 7) = 0, (4, 8) = -1})

Note:  In Maple's Java interface, inert quantities are shown in gray.


Note:  The L in this matrix is the length of the span to the left of the interface.
Recall that it is L__i , not `L__i+1`, in the derivation that leads to that matrix.

In a beam consisting of N spans, we write the ith span's deflection X__i(x) as
"`X__i`(x)=`a__i 1`*`K__1`(mu*x)+`a__i 2`*`K__2`(mu*x)+`a__i 3`*`K__3`(mu*x)+`a__i 4`*`K__4`(mu*x)."

Solving the beam amounts to determining the 4*N unknowns `a__i j`, i = 1 .. N, j = 1 .. 4.

which we order as

 

`a__1,1`, `a__1,2`, `a__1,3`, `a__1,4`, `a__2,1`, `a__2,2`, () .. (), `a__N,1`, `a__N,2`, `a__N,3`, `a__N,4`

At each of the N-1 interface supports we have a set of four equations as derived
above, for a total of 4*(N-1) equations.  Additionally, we have four user-supplied

boundary conditions -- two at the extreme left and two at the extreme right of the

overall beam.  Thus, altogether we have 4*N equations which then we solve for the
4*N
 unknown coefficients a__ij.   

The user-supplied boundary conditions at the left end are two equations, each in the
form of a linear combination of the coefficients a__11, a__12, a__13, a__14.  We write M__left for the
2*4 coefficient matrix of that set of equations.  Similarly, the user-supplied boundary
conditions at the right end are two equations, each in the form of a linear combination
of the coefficients a__N1, a__N2, a__N3, a__N4.  We write M__right for the 2*4 coefficient matrix of
that set of equations.   Putting these equations together with those obtained at the interfaces,

we get a linear set of equations represented by a (4*N*4)*N matrix Mwhich can be assembled

easily from the matrices M__left, M__right, and M__interface.  In the case of a 4-span beam the

assembled 16*16matrix Mlooks like this:

The pattern generalizes to any number of spans in the obvious way.

For future use, here we record a few frequently occurring M__left and M__right matrices.

M_left_pinned := <
        1, 0, 0, 0;
        0, 0, 1, 0 >;

Matrix(2, 4, {(1, 1) = 1, (1, 2) = 0, (1, 3) = 0, (1, 4) = 0, (2, 1) = 0, (2, 2) = 0, (2, 3) = 1, (2, 4) = 0})

M_right_pinned := (mu,L) -> <
        %K[1](mu*L), %K[2](mu*L), %K[3](mu*L), %K[4](mu*L);
        %K[3](mu*L), %K[4](mu*L), %K[1](mu*L), %K[2](mu*L) >;  

proc (mu, L) options operator, arrow; `<,>`(`<|>`(%K[1](L*mu), %K[2](L*mu), %K[3](L*mu), %K[4](L*mu)), `<|>`(%K[3](L*mu), %K[4](L*mu), %K[1](L*mu), %K[2](L*mu))) end proc

M_left_clamped := <
        1, 0, 0, 0;
                0, 1, 0, 0 >;

Matrix(2, 4, {(1, 1) = 1, (1, 2) = 0, (1, 3) = 0, (1, 4) = 0, (2, 1) = 0, (2, 2) = 1, (2, 3) = 0, (2, 4) = 0})

M_right_clamped := (mu,L) -> <
        %K[1](mu*L), %K[2](mu*L), %K[3](mu*L), %K[4](mu*L);
        %K[4](mu*L), %K[1](mu*L), %K[2](mu*L), %K[3](mu*L) >;

proc (mu, L) options operator, arrow; `<,>`(`<|>`(%K[1](L*mu), %K[2](L*mu), %K[3](L*mu), %K[4](L*mu)), `<|>`(%K[4](L*mu), %K[1](L*mu), %K[2](L*mu), %K[3](L*mu))) end proc

M_left_free := <
        0, 0, 1, 0;
                0, 0, 0, 1 >;

Matrix(2, 4, {(1, 1) = 0, (1, 2) = 0, (1, 3) = 1, (1, 4) = 0, (2, 1) = 0, (2, 2) = 0, (2, 3) = 0, (2, 4) = 1})

M_right_free := (mu,L) -> <
        %K[3](mu*L), %K[4](mu*L), %K[1](mu*L), %K[2](mu*L);
        %K[2](mu*L), %K[3](mu*L), %K[4](mu*L), %K[1](mu*L) >;

proc (mu, L) options operator, arrow; `<,>`(`<|>`(%K[3](L*mu), %K[4](L*mu), %K[1](L*mu), %K[2](L*mu)), `<|>`(%K[2](L*mu), %K[3](L*mu), %K[4](L*mu), %K[1](L*mu))) end proc

The following proc builds the overall matrixM in the general case.  It takes
two or three arguments.  The first two arguments are the 2*4 matrices
which are called M__left and M__right in the discussion above.  If the beam
consists of a single span, that's all the information that need be supplied.
There is no need for the third argument.

 

In the case of a multi-span beam, in the third argument we supply the
list of the interface matrices M__interface , as in [M__1, M__2, () .. ()], listed in order
of the supports,  from left to right.   An empty list is also
acceptable and is interpreted as having no internal supports,
i.e., a single-span beam.

build_matrix := proc(left_bc::Matrix(2,4), right_bc::Matrix(2,4), interface_matrices::list)
        local N, n, i, M;

        # n is the number of internal supports
        n := 0;

        # adjust n if a third argument is supplied
        if _npassed = 3 then
                n := nops(interface_matrices);
                if n > 0 then
                        for i from 1 to n do
                                if not type(interface_matrices[i], 'Matrix(4,8)') then
                                        error "expected a 4x8 matrix for element %1 in the list of interface matrices", i;
                                end if;
                        end do;
                end if;
        end if;

        N := n + 1;                     # number of spans

        M := Matrix(4*N);
        M[1..2, 1..4] := left_bc;
        for i from 1 to n do
                M[4*i-1..4*i+2, 4*i-3..4*i+4] := interface_matrices[i];
        end do;
        M[4*N-1..4*N, 4*N-3..4*N] := right_bc;
                
        return M;
end proc:

For instance, for a single-span cantilever beam of length L we get the following M matrix:

build_matrix(M_left_clamped, M_right_free(mu,L));

Matrix(4, 4, {(1, 1) = 1, (1, 2) = 0, (1, 3) = 0, (1, 4) = 0, (2, 1) = 0, (2, 2) = 1, (2, 3) = 0, (2, 4) = 0, (3, 1) = %K[3](L*mu), (3, 2) = %K[4](L*mu), (3, 3) = %K[1](L*mu), (3, 4) = %K[2](L*mu), (4, 1) = %K[2](L*mu), (4, 2) = %K[3](L*mu), (4, 3) = %K[4](L*mu), (4, 4) = %K[1](L*mu)})

For a two-span beam with with span lengths of L__1 and L__2, and all three
supports pinned,  we get the following M matrix:

build_matrix(M_left_pinned, M_right_pinned(mu,L[2]), [M_interface(mu, L[1])]);

Matrix(%id = 18446884696906262398)

The matrix M represents a homogeneous linear system (i.e., the right-hand side vector

is zero.)  To obtain a nonzero solution, we set the determinant of M equal to zero.

That gives us a generally transcendental equation in the single unknown mu.  Normally

the equation has infinitely many solutions.  We call these `&mu;__n `, n = 1, 2, () .. () 

Remark: In the special case of pinned supports at the interfaces, that is, when
Kd = infinity, Kt = 0, the matrix M depends only on the span lengths "`L__1`, `L__2`. ..., `L__N`".
It is independent of the parameters rho, A, E, I that enter the Euler-Bernoulli
equations.  The frequencies `&omega;__n` = sqrt(I*E/(rho*A))*`&mu;__n`^2, however, depend on those parameters.

This proc plots the calculated modal shape corresponding to the eigenvalue mu.
The params argument is a set of equations which define the  numerical values

of all the parameters that enter the problem's description, such as the span

lengths.

 

It is assumed that in a multi-span beam, the span lengths are named "L[1], L[2]," etc.,
and in a single-span beam, the length is named L.

plot_beam := proc(M::Matrix,mu::realcons, params::set)
        local null_space, N, a_vals, i, j, A, B, P;
        eval(M, params);
        eval(%, :-mu=mu);
        value(%);  #print(%);
        null_space := NullSpace(%);  #print(%);
        if nops(null_space) <> 1 then
                error "Calculation failed. Increasing Digits and try again";
        end if;

        N := Dimension(M)[1]/4;  # number of spans
        a_vals := convert([seq(seq(a[i,j], j=1..4), i=1..N)] =~ null_space[1], list);

        if N = 1 then
                eval(add(a[1,j]*K[j](mu*x), j=1..4), a_vals);
                P[1] := plot(%, x=0..eval(L,params));
        else
                A := 0;
                B := 0;
                for i from 1 to N do
                        B := A + eval(L[i], params);
                        eval(add(a[i,j]*K[j](mu*x), j=1..4), a_vals);
                        eval(%, x=x-A):
                        P[i] := plot(%, x=A..B);
                        A := B;
                end do;
                unassign('i');
        end if;
        plots:-display([P[i] $i=1..N]);

end proc:

 

A single-span pinned-pinned beam

 

Here we calculate the natural modes of vibration of a single span

beam, pinned at both ends.  The modes are of the form
"X(x) = `a__11``K__1`(mu*x) + `a__12`*`K__2`(mu*x)+`a__13``K__3`(mu*x) + `a__14`*`K__4`(mu*x)."

The matrix M is:

M := build_matrix(M_left_pinned, M_right_pinned(mu,L));

Matrix(4, 4, {(1, 1) = 1, (1, 2) = 0, (1, 3) = 0, (1, 4) = 0, (2, 1) = 0, (2, 2) = 0, (2, 3) = 1, (2, 4) = 0, (3, 1) = %K[1](L*mu), (3, 2) = %K[2](L*mu), (3, 3) = %K[3](L*mu), (3, 4) = %K[4](L*mu), (4, 1) = %K[3](L*mu), (4, 2) = %K[4](L*mu), (4, 3) = %K[1](L*mu), (4, 4) = %K[2](L*mu)})

The characteristic equation:

Determinant(M);
eq := simplify(value(%)) = 0;

-%K[2](L*mu)^2+%K[4](L*mu)^2

-sinh(L*mu)*sin(L*mu) = 0

solve(eq, mu, allsolutions);

Pi*_Z1/L, I*Pi*_Z2/L

We conclude that the eigenvalues are `&mu;__n` = n*Pi/L, n = 1, 2, 3, () .. ().

 

A non-trivial solution of the system M*A = 0 is in the null-space of M:

eval(value(M), mu=n*Pi/L) assuming n::integer;
N := NullSpace(%);

Matrix(4, 4, {(1, 1) = 1, (1, 2) = 0, (1, 3) = 0, (1, 4) = 0, (2, 1) = 0, (2, 2) = 0, (2, 3) = 1, (2, 4) = 0, (3, 1) = (1/2)*cosh(n*Pi)+(1/2)*(-1)^n, (3, 2) = (1/2)*sinh(n*Pi), (3, 3) = (1/2)*cosh(n*Pi)-(1/2)*(-1)^n, (3, 4) = (1/2)*sinh(n*Pi), (4, 1) = (1/2)*cosh(n*Pi)-(1/2)*(-1)^n, (4, 2) = (1/2)*sinh(n*Pi), (4, 3) = (1/2)*cosh(n*Pi)+(1/2)*(-1)^n, (4, 4) = (1/2)*sinh(n*Pi)})

{Vector[column](%id = 18446884696899531350)}

Here are the weights that go with the Krylov functions:

a_vals := convert([a[1,j] $j=1..4] =~ N[1], set);

{a[1, 1] = 0, a[1, 2] = -1, a[1, 3] = 0, a[1, 4] = 1}

and here is the deflection:

add(a[1,j]*K[j](mu*x), j=1..4);
eval(%, a_vals);       # plug in the a_vals calculated above
eval(%, mu=n*Pi/L);    # assert that n is an integer

a[1, 1]*((1/2)*cosh(mu*x)+(1/2)*cos(mu*x))+a[1, 2]*((1/2)*sinh(mu*x)+(1/2)*sin(mu*x))+a[1, 3]*((1/2)*cosh(mu*x)-(1/2)*cos(mu*x))+a[1, 4]*((1/2)*sinh(mu*x)-(1/2)*sin(mu*x))

-sin(mu*x)

-sin(n*Pi*x/L)

We see that the shape functions are simple sinusoids.

 

 

A single-span free-free beam

 

Here we calculate the natural modes of vibration of a single span

beam, free at both ends.  The modes are of the form
X(x) = a__11*K__1(mu*x)+a__12*K__2(mu*x)+a__13*K__3(mu*x)+a__14*K__4(mu*x).

The reasoning behind the calculations is very similar to that in the

previous section, therefore we don't comment on many details.

M := build_matrix(M_left_free, M_right_free(mu,L));

Matrix(4, 4, {(1, 1) = 0, (1, 2) = 0, (1, 3) = 1, (1, 4) = 0, (2, 1) = 0, (2, 2) = 0, (2, 3) = 0, (2, 4) = 1, (3, 1) = %K[3](L*mu), (3, 2) = %K[4](L*mu), (3, 3) = %K[1](L*mu), (3, 4) = %K[2](L*mu), (4, 1) = %K[2](L*mu), (4, 2) = %K[3](L*mu), (4, 3) = %K[4](L*mu), (4, 4) = %K[1](L*mu)})

The characteristic equation:

Determinant(M);
simplify(value(%)) = 0;
eq_tmp := isolate(%, cos(L*mu));

%K[3](L*mu)^2-%K[2](L*mu)*%K[4](L*mu)

1/2-(1/2)*cosh(L*mu)*cos(L*mu) = 0

cos(L*mu) = 1/cosh(L*mu)

Let lambda = L*mu.  Then the characteristic equation takes the form

eq := algsubs(L*mu=lambda, eq_tmp);

cos(lambda) = 1/cosh(lambda)

Here are the graphs of the two sides of the characteristic equation:

plot([lhs,rhs](eq), lambda=0..4*Pi, color=["red","Green"]);

The first three roots are:

lambda__1, lambda__2, lambda__3 :=
        fsolve(eq, lambda=Pi/2..4*Pi, maxsols=3);

4.730040744, 7.853204624, 10.99560783

params := { L=1 };

{L = 1}

mu__1, mu__2, mu__3 := (lambda__1, lambda__2, lambda__3) /~ eval(L, params);

4.730040744, 7.853204624, 10.99560783

plots:-display([
        plot_beam(M, mu__1, params),
        plot_beam(M, mu__2, params),
        plot_beam(M, mu__3, params)],
        color=["red","Green","blue"],
        legend=[mode1, mode2, mode3]);

 

 

A single-span clamped-free cantilever

 

We have a cantilever beam of length L.  It is clamped at the

left end, and free at the right end.

M := build_matrix(M_left_clamped, M_right_free(mu,L));

Matrix(4, 4, {(1, 1) = 1, (1, 2) = 0, (1, 3) = 0, (1, 4) = 0, (2, 1) = 0, (2, 2) = 1, (2, 3) = 0, (2, 4) = 0, (3, 1) = %K[3](L*mu), (3, 2) = %K[4](L*mu), (3, 3) = %K[1](L*mu), (3, 4) = %K[2](L*mu), (4, 1) = %K[2](L*mu), (4, 2) = %K[3](L*mu), (4, 3) = %K[4](L*mu), (4, 4) = %K[1](L*mu)})

Determinant(M);
simplify(value(%)) = 0;
eq_tmp := isolate(%, cos(L*mu));

%K[1](L*mu)^2-%K[2](L*mu)*%K[4](L*mu)

1/2+(1/2)*cosh(L*mu)*cos(L*mu) = 0

cos(L*mu) = -1/cosh(L*mu)

Let lambda = L*mu.  Then the characteristic equation takes the form

eq := algsubs(L*mu=lambda, eq_tmp);

cos(lambda) = -1/cosh(lambda)

Here are the graphs of the two sides of the characteristic equation:

plot([lhs,rhs](eq), lambda=0..3*Pi, color=["red","Green"]);

lambda__1, lambda__2, lambda__3 :=
        fsolve(eq, lambda=Pi/2..3*Pi, maxsols=3);

1.875104068, 4.694091132, 7.854757438

params := { L=1 };

{L = 1}

mu__1, mu__2, mu__3 := (lambda__1, lambda__2, lambda__3) /~ eval(L, params);

1.875104068, 4.694091132, 7.854757438

plots:-display([
        plot_beam(M, mu__1, params),
        plot_beam(M, mu__2, params),
        plot_beam(M, mu__3, params)],
        color=["red","Green","blue"],
        legend=[mode1, mode2, mode3]);

 

 

A dual-span pinned-pinned-free cantilever beam

 

We have a two-span beam of span lengths L__1 and L__2, with the left end of the
first span pinned, the right end of the second span free, and the interface

between the spans on a pinned support.  .

M := build_matrix(
        M_left_pinned,
        M_right_free(mu,L[2]),
                [ M_interface(mu,L[1])] );

Matrix(8, 8, {(1, 1) = 1, (1, 2) = 0, (1, 3) = 0, (1, 4) = 0, (1, 5) = 0, (1, 6) = 0, (1, 7) = 0, (1, 8) = 0, (2, 1) = 0, (2, 2) = 0, (2, 3) = 1, (2, 4) = 0, (2, 5) = 0, (2, 6) = 0, (2, 7) = 0, (2, 8) = 0, (3, 1) = %K[1](L[1]*mu), (3, 2) = %K[2](L[1]*mu), (3, 3) = %K[3](L[1]*mu), (3, 4) = %K[4](L[1]*mu), (3, 5) = -1, (3, 6) = 0, (3, 7) = 0, (3, 8) = 0, (4, 1) = %K[4](L[1]*mu), (4, 2) = %K[1](L[1]*mu), (4, 3) = %K[2](L[1]*mu), (4, 4) = %K[3](L[1]*mu), (4, 5) = 0, (4, 6) = -1, (4, 7) = 0, (4, 8) = 0, (5, 1) = %K[3](L[1]*mu), (5, 2) = %K[4](L[1]*mu), (5, 3) = %K[1](L[1]*mu), (5, 4) = %K[2](L[1]*mu), (5, 5) = 0, (5, 6) = 0, (5, 7) = -1, (5, 8) = 0, (6, 1) = 0, (6, 2) = 0, (6, 3) = 0, (6, 4) = 0, (6, 5) = 1, (6, 6) = 0, (6, 7) = 0, (6, 8) = 0, (7, 1) = 0, (7, 2) = 0, (7, 3) = 0, (7, 4) = 0, (7, 5) = %K[3](L[2]*mu), (7, 6) = %K[4](L[2]*mu), (7, 7) = %K[1](L[2]*mu), (7, 8) = %K[2](L[2]*mu), (8, 1) = 0, (8, 2) = 0, (8, 3) = 0, (8, 4) = 0, (8, 5) = %K[2](L[2]*mu), (8, 6) = %K[3](L[2]*mu), (8, 7) = %K[4](L[2]*mu), (8, 8) = %K[1](L[2]*mu)})

The characteristic equation:

Determinant(M);
eq_tmp1 := simplify(value(%)) = 0;

%K[4](L[1]*mu)^2*%K[4](L[2]*mu)*%K[2](L[2]*mu)-%K[4](L[1]*mu)^2*%K[1](L[2]*mu)^2-%K[4](L[1]*mu)*%K[1](L[1]*mu)*%K[4](L[2]*mu)*%K[1](L[2]*mu)+%K[4](L[1]*mu)*%K[1](L[1]*mu)*%K[3](L[2]*mu)*%K[2](L[2]*mu)+%K[4](L[2]*mu)*%K[1](L[2]*mu)*%K[3](L[1]*mu)*%K[2](L[1]*mu)-%K[4](L[2]*mu)*%K[2](L[2]*mu)*%K[2](L[1]*mu)^2+%K[1](L[2]*mu)^2*%K[2](L[1]*mu)^2-%K[3](L[2]*mu)*%K[2](L[2]*mu)*%K[3](L[1]*mu)*%K[2](L[1]*mu)

(1/4)*(-cos(L[1]*mu)*sinh(L[2]*mu)*cos(L[2]*mu)+cos(L[1]*mu)*sin(L[2]*mu)*cosh(L[2]*mu)+2*sin(L[1]*mu)*cosh(L[2]*mu)*cos(L[2]*mu)+2*sin(L[1]*mu))*sinh(L[1]*mu)+(1/4)*sin(L[1]*mu)*cosh(L[1]*mu)*(sinh(L[2]*mu)*cos(L[2]*mu)-sin(L[2]*mu)*cosh(L[2]*mu)) = 0

That equation does not seem to be amenable to simplification.  The special case of L__1 = L__2, however,

is much nicer:

eval(eq_tmp1, {L[1]=L, L[2]=L}):
eq_tmp2 := simplify(%*4);

(4*cosh(L*mu)*cos(L*mu)+2)*sinh(L*mu)*sin(L*mu)+cos(L*mu)^2-cosh(L*mu)^2 = 0

Let L*mu = lambda:

eq_tmp3 := algsubs(L*mu=lambda, eq_tmp2);

(4*cosh(lambda)*cos(lambda)+2)*sinh(lambda)*sin(lambda)+cos(lambda)^2-cosh(lambda)^2 = 0

That expression grows like cosh(lambda)^2, so we divide through by that to obtain

a better-behaved equation

eq := eq_tmp3/cosh(lambda)^2;

((4*cosh(lambda)*cos(lambda)+2)*sinh(lambda)*sin(lambda)+cos(lambda)^2-cosh(lambda)^2)/cosh(lambda)^2 = 0

plot(lhs(eq), lambda=0..2*Pi);

Here are the first three roots:

lambda__1, lambda__2, lambda__3 :=
         fsolve(eq, lambda=1e-3..2*Pi, maxsols=3);

1.505915458, 3.413100675, 4.437274304

params := { L[1]=1, L[2]=1 };

{L[1] = 1, L[2] = 1}

mu__1, mu__2, mu__3 := (lambda__1, lambda__2, lambda__3) /~ eval(L[1], params);

1.505915458, 3.413100675, 4.437274304

plots:-display([
        plot_beam(M, mu__1, params),
        plot_beam(M, mu__2, params),
        plot_beam(M, mu__3, params)],
        color=["red","Green","blue"],
        legend=[mode1, mode2, mode3]);

 

 

A dual-span clamped-pinned-free cantilever beam

 

We have a two-span beam of span lengths L__1 and L__2, with the left end of the
first span clamped, the right end of the second span free, and the interface

between the spans on a pinned support.  This is different from the previous

case only in the nature of the left boundary condition.

M := build_matrix(
        M_left_clamped,
        M_right_free(mu,L[2]),
        [ M_interface(mu,L[1])] );

Matrix(8, 8, {(1, 1) = 1, (1, 2) = 0, (1, 3) = 0, (1, 4) = 0, (1, 5) = 0, (1, 6) = 0, (1, 7) = 0, (1, 8) = 0, (2, 1) = 0, (2, 2) = 1, (2, 3) = 0, (2, 4) = 0, (2, 5) = 0, (2, 6) = 0, (2, 7) = 0, (2, 8) = 0, (3, 1) = %K[1](L[1]*mu), (3, 2) = %K[2](L[1]*mu), (3, 3) = %K[3](L[1]*mu), (3, 4) = %K[4](L[1]*mu), (3, 5) = -1, (3, 6) = 0, (3, 7) = 0, (3, 8) = 0, (4, 1) = %K[4](L[1]*mu), (4, 2) = %K[1](L[1]*mu), (4, 3) = %K[2](L[1]*mu), (4, 4) = %K[3](L[1]*mu), (4, 5) = 0, (4, 6) = -1, (4, 7) = 0, (4, 8) = 0, (5, 1) = %K[3](L[1]*mu), (5, 2) = %K[4](L[1]*mu), (5, 3) = %K[1](L[1]*mu), (5, 4) = %K[2](L[1]*mu), (5, 5) = 0, (5, 6) = 0, (5, 7) = -1, (5, 8) = 0, (6, 1) = 0, (6, 2) = 0, (6, 3) = 0, (6, 4) = 0, (6, 5) = 1, (6, 6) = 0, (6, 7) = 0, (6, 8) = 0, (7, 1) = 0, (7, 2) = 0, (7, 3) = 0, (7, 4) = 0, (7, 5) = %K[3](L[2]*mu), (7, 6) = %K[4](L[2]*mu), (7, 7) = %K[1](L[2]*mu), (7, 8) = %K[2](L[2]*mu), (8, 1) = 0, (8, 2) = 0, (8, 3) = 0, (8, 4) = 0, (8, 5) = %K[2](L[2]*mu), (8, 6) = %K[3](L[2]*mu), (8, 7) = %K[4](L[2]*mu), (8, 8) = %K[1](L[2]*mu)})

The characteristic equation:

Determinant(M);
eq_tmp1 := simplify(value(%)) = 0;

%K[2](L[1]*mu)*%K[4](L[1]*mu)*%K[4](L[2]*mu)*%K[1](L[2]*mu)-%K[2](L[1]*mu)*%K[4](L[1]*mu)*%K[3](L[2]*mu)*%K[2](L[2]*mu)+%K[2](L[1]*mu)*%K[3](L[1]*mu)*%K[4](L[2]*mu)*%K[2](L[2]*mu)-%K[2](L[1]*mu)*%K[3](L[1]*mu)*%K[1](L[2]*mu)^2-%K[1](L[1]*mu)*%K[4](L[1]*mu)*%K[4](L[2]*mu)*%K[2](L[2]*mu)+%K[1](L[1]*mu)*%K[4](L[1]*mu)*%K[1](L[2]*mu)^2-%K[3](L[1]*mu)^2*%K[4](L[2]*mu)*%K[1](L[2]*mu)+%K[3](L[1]*mu)^2*%K[3](L[2]*mu)*%K[2](L[2]*mu)

(1/4)*((-cos(L[1]*mu)*sin(L[2]*mu)-sin(L[1]*mu)*cos(L[2]*mu))*cosh(L[2]*mu)+cos(L[1]*mu)*sinh(L[2]*mu)*cos(L[2]*mu)-sin(L[1]*mu))*cosh(L[1]*mu)+(1/4)*(sinh(L[1]*mu)*cos(L[1]*mu)*cos(L[2]*mu)+sin(L[2]*mu))*cosh(L[2]*mu)+(1/4)*sinh(L[1]*mu)*cos(L[1]*mu)-(1/4)*sinh(L[2]*mu)*cos(L[2]*mu) = 0

That equation does not seem to be amenable to simplification.  The special case of L__1 = L__2, however,

is much nicer:

eval(eq_tmp1, {L[1]=L, L[2]=L}):
eq_tmp2 := simplify(%*4);

-2*cosh(L*mu)*cos(L*mu)*(sin(L*mu)*cosh(L*mu)-sinh(L*mu)*cos(L*mu)) = 0

Let L*mu = lambda:

eq_tmp3 := algsubs(L*mu=lambda, eq_tmp2);

-2*cosh(lambda)*cos(lambda)*(sin(lambda)*cosh(lambda)-sinh(lambda)*cos(lambda)) = 0

That expression grows like cosh(lambda)^2, so we divide through by that to obtain

a better-behaved equation

eq := eq_tmp3/cosh(lambda)^2;

-2*cos(lambda)*(sin(lambda)*cosh(lambda)-sinh(lambda)*cos(lambda))/cosh(lambda) = 0

plot(lhs(eq), lambda=0..2*Pi);

Here are the first three roots:

lambda__1, lambda__2, lambda__3 :=
         fsolve(eq, lambda=1e-3..2*Pi, maxsols=3);

1.570796326, 3.926602312, 4.712388980

params := { L[1]=1, L[2]=1 };

{L[1] = 1, L[2] = 1}

mu__1, mu__2, mu__3 := (lambda__1, lambda__2, lambda__3) /~ eval(L[1], params);

1.570796326, 3.926602312, 4.712388980

plots:-display([
        plot_beam(M, mu__1, params),
        plot_beam(M, mu__2, params),
        plot_beam(M, mu__3, params)],
        color=["red","Green","blue"],
        legend=[mode1, mode2, mode3]);

 

 

A triple-span free-pinned-pinned-free beam

 

We have a triple-span beam with span lengths of L__1, L__2, L__3.  The beam is supported

on two internal pinned supports.  The extreme ends of the beam are free.

The graphs of the first three modes agree with those

in Figure 3.22 on page 70 of the 2007 article of
Henrik Åkesson, Tatiana Smirnova, Thomas Lagö, and Lars Håkansson.

In the caption of Figure 2.12 on page 28 the span lengths are given
as "`L__1`="3.5, "`L__2`="5.0, "`L__3`="21.5.

interface(rtablesize=12):

M := build_matrix(
        M_left_free,
        M_right_free(mu,L[3]),
        [ M_interface(mu,L[1]), M_interface(mu,L[2])] );

Matrix(12, 12, {(1, 1) = 0, (1, 2) = 0, (1, 3) = 1, (1, 4) = 0, (1, 5) = 0, (1, 6) = 0, (1, 7) = 0, (1, 8) = 0, (1, 9) = 0, (1, 10) = 0, (1, 11) = 0, (1, 12) = 0, (2, 1) = 0, (2, 2) = 0, (2, 3) = 0, (2, 4) = 1, (2, 5) = 0, (2, 6) = 0, (2, 7) = 0, (2, 8) = 0, (2, 9) = 0, (2, 10) = 0, (2, 11) = 0, (2, 12) = 0, (3, 1) = %K[1](L[1]*mu), (3, 2) = %K[2](L[1]*mu), (3, 3) = %K[3](L[1]*mu), (3, 4) = %K[4](L[1]*mu), (3, 5) = -1, (3, 6) = 0, (3, 7) = 0, (3, 8) = 0, (3, 9) = 0, (3, 10) = 0, (3, 11) = 0, (3, 12) = 0, (4, 1) = %K[4](L[1]*mu), (4, 2) = %K[1](L[1]*mu), (4, 3) = %K[2](L[1]*mu), (4, 4) = %K[3](L[1]*mu), (4, 5) = 0, (4, 6) = -1, (4, 7) = 0, (4, 8) = 0, (4, 9) = 0, (4, 10) = 0, (4, 11) = 0, (4, 12) = 0, (5, 1) = %K[3](L[1]*mu), (5, 2) = %K[4](L[1]*mu), (5, 3) = %K[1](L[1]*mu), (5, 4) = %K[2](L[1]*mu), (5, 5) = 0, (5, 6) = 0, (5, 7) = -1, (5, 8) = 0, (5, 9) = 0, (5, 10) = 0, (5, 11) = 0, (5, 12) = 0, (6, 1) = 0, (6, 2) = 0, (6, 3) = 0, (6, 4) = 0, (6, 5) = 1, (6, 6) = 0, (6, 7) = 0, (6, 8) = 0, (6, 9) = 0, (6, 10) = 0, (6, 11) = 0, (6, 12) = 0, (7, 1) = 0, (7, 2) = 0, (7, 3) = 0, (7, 4) = 0, (7, 5) = %K[1](L[2]*mu), (7, 6) = %K[2](L[2]*mu), (7, 7) = %K[3](L[2]*mu), (7, 8) = %K[4](L[2]*mu), (7, 9) = -1, (7, 10) = 0, (7, 11) = 0, (7, 12) = 0, (8, 1) = 0, (8, 2) = 0, (8, 3) = 0, (8, 4) = 0, (8, 5) = %K[4](L[2]*mu), (8, 6) = %K[1](L[2]*mu), (8, 7) = %K[2](L[2]*mu), (8, 8) = %K[3](L[2]*mu), (8, 9) = 0, (8, 10) = -1, (8, 11) = 0, (8, 12) = 0, (9, 1) = 0, (9, 2) = 0, (9, 3) = 0, (9, 4) = 0, (9, 5) = %K[3](L[2]*mu), (9, 6) = %K[4](L[2]*mu), (9, 7) = %K[1](L[2]*mu), (9, 8) = %K[2](L[2]*mu), (9, 9) = 0, (9, 10) = 0, (9, 11) = -1, (9, 12) = 0, (10, 1) = 0, (10, 2) = 0, (10, 3) = 0, (10, 4) = 0, (10, 5) = 0, (10, 6) = 0, (10, 7) = 0, (10, 8) = 0, (10, 9) = 1, (10, 10) = 0, (10, 11) = 0, (10, 12) = 0, (11, 1) = 0, (11, 2) = 0, (11, 3) = 0, (11, 4) = 0, (11, 5) = 0, (11, 6) = 0, (11, 7) = 0, (11, 8) = 0, (11, 9) = %K[3](L[3]*mu), (11, 10) = %K[4](L[3]*mu), (11, 11) = %K[1](L[3]*mu), (11, 12) = %K[2](L[3]*mu), (12, 1) = 0, (12, 2) = 0, (12, 3) = 0, (12, 4) = 0, (12, 5) = 0, (12, 6) = 0, (12, 7) = 0, (12, 8) = 0, (12, 9) = %K[2](L[3]*mu), (12, 10) = %K[3](L[3]*mu), (12, 11) = %K[4](L[3]*mu), (12, 12) = %K[1](L[3]*mu)})

params := { L[1]=3.5, L[2]=5.0, L[3]=21.5 };

{L[1] = 3.5, L[2] = 5.0, L[3] = 21.5}

The characteristic equation

simplify(Determinant(M)):
value(%):
eq := simplify(eval(%, params));

(1/8)*(((2*sin(5.*mu)*sinh(5.*mu)*cos(3.5*mu)+sin(3.5*mu)*(cos(5.*mu)*sinh(5.*mu)-sin(5.*mu)*cosh(5.*mu)))*cosh(3.5*mu)-sinh(3.5*mu)*(cos(5.*mu)*sinh(5.*mu)-sin(5.*mu)*cosh(5.*mu))*cos(3.5*mu)+2*sinh(5.*mu)*sin(5.*mu))*cos(21.5*mu)+sin(21.5*mu)*(((cos(5.*mu)*sinh(5.*mu)-sin(5.*mu)*cosh(5.*mu))*cos(3.5*mu)-cos(5.*mu)*cosh(5.*mu)*sin(3.5*mu)+sin(3.5*mu))*cosh(3.5*mu)+sinh(3.5*mu)*(cos(5.*mu)*cosh(5.*mu)-1)*cos(3.5*mu)+cos(5.*mu)*sinh(5.*mu)-sin(5.*mu)*cosh(5.*mu)))*cosh(21.5*mu)-(1/8)*sinh(21.5*mu)*(((cos(5.*mu)*sinh(5.*mu)-sin(5.*mu)*cosh(5.*mu))*cos(3.5*mu)-cos(5.*mu)*cosh(5.*mu)*sin(3.5*mu)+sin(3.5*mu))*cosh(3.5*mu)+sinh(3.5*mu)*(cos(5.*mu)*cosh(5.*mu)-1)*cos(3.5*mu)+cos(5.*mu)*sinh(5.*mu)-sin(5.*mu)*cosh(5.*mu))*cos(21.5*mu)+(1/8)*(2*sin(5.*mu)*sinh(5.*mu)*cos(3.5*mu)+sin(3.5*mu)*(cos(5.*mu)*sinh(5.*mu)-sin(5.*mu)*cosh(5.*mu)))*cosh(3.5*mu)-(1/8)*sinh(3.5*mu)*(cos(5.*mu)*sinh(5.*mu)-sin(5.*mu)*cosh(5.*mu))*cos(3.5*mu)+(1/4)*sinh(5.*mu)*sin(5.*mu)

plot(eq, mu=0..0.4);

That graphs grows much too fast to be useful.  We moderate it by dividing through
the fastest growing cosh term:

plot(eq/cosh(21.5*mu), mu=0..0.4);

Here are the first three roots:

mu__1, mu__2, mu__3 := fsolve(eq, mu=1e-3..0.4, maxsols=3);

0.8148236435e-1, .2065743153, .3465175842

plots:-display([
        plot_beam(M, mu__1, params),
        plot_beam(M, mu__2, params),
        plot_beam(M, mu__3, params)],
        color=["red","Green","blue"],
        legend=[mode1, mode2, mode3]);

 

 

A triple-span free-spring-spring-free beam

 

We have a triple-span beam with span lengths of L__1, L__2, L__3.  The beam is supported

on two internal springy supports.  The extreme ends of the beam are free.
The numerical data is from the worksheet posted on July 29, 2020 at
https://www.mapleprimes.com/questions/230085-Elasticfoundation-Multispan-EulerBernoulli-Beamthreespan#comment271586

The problem is pretty much the same as the one in the previous section, but the

pinned supports have been replaced by spring supports.

This section's calculations require a little more precision than

Maple's default of 10 digits:

Digits := 15;

15

interface(rtablesize=12):

M := build_matrix(M_left_free, M_right_free(mu,L[3]),
                        [ M_interface(mu, L[1], 'Kd'=kd/(E*I), 'Kt'=kt/(E*I)),
                           M_interface(mu, L[2], 'Kd'=kd/(E*I), 'Kt'=kt/(E*I)) ]);

Matrix(12, 12, {(1, 1) = 0, (1, 2) = 0, (1, 3) = 1, (1, 4) = 0, (1, 5) = 0, (1, 6) = 0, (1, 7) = 0, (1, 8) = 0, (1, 9) = 0, (1, 10) = 0, (1, 11) = 0, (1, 12) = 0, (2, 1) = 0, (2, 2) = 0, (2, 3) = 0, (2, 4) = 1, (2, 5) = 0, (2, 6) = 0, (2, 7) = 0, (2, 8) = 0, (2, 9) = 0, (2, 10) = 0, (2, 11) = 0, (2, 12) = 0, (3, 1) = %K[1](L[1]*mu), (3, 2) = %K[2](L[1]*mu), (3, 3) = %K[3](L[1]*mu), (3, 4) = %K[4](L[1]*mu), (3, 5) = -1, (3, 6) = 0, (3, 7) = 0, (3, 8) = 0, (3, 9) = 0, (3, 10) = 0, (3, 11) = 0, (3, 12) = 0, (4, 1) = %K[4](L[1]*mu), (4, 2) = %K[1](L[1]*mu), (4, 3) = %K[2](L[1]*mu), (4, 4) = %K[3](L[1]*mu), (4, 5) = 0, (4, 6) = -1, (4, 7) = 0, (4, 8) = 0, (4, 9) = 0, (4, 10) = 0, (4, 11) = 0, (4, 12) = 0, (5, 1) = %K[3](L[1]*mu), (5, 2) = %K[4](L[1]*mu), (5, 3) = %K[1](L[1]*mu), (5, 4) = %K[2](L[1]*mu), (5, 5) = 0, (5, 6) = -I*kt/(E*mu), (5, 7) = -1, (5, 8) = 0, (5, 9) = 0, (5, 10) = 0, (5, 11) = 0, (5, 12) = 0, (6, 1) = %K[2](L[1]*mu), (6, 2) = %K[3](L[1]*mu), (6, 3) = %K[4](L[1]*mu), (6, 4) = %K[1](L[1]*mu), (6, 5) = -I*kd/(E*mu^3), (6, 6) = 0, (6, 7) = 0, (6, 8) = -1, (6, 9) = 0, (6, 10) = 0, (6, 11) = 0, (6, 12) = 0, (7, 1) = 0, (7, 2) = 0, (7, 3) = 0, (7, 4) = 0, (7, 5) = %K[1](L[2]*mu), (7, 6) = %K[2](L[2]*mu), (7, 7) = %K[3](L[2]*mu), (7, 8) = %K[4](L[2]*mu), (7, 9) = -1, (7, 10) = 0, (7, 11) = 0, (7, 12) = 0, (8, 1) = 0, (8, 2) = 0, (8, 3) = 0, (8, 4) = 0, (8, 5) = %K[4](L[2]*mu), (8, 6) = %K[1](L[2]*mu), (8, 7) = %K[2](L[2]*mu), (8, 8) = %K[3](L[2]*mu), (8, 9) = 0, (8, 10) = -1, (8, 11) = 0, (8, 12) = 0, (9, 1) = 0, (9, 2) = 0, (9, 3) = 0, (9, 4) = 0, (9, 5) = %K[3](L[2]*mu), (9, 6) = %K[4](L[2]*mu), (9, 7) = %K[1](L[2]*mu), (9, 8) = %K[2](L[2]*mu), (9, 9) = 0, (9, 10) = -I*kt/(E*mu), (9, 11) = -1, (9, 12) = 0, (10, 1) = 0, (10, 2) = 0, (10, 3) = 0, (10, 4) = 0, (10, 5) = %K[2](L[2]*mu), (10, 6) = %K[3](L[2]*mu), (10, 7) = %K[4](L[2]*mu), (10, 8) = %K[1](L[2]*mu), (10, 9) = -I*kd/(E*mu^3), (10, 10) = 0, (10, 11) = 0, (10, 12) = -1, (11, 1) = 0, (11, 2) = 0, (11, 3) = 0, (11, 4) = 0, (11, 5) = 0, (11, 6) = 0, (11, 7) = 0, (11, 8) = 0, (11, 9) = %K[3](L[3]*mu), (11, 10) = %K[4](L[3]*mu), (11, 11) = %K[1](L[3]*mu), (11, 12) = %K[2](L[3]*mu), (12, 1) = 0, (12, 2) = 0, (12, 3) = 0, (12, 4) = 0, (12, 5) = 0, (12, 6) = 0, (12, 7) = 0, (12, 8) = 0, (12, 9) = %K[2](L[3]*mu), (12, 10) = %K[3](L[3]*mu), (12, 11) = %K[4](L[3]*mu), (12, 12) = %K[1](L[3]*mu)})

Calculate the determinant of M.  The result is quite large, so we terminate the command
with a colon so that not to have to look at the result.  If we bothered to peek,  however, we
will see that the determinant has a factor of 1/mu^8.  But that quite obvious by looking at the
entries of the matrix shown above. Two of its rows have 1/mu in them and another two have
1/mu^3. When multiplied, they produce the overall factor of 1/mu^8.

DET := Determinant(M):

Here are the parameters that the determinant depends on:

indets(DET, name);   # the parameters that make up M

{E, I, kd, kt, mu, L[1], L[2], L[3]}

So we provide values for those parameters:

params := {
        L[1]=3.5, L[2]=5.0, L[3]=21.5,
    kd=4.881e9, kt=1.422e4,
    E = 2.05e11, I = 1.1385e-7 };

{E = 0.205e12, I = 0.11385e-6, kd = 0.4881e10, kt = 0.1422e5, L[1] = 3.5, L[2] = 5.0, L[3] = 21.5}

Here is the characteristic equation.  We multiply it by mu^8 to remove the singularity at mu = 0.

mu^8 * value(DET):
eq := eval(%, params):

plot(eq, mu=0..0.6);

We can't see anything useful in that graph.  Let's limit the vertical range:

plot(eq, mu=0..0.6, view=-1e8..1e8);

mu__1, mu__2, mu__3 := fsolve(eq, mu=1e-3..0.6, maxsols=3);

0.843267855136311e-1, .211829475814118, .355117213056777

plots:-display([
        plot_beam(M, mu__1, params),
        plot_beam(M, mu__2, params),
        plot_beam(M, mu__3, params)],
        color=["red","Green","blue"],
        legend=[mode1, mode2, mode3]);

Digits := 10;  # restore the default

10

 

 

 

 

 

 

Download krylov-duncan.mw

 

I am very pleased to announce that we have just begun a free public beta for a new online product, Maple Learn!  Maple Learn is a dynamic online environment designed specifically for teaching and learning math and solving math problems, from mid-high school to second year university.

Maple Learn is much more than just a sophisticated online graphing calculator. We tried to create an environment that focuses on the things instructors and students in those courses have told us that they want/need in a math tool. Here are some of my personal favorites:

  • You can get the answer directly if you want it, but you can also work out problems line-by-line as you would on paper, or use a combination of manual steps and computations performed by Maple Learn.  
  • The plot of your expression shows up as soon as you start typing, so plotting is super easy
  • You can parameterize expressions with a single mouse click, and then watch the plots and results change as you modify the values using sliders
  • It’s really easy to share your work, so when a student asks for help, the helper can always see exactly what they’ve done so far (and it will be legible, unlike a lot of the tutoring I’ve done!)

Free public beta: Maple Learn is freely available to instructors and students as part of an on-going public beta program. Please try it out, and feel free to use with your classes this fall.

Visit Maple Learn for more information, and to try it out. We hope you find it useful, and we’d love to know what you think.

One way to find the equation of an ellipse circumscribed around a triangle. In this case, we solve a linear system of equations, which is obtained after fixing the values of two variables ( t1 and t2). These are five equations: three equations of the second-order curve at three vertices of the triangle and two equations of a linear combination of the coordinates of the gradient of the curve equation.
The solving of system takes place in the ELS procedure. When solving, hyperboles appear, so the program has a filter. The filter passes the equations of ellipses based on by checking the values of the invariants of the second-order curves.
FOR_ELL_ТR_OUT_PROCE_F.mw  ( Fixed comments in the text  01, 08, 2020)

An attempt to find the equation of an ellipse inscribed in a given triangle. 
The program works on the basis of the ELS procedure.  After the procedure works, the  solutions are filtered.
ELS procedure solves the system of equations f1, f2, f3, f4, f5 for the coefficients of the second-order curve.
The equation f1 corresponds to the condition that the side of the triangle intersects t a curve of the second order at one point.
The equation f2 corresponds to the condition that the point x1,x2  belongs to a curve of the second order.
Equation f3 corresponds to the condition that the side of the triangle is tangent to the second order curve at the point x1,x2.
The equation f4 is similar to the equation f2, and the equation f5 is similar to the equation f3.
FOR_ELL_ТR_PROCE.mw
For example

The purpose of this document is:

a) to correct the physics that was used in the document "Minimal Road Radius for Highway Superelevation" recently submitted to the Maple Applications Center;

b) to confirm the values found in the manual for the American Association of State Highway and Transportation Officials (AASHTO) that engineers use to design and build these banked curves are physically sound. 

c) to highlight the pedagogical value inherent in the Maple language to distinguish between assignment ( := )  and equivalence (  =  );

d) but most importantly, to demonstrate the pedagogical value Maple has in thinking about solving a problem involving a physical process. Given Maple's symbolic mathematics capabilities, one can implement a top-down approach to the physics and the mathematics, working from the general principle to the specific example. This allows one to avoid the types of errors that occur when translating the problem into a bottom up approach, from specific values of the example to the general principle, an approach that is required by most other computational systems.

I hope that others are willing to continue to engage in discussions related to the pedagogical value of Maple beyond mathematics.

I was asked to post this document to both here and the Maple Applications Center

[Document edited for typos.]

Minimum_Road_Radius.mw

The equations of motion in curvilinear coordinates, tensor notation and Coriolis force

``

 

The formulation of the equations of motion of a particle is simple in Cartesian coordinates using vector notation. However, depending on the problem, for example when describing the motion of a particle as seen from a non-inertial system of references (e.g. a rotating planet, like earth), there is advantage in using curvilinear coordinates and also tensor notation. When the particle's movement is observed from such a rotating referential, we also see "acceleration" that is not due to any force but to the fact that the referential itself is accelerated. The material below discusses and formulates these topics, and derives the expression for the Coriolis and centripetal force in cylindrical coordinates as seen from a rotating system of references.

 

The computation below is reproducible in Maple 2020 using the Maplesoft Physics Updates v.681 or newer.

 

Vector notation

 

Generally speaking the equations of motion of a particle are easy to formulate: the position vector is a function of time, the velocity is its first derivative and the acceleration is its second derivative. For instance, in Cartesian coordinates

with(Physics); with(Vectors)

r_(t) = x(t)*_i+y(t)*_j+z(t)*_k

r_(t) = x(t)*_i+y(t)*_j+z(t)*_k

(1)

diff(r_(t) = x(t)*_i+y(t)*_j+z(t)*_k, t)

diff(r_(t), t) = (diff(x(t), t))*_i+(diff(y(t), t))*_j+(diff(z(t), t))*_k

(2)

diff(diff(r_(t), t) = (diff(x(t), t))*_i+(diff(y(t), t))*_j+(diff(z(t), t))*_k, t)

diff(diff(r_(t), t), t) = (diff(diff(x(t), t), t))*_i+(diff(diff(y(t), t), t))*_j+(diff(diff(z(t), t), t))*_k

(3)

Newton's 2nd law, that in an inertial system of references when there is force there is acceleration and viceversa, is then given by

F_(t) = m*lhs(diff(diff(r_(t), t), t) = (diff(diff(x(t), t), t))*_i+(diff(diff(y(t), t), t))*_j+(diff(diff(z(t), t), t))*_k)

F_(t) = m*(diff(diff(r_(t), t), t))

(4)

where `#mover(mi("F"),mo("&rarr;"))`(t) = F__x(t)*`#mover(mi("i"),mo("&and;"))`+F__y(t)*`#mover(mi("j"),mo("&and;"))`+F__z(t)*`#mover(mi("k"),mo("&and;"))` represents the total force acting on the particle. This vectorial equation represents three second order differential equations which, for given initial conditions, can be integrated to arrive at a closed form expression for `#mover(mi("r"),mo("&rarr;"))`(t) as a function of t.

 

Tensor notation

 

In Cartesian coordinates, the tensorial form of the equations (4) is also straightforward. In a flat spacetime - Galilean system of references - the three space coordinates x, y, z form a 3D tensor, and so does its first derivate and the second one. Set the spacetime to be 3-dimensional and Euclidean and use lowercaselatin indices for the corresponding tensors

Setup(coordinates = cartesian, metric = Euclidean, dimension = 3, spacetimeindices = lowercaselatin)

`The dimension and signature of the tensor space are set to `[3, `+ + +`]

 

`Systems of spacetime coordinates are:`*{X = (x, y, z)}

 

_______________________________________________________

 

`The Euclidean metric in coordinates `*[x, y, z]

 

_______________________________________________________

 

Physics:-g_[mu, nu] = Matrix(%id = 18446744078329083054)

 

_______________________________________________________

(5)

The position, velocity and acceleration vectors are expressed in tensor notation as done in (1), (2) and (3)

X[j](t)

(X)[j](t)

(6)

diff((X)[j](t), t)

Physics:-Vectors:-diff((Physics:-SpaceTimeVector[j](X))(t), t)

(7)

diff(Physics[Vectors]:-diff((Physics[SpaceTimeVector][j](X))(t), t), t)

Physics:-Vectors:-diff(Physics:-Vectors:-diff((Physics:-SpaceTimeVector[j](X))(t), t), t)

(8)

Setting a tensor F__j(t) to represent the three Cartesian components of the force

Define(F[j] = [F__x(t), F__y(t), F__z(t)])

`Defined objects with tensor properties`

 

{Physics:-Dgamma[a], F[j], Physics:-Psigma[a], Physics:-d_[a], Physics:-g_[a, b], Physics:-LeviCivita[a, b, c], Physics:-SpaceTimeVector[a](X)}

(9)

Newton's 2nd law (4), now expressed in tensorial notation, is given by

F[j] = m*Physics[Vectors]:-diff(Physics[Vectors]:-diff((Physics[SpaceTimeVector][j](X))(t), t), t)

F[j] = m*(diff(diff((Physics:-SpaceTimeVector[j](X))(t), t), t))

(10)

The three differential equations behind this tensorial form of (4) are as expected

TensorArray(F[j] = m*(diff(diff((Physics[SpaceTimeVector][j](X))(t), t), t)), output = setofequations)

{F__x(t) = m*(diff(diff(x(t), t), t)), F__y(t) = m*(diff(diff(y(t), t), t)), F__z(t) = m*(diff(diff(z(t), t), t))}

(11)

Things are straightforward in Cartesian coordinates because the components of the line element `#mover(mi("dr"),mo("&rarr;"))` = dx*`#mover(mi("i"),mo("&and;"))`+dy*`#mover(mi("j"),mo("&and;"))`+dz*`#mover(mi("k"),mo("&and;"))` are exactly the components of the tensor d(X[j])

TensorArray(d_(X[j]))

Array(%id = 18446744078354237310)

(12)

and so, the form factors (see related Mapleprimes post) are all equal to 1.

 

In the case of no external forces, `#mover(mi("F"),mo("&rarr;"))`(t) = 0 and 0 = F[j] and the equations of motion, whose solution are the trajectory, can be formulated as the path of minimal length between two points, a geodesic. In the case under consideration, because the spacetime is flat (Galilean) those two points lie on a plane, we are talking about Euclidean geometry, that information is encoded in the metric (the 3x3 identity matrix (5)), and the geodesic is a straight line. The differential equations of this geodesic are thus the equations of motion (11) with  `#mover(mi("F"),mo("&rarr;"))`(t) = 0, and can be computed using Geodesics

 

Geodesics(t)

[diff(diff(z(t), t), t) = 0, diff(diff(y(t), t), t) = 0, diff(diff(x(t), t), t) = 0]

(13)

 

Curvilinear coordinates

 

Vector notation

 

The form of these equations in the case of curvilinear coordinates, for example in cylindrical or spherical variables, is obtained performing a change of coordinates.

tr := `~`[`=`]([X], ChangeCoordinates([X], cylindrical))

[x = rho*cos(phi), y = rho*sin(phi), z = z]

(14)

This change keeps the z axis unchanged, so the corresponding unit vector `#mover(mi("k"),mo("&and;"))` remains unchanged.

Changing the basis and coordinates used to represent the position vector `#mover(mi("r"),mo("&rarr;"))`(t) = x(t)*`#mover(mi("i"),mo("&and;"))`+y(t)*`#mover(mi("j"),mo("&and;"))`+z(t)*`#mover(mi("k"),mo("&and;"))`, it becomes

r_(t) = ChangeBasis(rhs(r_(t) = x(t)*_i+y(t)*_j+z(t)*_k), cylindrical, alsocomponents)

r_(t) = z(t)*_k+rho(t)*_rho(t)

(15)

where since in (1) the coordinates (x, y, z) depend on t, in (15), not just rho(t) and z(t) but also the unit vector `#mover(mi("&rho;",fontstyle = "normal"),mo("&and;"))`(t)depends on t. The velocity is computed as usual, differentiating

diff(r_(t) = z(t)*_k+rho(t)*_rho(t), t)

diff(r_(t), t) = (diff(z(t), t))*_k+(diff(rho(t), t))*_rho(t)+rho(t)*(diff(phi(t), t))*_phi(t)

(16)

The second term is due to the dependency of `#mover(mi("&rho;",fontstyle = "normal"),mo("&and;"))` on the coordinate phi together with the chain rule diff(`#mover(mi("&rho;",fontstyle = "normal"),mo("&and;"))`(t), t) = (diff(`#mover(mi("&rho;",fontstyle = "normal"),mo("&and;"))`, phi))*(diff(phi(t), t)) and (diff(`#mover(mi("&rho;",fontstyle = "normal"),mo("&and;"))`, phi))*(diff(phi(t), t)) = `#mover(mi("&phi;",fontstyle = "normal"),mo("&and;"))`(t)*(diff(phi(t), t)). The dependency of curvilinear unit vectors on the coordinates is automatically taken into account when differentiating due to the Setup setting geometricdifferentiation = true.

 

For the acceleration,

diff(diff(r_(t), t) = (diff(z(t), t))*_k+(diff(rho(t), t))*_rho(t)+rho(t)*(diff(phi(t), t))*_phi(t), t)

diff(diff(r_(t), t), t) = _rho(t)*(diff(diff(rho(t), t), t)-rho(t)*(diff(phi(t), t))^2)+_phi(t)*(2*(diff(rho(t), t))*(diff(phi(t), t))+rho(t)*(diff(diff(phi(t), t), t)))+(diff(diff(z(t), t), t))*_k

(17)

where the term involving (diff(phi(t), t))^2 comes from differentiating `#mover(mi("&phi;",fontstyle = "normal"),mo("&and;"))`(t) in (16) taking into account the dependency of `#mover(mi("&phi;",fontstyle = "normal"),mo("&and;"))` on the coordinate "phi." This result can also be obtained by directly changing variables in the acceleration diff(`#mover(mi("r"),mo("&rarr;"))`(t), t, t), in equation (3)

lhs(diff(diff(r_(t), t), t) = (diff(diff(x(t), t), t))*_i+(diff(diff(y(t), t), t))*_j+(diff(diff(z(t), t), t))*_k) = ChangeBasis(rhs(diff(diff(r_(t), t), t) = (diff(diff(x(t), t), t))*_i+(diff(diff(y(t), t), t))*_j+(diff(diff(z(t), t), t))*_k), cylindrical, alsocomponents)

diff(diff(r_(t), t), t) = _rho(t)*(diff(diff(rho(t), t), t)-rho(t)*(diff(phi(t), t))^2)+_phi(t)*(2*(diff(rho(t), t))*(diff(phi(t), t))+rho(t)*(diff(diff(phi(t), t), t)))+(diff(diff(z(t), t), t))*_k

(18)

 

Newton's 2nd law becomes

F_(t) = m*rhs(diff(diff(r_(t), t), t) = _rho(t)*(diff(diff(rho(t), t), t)-rho(t)*(diff(phi(t), t))^2)+_phi(t)*(2*(diff(rho(t), t))*(diff(phi(t), t))+rho(t)*(diff(diff(phi(t), t), t)))+(diff(diff(z(t), t), t))*_k)

F_(t) = m*(_rho(t)*(diff(diff(rho(t), t), t)-rho(t)*(diff(phi(t), t))^2)+_phi(t)*(2*(diff(rho(t), t))*(diff(phi(t), t))+rho(t)*(diff(diff(phi(t), t), t)))+(diff(diff(z(t), t), t))*_k)

(19)

In the absence of external forces, equating to 0 the vector components (coefficients of the unit vectors) of the acceleration diff(`#mover(mi("r"),mo("&rarr;"))`(t), t, t)we get the system of differential equations in cylindrical coordinates whose solution is the trajectory of the particle expressed in the ("rho(t),phi(t),z(t))"

`~`[`=`]({coeffs(rhs(diff(diff(r_(t), t), t) = _rho(t)*(diff(diff(rho(t), t), t)-rho(t)*(diff(phi(t), t))^2)+_phi(t)*(2*(diff(rho(t), t))*(diff(phi(t), t))+rho(t)*(diff(diff(phi(t), t), t)))+(diff(diff(z(t), t), t))*_k), [`#mover(mi("&rho;",fontstyle = "normal"),mo("&and;"))`(t), `#mover(mi("&phi;",fontstyle = "normal"),mo("&and;"))`(t), `#mover(mi("k"),mo("&and;"))`])}, 0)

{2*(diff(rho(t), t))*(diff(phi(t), t))+rho(t)*(diff(diff(phi(t), t), t)) = 0, diff(diff(rho(t), t), t)-rho(t)*(diff(phi(t), t))^2 = 0, diff(diff(z(t), t), t) = 0}

(20)

solve({2*(diff(rho(t), t))*(diff(phi(t), t))+rho(t)*(diff(diff(phi(t), t), t)) = 0, diff(diff(rho(t), t), t)-rho(t)*(diff(phi(t), t))^2 = 0, diff(diff(z(t), t), t) = 0}, {diff(phi(t), t, t), diff(rho(t), t, t), diff(z(t), t, t)})

{diff(diff(phi(t), t), t) = -2*(diff(rho(t), t))*(diff(phi(t), t))/rho(t), diff(diff(rho(t), t), t) = rho(t)*(diff(phi(t), t))^2, diff(diff(z(t), t), t) = 0}

(21)

In this formulation (21) with `#mover(mi("F"),mo("&rarr;"))`(t) = 0, although diff(z(t), t, t) = 0, no acceleration in the `#mover(mi("k"),mo("&and;"))` direction, is naturally expected, the same cannot be said about the other two equations for diff(phi(t), t, t) and diff(rho(t), t, t). Those two equations are discussed below under Coriolis and Centripetal forces. The key observation at this point, however, is that the right-hand sides of both unexpected equations involve diff(phi(t), t), rotation around the z axis.

 

Tensor notation

 

The same equations (19) and (21) result when using tensor notation. For that purpose, one can transform the position, velocity and acceleration tensors (6), (7), (8), but since they are expressed as functions of a parameter (the time), it is simpler to transform only the underlying metric using TransformCoordinates. That has the advantage that all the geometrical subtleties of curvilinear coordinates, like scale factors and dependency of unit vectors on curvilinear coordinates, get automatically, very succinctly, encoded in the metric:

TransformCoordinates(tr, g_[j, k], [rho, phi, z], setmetric)

_______________________________________________________

 

`Coordinates: `[rho, phi, z]*`. Signature: `(`+ + +`)

 

_______________________________________________________

 

Physics:-g_[a, b] = Matrix(%id = 18446744078263848958)

 

_______________________________________________________

(22)

The computation of geodesics assumes that the coordinates (rho, phi, z) depend on a parameter. That parameter is passed as the first argument to Geodesics

Geodesics(t)

[diff(diff(rho(t), t), t) = rho(t)*(diff(phi(t), t))^2, diff(diff(phi(t), t), t) = -2*(diff(rho(t), t))*(diff(phi(t), t))/rho(t), diff(diff(z(t), t), t) = 0]

(23)

These equations of motion (23) are the same as the equations (21) computed using standard vector notation, differentiating and taking into account the dependency of curvilinear unit vectors on the curvilinear coordinates in (16) and (17).  One of the interesting features of computing with tensors is, as said, that all those geometrical algebraic subtleties of curvilinear coordinates are automatically encoded in the metric (22).

 

To understand how are the geodesic equations computed in one go in (23), one can perform the calculation in steps:

1. 

Make rho be a function of t directly in the metric

2. 

Compute - not the final form of the equations (23) - but the intermediate form expressing the geodesic equation using tensor notation, in terms of Christoffel symbols

3. 

Compute the components of that tensorial equation for the geodesic (using TensorArray)

 

For step 1, we have

subs(rho = rho(t), g_[])

Physics:-g_[a, b] = Matrix(%id = 18446744078354237910)

(24)

Set this metric where `&equiv;`(rho, rho(t))

"Setup(?):"

_______________________________________________________

 

`Coordinates: `[rho, phi, z]*`. Signature: `(`+ + +`)

 

_______________________________________________________

 

Physics:-g_[a, b] = Matrix(%id = 18446744078342604430)

 

_______________________________________________________

(25)

Step 2, the geodesic equations in tensor notation with the coordinates depending on the time t are computed passing the optional argument tensornotation

Geodesics(t, tensornotation)

diff(diff((Physics:-SpaceTimeVector[`~a`](X))(t), t), t)+Physics:-Christoffel[`~a`, b, c]*(diff((Physics:-SpaceTimeVector[`~b`](X))(t), t))*(diff((Physics:-SpaceTimeVector[`~c`](X))(t), t)) = 0

(26)

Step 3: compute the components of this tensorial equation

TensorArray(diff(diff((Physics[SpaceTimeVector][`~a`](X))(t), t), t)+Physics[Christoffel][`~a`, b, c]*(diff((Physics[SpaceTimeVector][`~b`](X))(t), t))*(diff((Physics[SpaceTimeVector][`~c`](X))(t), t)) = 0, output = listofequations)

[diff(diff(rho(t), t), t)-rho(t)*(diff(phi(t), t))^2 = 0, diff(diff(phi(t), t), t)+2*(diff(rho(t), t))*(diff(phi(t), t))/rho(t) = 0, diff(diff(z(t), t), t) = 0]

(27)

These are the same equations (23).

 

Having the tensorial equation (26) is also useful to formulate the equations of motion in tensorial form in the presence of force. For that purpose, redefine the contravariant tensor F^j to represent the force in the cylindrical basis

Define(F[`~j`] = [`F__&rho;`(t), `F__&phi;`(t), F__z(t)])

`Defined objects with tensor properties`

 

{Physics:-D_[a], Physics:-Dgamma[a], F[j], Physics:-Psigma[a], Physics:-Ricci[a, b], Physics:-Riemann[a, b, c, d], Physics:-Weyl[a, b, c, d], Physics:-d_[a], Physics:-g_[a, b], Physics:-Christoffel[a, b, c], Physics:-Einstein[a, b], Physics:-LeviCivita[a, b, c], Physics:-SpaceTimeVector[a](X)}

(28)

 

Newton's 2nd law (19)

F_(t) = m*(_rho(t)*(diff(diff(rho(t), t), t)-rho(t)*(diff(phi(t), t))^2)+_phi(t)*(2*(diff(rho(t), t))*(diff(phi(t), t))+rho(t)*(diff(diff(phi(t), t), t)))+(diff(diff(z(t), t), t))*_k)

F_(t) = m*(_rho(t)*(diff(diff(rho(t), t), t)-rho(t)*(diff(phi(t), t))^2)+_phi(t)*(2*(diff(rho(t), t))*(diff(phi(t), t))+rho(t)*(diff(diff(phi(t), t), t)))+(diff(diff(z(t), t), t))*_k)

(29)

now using tensorial notation, becomes

F[`~a`] = m*lhs(diff(diff((Physics[SpaceTimeVector][`~a`](X))(t), t), t)+Physics[Christoffel][`~a`, b, c]*(diff((Physics[SpaceTimeVector][`~b`](X))(t), t))*(diff((Physics[SpaceTimeVector][`~c`](X))(t), t)) = 0)

F[`~a`] = m*(diff(diff((Physics:-SpaceTimeVector[`~a`](X))(t), t), t)+Physics:-Christoffel[`~a`, b, c]*(diff((Physics:-SpaceTimeVector[`~b`](X))(t), t))*(diff((Physics:-SpaceTimeVector[`~c`](X))(t), t)))

(30)

TensorArray(F[`~a`] = m*(diff(diff((Physics[SpaceTimeVector][`~a`](X))(t), t), t)+Physics[Christoffel][`~a`, b, c]*(diff((Physics[SpaceTimeVector][`~b`](X))(t), t))*(diff((Physics[SpaceTimeVector][`~c`](X))(t), t))))

Array(%id = 18446744078329063774)

(31)

where we recall (see related Mapleprimes post) that to obtain the vector components entering `#mover(mi("F"),mo("&rarr;"))`(t) from these tensor components F[`~a`]we need to multiply the latter by the scale factors (1, rho(t), 1), the component of `#mover(mi("F"),mo("&rarr;"))`(t) in the direction of `#mover(mi("&phi;",fontstyle = "normal"),mo("&and;"))` is given by rho(t)*m*(diff(phi(t), t, t)+2*(diff(rho(t), t))*(diff(phi(t), t))/rho(t)).

 

Coriolis force and centripetal force

 

After changing variables the position vector of the particle got expressed in (15) as

 

`#mover(mi("r"),mo("&rarr;"))`(t) = z(t)*`#mover(mi("k"),mo("&and;"))`+`#mover(mi("&rho;",fontstyle = "normal"),mo("&and;"))`(t)*rho(t)

 

A distinction needs to be made here, according to whether the unit vector `#mover(mi("&rho;",fontstyle = "normal"),mo("&and;"))` depends or not on the time t, the former being the general case. When `#mover(mi("&rho;",fontstyle = "normal"),mo("&and;"))` is a constant, the value of the coordinate phi - the angle between `#mover(mi("&rho;",fontstyle = "normal"),mo("&and;"))` and the x axis - does not change, there is no rotation around the z axis. On the other hand, when `&equiv;`(`#mover(mi("&rho;",fontstyle = "normal"),mo("&and;"))`, `#mover(mi("&rho;",fontstyle = "normal"),mo("&and;"))`(t)), the orientation of `#mover(mi("&rho;",fontstyle = "normal"),mo("&and;"))` and so the coordinate phi changes with time, so either the force `#mover(mi("F"),mo("&rarr;"))`(t)acting on the particle has a component in the `#mover(mi("&phi;",fontstyle = "normal"),mo("&and;"))` direction that produces rotation around the z axis, or the system of references - itself - is rotating around the z axis.

 

Likewise, the expression (15)  can represent the position vector measured in the original Galilean (inertial) system of references, where a force `#mover(mi("F"),mo("&rarr;"))`(t)is producing rotation around the z axis, or it can represent the position of the particle measured in a rotating, non-inertial system references. Hence the transformation (14) can also be interpreted in two different ways, as representing a choice of different functions (generalized coordinates) to represent the position of the particle in the original inertial system of references, or it can represent a transformation from an inertial to another rotating, non-inertial, system of references.

 

This equivalence between the trajectory of a particle subject to an external force, as observed in an inertial system of references, and the same trajectory observed from a non-inertial accelerated system of references where there is no external force, actually at the root of the formulation of general relativity, is also well known in classical mechanics. The (apparent) forces observed in the rotating non-inertial system of references, due only to its acceleration, are called Coriolis and centripetal forces.

 

To see that the equations

 

diff(rho(t), t, t) = (diff(phi(t), t))^2*rho(t), diff(phi(t), t, t) = -2*(diff(phi(t), t))*(diff(rho(t), t))/rho(t)

 

that appeared in (27) when in the inertial system of references `#mover(mi("F"),mo("&rarr;"))`(t) = m*(diff(`#mover(mi("r"),mo("&rarr;"))`(t), t, t)) and m*(diff(`#mover(mi("r"),mo("&rarr;"))`(t), t, t)) = 0, are related to the Coriolis and centripetal forces in the non-inertial referencial, following [1] introduce a vector `#mover(mi("&omega;",fontstyle = "normal"),mo("&rarr;"))`representing the rotation of that referencial around the z axis (when, in the inertial system of references, the non-inertial system rotates clockwise, in the non-inertial system phi increases in value in the anti-clockwise direction)

`#mover(mi("&omega;",fontstyle = "normal"),mo("&rarr;"))` = -(diff(phi(t), t))*`#mover(mi("k"),mo("&and;"))`

omega_ = -(diff(phi(t), t))*_k

(32)

According to [1], (39.7), the acceleration diff(`#mover(mi("r"),mo("&rarr;"))`(t), t, t)in the inertial system is expressed in terms of the quantities in the non-inertial rotating system by the sum of the following three vectorial terms.

First, the components of the acceleration `#mover(mi("a"),mo("&rarr;"))`(t)measured in the non-inertial system are given by the second derivatives of the coordinates (rho(t), phi(t), z(t)) multiplied by the scale factors, which in this case are given by (1, rho(t), 1) (see this post in Mapleprimes)

`#mover(mi("a"),mo("&rarr;"))`(t) = (diff(rho(t), t, t))*`#mover(mi("&rho;",fontstyle = "normal"),mo("&and;"))`(t)+rho(t)*(diff(phi(t), t, t))*`#mover(mi("&phi;",fontstyle = "normal"),mo("&and;"))`(t)+(diff(z(t), t, t))*`#mover(mi("k"),mo("&and;"))`

a_(t) = (diff(diff(rho(t), t), t))*_rho(t)+rho(t)*(diff(diff(phi(t), t), t))*_phi(t)+(diff(diff(z(t), t), t))*_k

(33)

Second, the Coriolis force divided by the mass, by definition given by

2*`&x`(diff(r_(t), t) = (diff(z(t), t))*_k+(diff(rho(t), t))*_rho(t)+rho(t)*(diff(phi(t), t))*_phi(t), omega_ = -(diff(phi(t), t))*_k)

2*Physics:-Vectors:-`&x`(diff(r_(t), t), omega_) = -2*rho(t)*(diff(phi(t), t))^2*_rho(t)+2*(diff(rho(t), t))*(diff(phi(t), t))*_phi(t)

(34)

Third the centripetal force divided by the mass, defined by

`&x`(omega_ = -(diff(phi(t), t))*_k, `&x`(r_(t) = z(t)*_k+rho(t)*_rho(t), omega_ = -(diff(phi(t), t))*_k))

Physics:-Vectors:-`&x`(omega_, Physics:-Vectors:-`&x`(r_(t), omega_)) = rho(t)*(diff(phi(t), t))^2*_rho(t)

(35)

Adding these three terms,

(a_(t) = (diff(diff(rho(t), t), t))*_rho(t)+rho(t)*(diff(diff(phi(t), t), t))*_phi(t)+(diff(diff(z(t), t), t))*_k)+(2*Physics[Vectors][`&x`](diff(r_(t), t), omega_) = -2*rho(t)*(diff(phi(t), t))^2*_rho(t)+2*(diff(rho(t), t))*(diff(phi(t), t))*_phi(t))+(Physics[Vectors][`&x`](omega_, Physics[Vectors][`&x`](r_(t), omega_)) = rho(t)*(diff(phi(t), t))^2*_rho(t))

a_(t)+2*Physics:-Vectors:-`&x`(diff(r_(t), t), omega_)+Physics:-Vectors:-`&x`(omega_, Physics:-Vectors:-`&x`(r_(t), omega_)) = _rho(t)*(diff(diff(rho(t), t), t)-rho(t)*(diff(phi(t), t))^2)+_phi(t)*(2*(diff(rho(t), t))*(diff(phi(t), t))+rho(t)*(diff(diff(phi(t), t), t)))+(diff(diff(z(t), t), t))*_k

(36)

So that

diff(`#mover(mi("r"),mo("&rarr;"))`(t), t, t) = lhs(a_(t)+2*Physics[Vectors][`&x`](diff(r_(t), t), omega_)+Physics[Vectors][`&x`](omega_, Physics[Vectors][`&x`](r_(t), omega_)) = _rho(t)*(diff(diff(rho(t), t), t)-(diff(phi(t), t))^2*rho(t))+_phi(t)*(2*(diff(phi(t), t))*(diff(rho(t), t))+rho(t)*(diff(diff(phi(t), t), t)))+(diff(diff(z(t), t), t))*_k)

diff(diff(r_(t), t), t) = a_(t)+2*Physics:-Vectors:-`&x`(diff(r_(t), t), omega_)+Physics:-Vectors:-`&x`(omega_, Physics:-Vectors:-`&x`(r_(t), omega_))

(37)

and where the right-hand side of (36) is, actually, the result computed lines above in (18)

diff(diff(r_(t), t), t) = _rho(t)*(diff(diff(rho(t), t), t)-(diff(phi(t), t))^2*rho(t))+_phi(t)*(2*(diff(phi(t), t))*(diff(rho(t), t))+rho(t)*(diff(diff(phi(t), t), t)))+(diff(diff(z(t), t), t))*_k

diff(diff(r_(t), t), t) = _rho(t)*(diff(diff(rho(t), t), t)-rho(t)*(diff(phi(t), t))^2)+_phi(t)*(2*(diff(rho(t), t))*(diff(phi(t), t))+rho(t)*(diff(diff(phi(t), t), t)))+(diff(diff(z(t), t), t))*_k

(38)

rhs(a_(t)+2*Physics[Vectors][`&x`](diff(r_(t), t), omega_)+Physics[Vectors][`&x`](omega_, Physics[Vectors][`&x`](r_(t), omega_)) = _rho(t)*(diff(diff(rho(t), t), t)-(diff(phi(t), t))^2*rho(t))+_phi(t)*(2*(diff(phi(t), t))*(diff(rho(t), t))+rho(t)*(diff(diff(phi(t), t), t)))+(diff(diff(z(t), t), t))*_k)-rhs(diff(diff(r_(t), t), t) = _rho(t)*(diff(diff(rho(t), t), t)-(diff(phi(t), t))^2*rho(t))+_phi(t)*(2*(diff(phi(t), t))*(diff(rho(t), t))+rho(t)*(diff(diff(phi(t), t), t)))+(diff(diff(z(t), t), t))*_k)

0

(39)

From (37), in the absence of external forces diff(`#mover(mi("r"),mo("&rarr;"))`(t), t, t) = 0 and so the acceleration `#mover(mi("a"),mo("&rarr;"))`(t) measured in the rotating system is given by the sum of the Coriolis and centripetal accelerations

isolate(rhs(diff(diff(r_(t), t), t) = a_(t)+2*Physics[Vectors][`&x`](diff(r_(t), t), omega_)+Physics[Vectors][`&x`](omega_, Physics[Vectors][`&x`](r_(t), omega_))), `#mover(mi("a"),mo("&rarr;"))`(t))

a_(t) = -2*Physics:-Vectors:-`&x`(diff(r_(t), t), omega_)-Physics:-Vectors:-`&x`(omega_, Physics:-Vectors:-`&x`(r_(t), omega_))

(40)

In other words: in the absence of external forces, the acceleration of a particle observed in a rotating (non-inertial) system of references is not zero.

 

Expressing this equation (40) in terms of (rho(t), phi(t), z(t)) we get

subs(a_(t) = (diff(diff(rho(t), t), t))*_rho(t)+rho(t)*(diff(diff(phi(t), t), t))*_phi(t)+(diff(diff(z(t), t), t))*_k, -(2*Physics[Vectors][`&x`](diff(r_(t), t), omega_) = -2*rho(t)*(diff(phi(t), t))^2*_rho(t)+2*(diff(rho(t), t))*(diff(phi(t), t))*_phi(t)), Physics[Vectors][`&x`](omega_, Physics[Vectors][`&x`](r_(t), omega_)) = rho(t)*(diff(phi(t), t))^2*_rho(t), a_(t) = -2*Physics[Vectors][`&x`](diff(r_(t), t), omega_)-Physics[Vectors][`&x`](omega_, Physics[Vectors][`&x`](r_(t), omega_)))

(diff(diff(rho(t), t), t))*_rho(t)+rho(t)*(diff(diff(phi(t), t), t))*_phi(t)+(diff(diff(z(t), t), t))*_k = rho(t)*(diff(phi(t), t))^2*_rho(t)-2*(diff(rho(t), t))*(diff(phi(t), t))*_phi(t)

(41)

resulting in the three equations

((diff(diff(rho(t), t), t))*_rho(t)+rho(t)*(diff(diff(phi(t), t), t))*_phi(t)+(diff(diff(z(t), t), t))*_k = rho(t)*(diff(phi(t), t))^2*_rho(t)-2*(diff(rho(t), t))*(diff(phi(t), t))*_phi(t)).`#mover(mi("&rho;",fontstyle = "normal"),mo("&and;"))`(t)

diff(diff(rho(t), t), t) = rho(t)*(diff(phi(t), t))^2

(42)

((diff(diff(rho(t), t), t))*_rho(t)+rho(t)*(diff(diff(phi(t), t), t))*_phi(t)+(diff(diff(z(t), t), t))*_k = rho(t)*(diff(phi(t), t))^2*_rho(t)-2*(diff(rho(t), t))*(diff(phi(t), t))*_phi(t)).`#mover(mi("&phi;",fontstyle = "normal"),mo("&and;"))`(t)

rho(t)*(diff(diff(phi(t), t), t)) = -2*(diff(rho(t), t))*(diff(phi(t), t))

(43)

((diff(diff(rho(t), t), t))*_rho(t)+rho(t)*(diff(diff(phi(t), t), t))*_phi(t)+(diff(diff(z(t), t), t))*_k = rho(t)*(diff(phi(t), t))^2*_rho(t)-2*(diff(rho(t), t))*(diff(phi(t), t))*_phi(t)).`#mover(mi("k"),mo("&and;"))`

diff(diff(z(t), t), t) = 0

(44)

which are the equations returned by Geodesics in (23)

[diff(diff(rho(t), t), t) = rho(t)*(diff(phi(t), t))^2, diff(diff(phi(t), t), t) = -2*(diff(rho(t), t))*(diff(phi(t), t))/rho(t), diff(diff(z(t), t), t) = 0]

[diff(diff(rho(t), t), t) = rho(t)*(diff(phi(t), t))^2, diff(diff(phi(t), t), t) = -2*(diff(rho(t), t))*(diff(phi(t), t))/rho(t), diff(diff(z(t), t), t) = 0]

(45)

``

References

[1] L.D. Landau, E.M. Lifchitz, Mechanics, Course of Theoretical Physics, Volume 1, third edition, Elsevier.


 

Download The_equations_of_motion_in_curvilinear_coordinates.mw

Edgardo S. Cheb-Terrab
Physics, Differential Equations and Mathematical Functions, Maplesoft

 

POSSIBILITIES OF USING OF COMPUTER IN MATHEMATICS

AND OTHER APPLICATIONS IN INCLUSIVE EDUCATION

 

Alsu Gibadullina, math teacher, math teacher

Secondary and high school # 57, Kazan, Russia

 

In recent years Russia actively promoted and implemented the so-called inclusive education (IE). According to the materials of Alliance of human rights organizations “Save the children”: "Inclusive or included education is the term used to describe the process of teaching children with special needs in General (mass) schools. In the base of inclusive education is the ideology that ensures equal treatment for everybody, but creates special conditions for children with special educational needs. Experience shows that any of the rigid educational system some part of the children is eliminated because the system is not ready to meet the individual needs of these children in education. This ratio is 15 % of the total number of children in schools and so retired children become separated and excluded from the overall system. You need to understand that children do not fail but the system excludes children. Inclusive approaches can support such children in learning and achieving success. Inclusive education seeks to develop a methodology that recognizes that all children have different learning needs tries to develop a more flexible approach to teaching. If teaching and learning will become more effective as a result of the changes that introduces Inclusive Education, all children will win (not only children with special needs)."

There are many examples of schools that have developed their strategy implementation of IE, published many theoretical and practical benefits of inclusion today. All of them have common, immaterial character. There is no description of specific techniques implementing the principles of IO in the teaching of certain disciplines, particularly mathematics. In this paper we propose a methodology that can be successfully used as in “mathematical education for everyone", also for the development of scientific creativity of children at all age levels of the school in any discipline.

According to the author, one of the most effective methodological tools for education is a computer mathematics (SCM, SSM). Despite the fact that the SCM were created for solving problems of higher mathematics, their ability can successfully implement them in the school system. This opinion is confirmed by more than 10–year-old author's experience of using the package Maple in teaching mathematics. At first it was just learning the system and primitive using its. Then author’s interactive demonstrations, e-books, programs of analytical testing were created by the tools packages. The experience of using the system Maple in teaching inevitably led to the necessity to teach children to work with it. At first worked a club who has studied  the principles of the package’s work, which eventually turned into a research laboratory for the use of computer technology. Later on its basis there was created the scientific student society (SSS) “GEODROMhic" which operates to this day. The main idea and the ultimate goal of SSS – individual research activities on their interests with the creation of the author electronic scientific journals through the use of computer mathematics Maple. The field of application of the package was very diverse: from mathematics to psychology and cultural phenomena. SSS’s activity is very high: they are constantly and successfully participate in intellectual high-level activities (up to international). Obviously, not every SSS’s member reaches high end result. However, even basic experience in scientific analysis, modeling, intelligent  using of the computer teaches the critical thinking skills, evokes interest to new knowledge, allows you to experience their practical value, gives rise to the development of creative abilities. As a result, the research activity improves intellectual culture, self-esteem and confidence, resistance to external negative influence. It should be noted, however, that members of the scientific societies are not largely the so-called "gifted", than ordinary teenagers with different level of intellectual development and mathematical training. With all this especially valuable is that the student is dealing with mathematical signs and mathematical models, which contributes to the development of mathematical thinking.

From 2007 to 2012. our school (№. 57 of Kazan) was the experimental platform of the Republican study SKM (Maple) and other application software in the system of school mathematical education under the scientific management of Professor Yu. G. Ignatyev of Kazan state University (KF(P)U).

Practical adaptation of computer mathematics and other useful information technologies to the educational process of secondary schools passed and continues to work in the following areas:

  1. The creation of a demonstration support of different types of the lessons;
  2. The embedding of computing to the structure of practical trainings;
  3. In the form of additional courses - studying of computer applications through which you can conduct a research of the mathematical model and create animated presentation videos, web-pages, auto-run menu;
  4. Students’ working on individual creative projects:
    • construction of computer mathematical models;
    • creating author's programs with elements of scientific researches;
    • students create interactive computer-based tutorials;
    • creation of an electronic library of creative projects;
  5. The participation of students  in the annual competitions and scientific conferences for students;
  6. The accumulation and dissemination of new methodological experience.

Traditionally, the training system has the structure: explanation of a new →  the solution of tasks→ check, self-test and control → planning of the new unit  with using analysis. However, the main task types: 1) elementary, 2) basic, 3) combined, 4) integrated, 5) custom. With the increasing the level of training a number of basic tasks are growing and some integrated tasks become a class of basic. Thus, the library for basic operations is generated. The decision of the educational task occurs on the way of mastering the theoretical knowledge of mathematical modeling: 1) analysis of conditions (and construction drawing), 2) the search for methods of solution, 3) computation, 4) the researching.

To introduce computer mathematics in this training system, you can:

  • At demonstrations. For example, with Maplе facilities you can create a step-by-step interactive and animated images, which are essentially the exact graphic interpretation of mathematical models.
  • If we have centralized collective control.
  • If students have individual self-control.
  • In the analysis of the conditions of the problem, for the construction and visualization of its model, the study of this model.
  • In the computations.
  • In practical training of different forms.
  • In individual projects with elements of research.

In the learning process with the use of computer mathematics in the school a library of themed demonstrations, tasks of different levels and purpose, programs, analytical testing, research projects is generated. With all this especially valuable is that the student is dealing with mathematical signs and mathematical models. Addiction to them processed in the course of working with them it’s unobtrusive, naturally, organically.

Mathematical modelling (MM) is increasingly becoming an important component of scientific research. Today's powerful engineering tools allow to carry out numerous computer experiments, deep and full enough of exploring the object, without significant cost painless. Thus provided the advantages of theoretical approach, and experiment. The integration of information technology and MM method is effective, safe and economical. This explains its wide distribution and makes unavoidable component of scientific and technical progress.

Modeling is a natural process for people, it is present in any activity. The introduction with nature by man occurs through constant  modeling of situation, comparing with the basic models and past experience by them. Method for modeling, abstraction as a method of understanding the world is therefore  an effective method of learning. Training activities associated with the creative transformation of the subject. The main feature of educational training activities is the systematic solution of the educational problems. The connection of the principles of developmental education, mathematical modeling, neurophysiological mechanisms of the brain and experience with Maple leads to the following conclusions: the method of mathematical modeling is not only scientific research but also the way of development of thinking in general; computer and mathematical environment (Maple), which is a powerful tool for scientific simulation can be considered as the elementary analogue of the brain. These qualities of computer mathematics led to the idea of using it not only as an effective methodological tool but as a means of nurturing the thinking and development of mental functions of the brain. To study this effect the school psychologist conducted a test, which confirm the observations: the dynamics of intellectual options students  who working with Maple compares favorably with peers. In the process of doing computer math, in particular Maple, are involved in complex different mental functions. It is in the inclusion of all mental functions is the essence of integration of learning, its educational character. And this, in turn, contributes to the solution of moral problems.

Long-term work with computer mathematics led to the idea to use it as a tool for psychological testing. One of the projects focuses on the psychology and contains authors Maple–tests to identify the degree of development of different mental functions. Interactive mathematical environment  gives a wide variability and creative testing capabilities. Moreover, Maple–test can be used not only as diagnostic but also as educational, and corrective. This technology was tested in one of psycho neurological dispensaries a few years ago.

Currently, one of the author's students, the so-called "homeworkers", the second year is a young man with a diagnosis, categories F20, who does not speak and does not write independently. It was impossible to get feedback from him and have basic training until then author have begun to apply computer-based tools, including system Maple. Working with the computer tests and mathematical objects helps to see not only the mental and even the simplest thinking movement, but also emotional movement!

In general, the effectiveness of the implementation in the structure of educational process of secondary school of new organizational forms of the use of computers, based on the application of the symbolic mathematics package Maple, computer modeling and information technology, has many aspects, here are some of them:

  • goals of education and math in particular;
  • additional education;
  • methodical and professional opportunities;
  • theoretical education;
  • modeling;
  • scientific creativity;
  • logical language;
  • spatial thinking, the development of the imagination;
  • programming skills;
  • the specificity of technical translation;
  • differentiation and individualization of educational process;
  • prospective teaching, the continuity of higher and secondary mathematics education;
  • development of creative abilities, research skills;
  • analytical thinking;
  • mathematical thinking;
  • mental diagnosis;
  • mental correction.

       According to the author, the unique experience of the Kazan 57–th school suggests that computer mathematics (Maple) is the most effective also universal tool of new methods of inclusion. In recent decades, there are more children with a specific behavior, with a specific perception, not able to focus, with a poor memory, poor thinking processes. There are children, emotionally and intellectually healthy, or even ahead of their peers in one team together with them. High school should provide all the common core learning standards. It needed a variety of programs and techniques, as well as specialists who use them. Due to its remarkable features, computer mathematics, in particular Maple, can be used or be the basis of the variation of methods of physico-mathematical disciplines of inclusive education.

 

Research work

The fractal structure’s researching.

Modeling of the fractal sets in the Maple program.

Municipal Budget Educational Establishment “School # 57” of Kirov district of Kazan

    Author:  Ibragimova Evelina

    Scientific advisor:  Alsu Gibadullina - mathematics teacher

    Translator:  Aigul Gibadullina

In Russian

ИбрагимоваЭ_Фракталы.docx

In English

Fractals_researching.doc

 

     ( Images - in attached files )

Table of contents:

Introduction

I. Studying of principles of fractals construction

II. Applied meaning of fractals

III. Researching of computer programs of fractals construction

Conclusion

Introduction

We don’t usually think about main point of things, which we have to do with every day. Environmental systems are many-sided, ever–changing and compli­cated, but they are formed by a little number of rules. Fractals are apt example of this – they are complicated, but based on simple regulations. Self – similarity is the main attribute of them.  Just one fractal element contains genetically information about all system.  This information have a forming role for all system. But some­times self – similarity is partial.

Hypothesis of the research. Fractals and various elements of the Universe have general principles of structural organization. It is a reason why the theory of frac­tals is instrument for cognition of the world.

Purpose of the research. Studying  of genetic analogy  between fractals and alive and non-living Universe systems with computer-based mathematical mod­eling in the Mapel’s computer space.

Problems of the research. 

  1. studying of principles of fractal’s construction;
  2. Detection of  general fractal content of physical, biological and artificial sys­tems;
  3. Researching of applied meaning of fractals;
  4. Searching of computer programs which can generate all of known fractals;
  5. Researching of fractals witch was assigned by complex variables;
  6. Formation of innovative ideas of using of fractals in different spaces;

The object of research.  Fractal structures, nature and society objects.

The subject of research. Manifestation of fractality in different objects of the Universe.

Methods of the researching.

  1. Studying and analysis of literature of research’s problem;
  2. Searching of computer programs which can generate fractals and experimenta­tion with them;
  3. Comparative analysis of principles of generating of fractals and structural or­ganizations of physical, biological and artificial systems;
  4. Generation and formulation of innovation ways to applied significance of fractals.

Applied significance.

Researching of universality of fractals gives general academic way of cognition of nature and society.

 

I. Studying of principles of fractal construction

We can see fractal constructions everywhere – from crystals and different accu­mulations (clouds, rivers, mountains, stars etc.) to complex ecosystems and bio­logical objects like fern leafs or human brain. Actually, the idea that frac­tal principles are genetic code of our Universe has been discussed for about fifteen years. The first attempt of modeling of the process of the Universe construction was done by A.D. Linde. We also know that young Andrey Saharov had solved “fractal” calculation problem – it was already half a century ago.

Now therefore, fractal picture of the world was intuitively anticipated by human genius and it inevitably manifested in its activity.

Fractals are divided into four groups in the traditional way: geometric (constructive), algebraical (dynamical), stochastical and natural.

The first group of fractals is geometric. It is the most demonstrative type of fractals, because we can instantly observe the self-similarity in it. This type of fractals is constructed in the basis of original figure by her fragmentation and real­izing of different transformations. Geometrical fractals ensue on repeating of this procedure. They are using in computer-generated graphics for generating the pic­tures of leafs, bush, dimensional structures, etc.

The second large group of fractals -  algebraical. This fractals are constructed by iteration of nonlinear displays, which set by simple formulas. There are two types of algebraical fractals – linear and nonlinear. The first of them are determined by first order equates (linear equates), and the second by nonlinear equates, their na­ture significantly brighter, richer and more diverse than first order equates.

The third known group of fractals – stochastical. It is generated by method of random modification of options in iterative process. Therefore, we get an objects which is similar to nature fractals – asymmetrical trees, rugged coasts, mountain scenery etc. Such fractals are useful in modeling of land topography, sea–surface and electrolysis process etc.

The fourth group of fractals is nature, they are dominate in our life. The main difference of such fractals is that they can’t demonstrate infinite self-similarity. There is “physical fractals” term in the classification concept for nature fractals, this term notes their naturalness. These fractals are created with two simple opera­tions: copy and scaling. We can indefinitely list examples of nature fractals: hu­man’s circulatory system, crowns and leafs of trees, lungs, etc.  It is impossible to show all diversity of nature fractals.

 

II. Applied meaning of fractals

Fractals are having incredibly widespread application nowadays.

In the medicine. Human’s organism is consists from fractal structures: circulatory system, bronchus, muscle, neuron system, etc. So it’s naturally that fractal algorithms are useful in the medicine. For example, assessment of rhythm of fractal dimension while electric diagrams analyzing allows to make more infor­mative and accurate view on the beginning of specific illnesses. Also fractals are using for high–quality processing of  X–ray images (in the experimental way). There are designing of new methods in the gastroenterology which allows to ex­plore gastrointestinal tract organs qualitative and painlessly. Actually, there are discoveries of application of fractal methods for diagnosis and treatment of cancer.

In the science. There are no scientific and technical areas without fractal calcu­lations nowadays. It happens due to the fact that majority of nature objects have fractal structures and dimension: coasts of the continents; natural resources alloca­tion; magnetic field anomaly; dissemination of surges and vibrations in an elastic environments; porous, solid and fungal bodies; crystals; turbulence; dynamic of complicated systems in general, etc. Fractals are useful in geology, geophysics, in the oil sciences… It’s impossible to list all the spaces of adaptability.

Modeling of chaotic processes, particularly, in description of population models.

In telecommunications. It’s naturally that fractals are popular in this area too. Natan Coen is person, who had started to use fractal antennas. Fractal antenna has very compact form which provides high productivity. Due to this, such antennas are used in marine and air transport, in personal devises. The theory of fractal an­tennas has become an independent, well-developed apparatus of synthesis and analysis of electric small antenna (ESA) nowadays. There are developments of possibility of fractal compression of the traffic which is transmitted through the web. The goal of this is more effective transfer of information.

In the visual effects. The theory of fractals has penetrated area of formation of different kinds of visualizations and creation of special effects in the computer graphics soon. This theory are very useful in modeling of nature landscapes in computer games. The film industry also has not been without fractal geometry. All the special effects are based in fractal structure: mountain landscape, lava, flame, fog, large flows and the same. In the modern level of the cinema creation of the special effects is impossible without modeling of fractals.

In the economics. The Veirshtrass’s function is famous example of stochastic fractals. Analysis of graph of the function in interactive mathematic environment Maple allows to make sure in fractal structure of function by way of entry of dif­ferent ranges of graphic visualization. In any indefinitely small area of the part graph of the function absolutely looks like area of this part in the all . The property of function is used in analysis of stock markets.

In the architect. Notably, fractal structures have become useful in the architect more earlier than B. Mandelbrode had discovered them. S.B. Pomorov, Doctor of Architecture, Professor, member of Russian Architect Union, talks about applica­tion of fractal theory in the architect in his article. Let’s see on the part of this arti­cle:

“Fractal structures were found in configuration of African tribal villages, in an­cient Vavilon’s ziggurats, in iconic buildings of ancient India and China, in gothic temples of ancient Russia .

We can see the high fractal level in Malevich’s Architectons. But they were cre­ated long before emergence of the notion of fractals in the architect. People started to use fractal algorithms on the architect morphogenesis consciously after Mandel­brot’s publications. It was made possible to use fractal geometry for analyzing of architectural forms.

Fractals had become available to the majority of specialists due to the comput­erization.  They had been incredibly attractive for architectors, designers and town planners in aesthetic, philosophical and psychological way. Fractal theory was per­ceived on emotional, sensual level in the first phase. The constant repression lead­ing to loss of sensuality.

Application of fractal structures is effective on the microenvironment designing level: interior, household items and their elements. Fractal structures introduction allows creating a new surroundings for people with fractal properties on all levels. It corresponds to nesting spaces.

Fractal formations are not a panacea or a new era in the architect history. But it’s a new way to design architect forms which enriches the architectural theory and practice language. The understanding of na­ture fractal impacts on architectural view of urban environment. An attempt to de­velop the method of architectural designing which will base in an in-depth fractal forms is especially interesting. Will this method base only on mathematics? Will it be different methods and features symbiosis? The practice experiments and re­searches will show us. It’s safe to say that modern fractal approach can be useful not only for analysis, but also for harmonic order and nature’s chaos, architect which may be semantic dominant in nature and historic context.”

Computer systems. Fractal data compression is the most useful fractal applica­tion in the computer science. This kind of compression is based on the fact that it’s easy to describe the real world by fractal geometry. Nevertheless, pictures are compressed better than by other methods (like jpeg or gif). Another one advantage is that picture isn’t pixelateing while compressing. Often picture looks better after increase in fractal compressing.

Basic concept for fractal computer graphics is “Fractal triangle”. Also there are “Fractal figure”, “Fractal object”, “Fractal line”, “Fractal composition”, “Parent object” and “Heir object”. However, it should be noted that fractal computer graphics has recently received as a kind of computer graphics of 21th century.

 The opportunities of fractal computer graphics cannot be overemphasized. It allows creating abstract compositions where we can realize a lot of moves: hori­zontal and vertical, diagonal directions, symmetry and asymmetry etc. Only a few programmers from all over the world know about fractal graphics today.  To what can we compare fractal picture? For example, with complex structure of crystal or with snowflake, the elements of which line up in the one complex composition. This property of fractal object can be useful in ornament creating or designing of decorative composition. Algorithms of synthesis of fractal rates which allows to reproduce copy of any picture too close to the original are developed today.

 

III. Researching of computer programs of fractal construction

Strict algorithms of fractals are really good for programming. There are a lot of computer programs which introduce fractals nowadays. Computer mathematic systems are stand out from over programs, especially, Maple. Computer mathe­matics is mathematic modeling tool. So programming represents genetic structure of fractal in these systems and we can see precise submission of fractal structure in the picture while we enter a number of iterations . This is the reason why mathematic fractals should be studied with computer mathematics.  The last dis­covery in fractal geometry has been made possible by powerful, modern com­puters. Fractal property researching is almost completely based on computer cal­culations. It allows making computer experiments which reproduce processes and phenomenon which we can’t experiment in the real world with.

Our school has been worked with computer mathematics Maple package more than 10 years. So we have unique opportunity to experiment with mathematic fractals, thanks to that we can understand how initial values impact on outcome   (it is stochastic fractal). For example, we have understood the meaning of the fact that color is the fourth dimension: color changing leads to changing of physical char­acteristics. That is what astrophysics mean talking about “multicolored” of the Universe. While fractal constructing in interactive mathematic environment we re­ceived graphic models which was like A. D. Linde’s model of the Universe. Perhaps, it demonstrates that Universe has fractal structure.

 

Conclusion

Scientists and philosophers argue, can we talk about universality of fractals in recent years. There are two groups of two opposite positions. We agree with the fact that fractals are universal. Due to the fact that movement is inherent property of material also we always have fractals wherever we have movement.  

We are convinced that fractal is genetic property of the Universe, but it is not mean that all the Universe elements to the one fractal organization. In deployment process fractal structure is undergoing a lot of fluctuations (deviations) and a lot of points of bifurcation (branching) lead grate number of fractal development varie­ties.  

Therefore, we think that fractals are general academic method of real world re­searching. Fractals give the methodology of nature and community researching.

In transitional, chaotic period of society development social life become harder. Different social systems clash. Ancient values are exchanged for new values literally in all spaces. So it’s vitally important for science to develop behavior strategies which allow to avoid tragic mistakes. We think that fractals play important role in developing of such technologies. And – synergy is theory of evolving systems self- organization. But evolution happens on fractal principles, as we know now.

 

P.S.  Images - in attached files

 

Since we are getting many questions on how to create Math apps to add to the Maple Cloud. I wanted to go over the different GUI aspects of how you go about creating a Math App in Maple. The following Document also includes some code examples that are used in the the Math App but doesn't go into them in detail. For more details on the type of coding you do in a Math App see the DocumentTools package help page.

Some of the graphical features of the Math app don't display on Maple Primes so I'd recommend downloading this worksheet from here: HowToMathApp.mw to follow along.


 

NULL

How to make a Math App (An example of using the Document Tools).

 

This Document will provide a beginners guide on one way to make a Math app in Maple.

It will contain some coding examples as well as where to find different options in the user interface.

Step 1 Insert a Table

 

 

• 

When making a Math App in Maple I often start with a table. You can enter a table by going to Insert > Table...

  

 

• 

I often make the table 1 x 2 to start with as this gives an area for input and an area for the output (such as plots).

NULL

 

Add a plot component to one of the cells of the table

 

 

• 

From the Components  Palette you can add a Plot Component . Add it to the table by clicking and dragging it over.

 

 

NULL

NULL

Add another table inside the other cell

 

 

• 

In the other cell of the table I'll add another table to organize my use of buttons, sliders, and other components.
NULL

NULL

Add some components to the new table

 

 

• 

From the Components Palette I'll add a slider, or dial, or something else for interaction.

 

• 

You may also want a Math region for an area to enter functions and a button to tell Maple to do something with it.

 

NULL

NULL

Arrange the Components to look nice

 

 

• 

You can change how the components are placed either by resizing the tables or changing the text orientation of the contents of the cells.

 

NULL

Write some code for the interaction of the buttons.

 

 

• 

Using the DocumentTools  package there are lots of ways you can use the components. I often will start writing my code using a code edit region  as it provides better visualization for syntax. On MaplePrimes these display as collapsed so I will also include code blocks for the code.

 

NULL

NULL

Let's write something that takes the value of the slider and applies it to the dial

 

 

• 

Note that the names of the components will change in each section as they are copies of the previous section.

 

with(DocumentTools):

14

with(DocumentTools):
sv:=GetProperty('Slider2',value);
SetProperty('Dial2',value,sv);
• 

This code will only execute when run using the  button. Change the value of the slider below then run the code above to see what happens.

 

NULL

NULL

Move the code 'inside' the slider

 

 

• 

Instead of putting the code inside the code edit region where it needs to be executed, we'll next add the code to the value changed code of the slider.

 

• 

Right click the Slider then select "Edit Value Changed Code".

 

 

• 

This will open the code editor for the Slider

 

 

• 

Enter your code (ensuring you're using the correct name for the slider and dial).

 

• 

Notice that you don't need to use the with(DocumentTools): command as "use DocumentTools in ... end use;" is already filled in for you.

 

• 

Save the code in the Slider and hit the  button inside it once.

• 

Now move the slider.

 

• 

On future uses of the App you won't need to hit  as the code will be run on startup.

``

NULL

NULL

Add some more details to your App

 

 

• 

Let's make this app do something a bit more interesting than change the contents of a dial when a slider moves.

 

• 

The plan in the next few steps is to make this app allow a user to explore parameters changing in a sinusoidal expression.

 

• 

I'm going to add a second Math Component, put the expression A*sin(t*theta+phi)into both then uncheck the box in the context panel that says "Editable".

 

• 

To make the Math containers fit nicely I'll check the Auto-fit container box and set the Minimum Width Pixels to 200.

 

``

Add code to change the value of phi in the second Math Container when the Slider changes

 

 

Note: Maple uses Radians for trigonometric functions so we should convert the value of phi to Radians.

use DocumentTools in

 

use DocumentTools in 
phi_s:=GetProperty(Slider5,value);
expr:= GetProperty(MathContainer6,expression);
new_expr:=algsubs(phi=phi_s*Pi/180,expr);

SetProperty(MathContainer7,expression,new_expr);
end use:

``

``

Make the Dial go from 0 to 360°

 

 

• 

Click the Dial and look at the options in the context panel on the right.

 

• 

Update the values in the Dial so that the highest position is 360 and the spacing makes sense for the app.

  NULL

``

Have the Dial update the theta value of the expression

 

 

• 

Add the following code to the Dial

 

use DocumentTools in
use DocumentTools in 
theta_d:=GetProperty(Dial7,value);
phi_s:=GetProperty(Slider7,value); #This is added so that phi also has the value updated

expr:= GetProperty(MathContainer10,expression);
new_expr0:=algsubs(theta=theta_d*Pi/180,expr);
new_expr:=algsubs(phi=phi_s*Pi/180,new_expr0);  #This is added so that phi also has the value updated

SetProperty(MathContainer11,expression,new_expr);
end use:

 

• 

Update the value in the slider to include the value from the dial

 

use DocumentTools in

 

use DocumentTools in 

theta_d:=GetProperty(Dial7,value); #This is added so that theta also has the value updated
phi_s:=GetProperty(Slider7,value); 

expr:= GetProperty(MathContainer10,expression);
new_expr0:=algsubs(theta=theta_d*Pi/180,expr); #This is added so that theta also has the value updated
new_expr:=algsubs(phi=phi_s*Pi/180,new_expr0);  

SetProperty(MathContainer11,expression,new_expr);

end use:

 

``

``

Notice that the code in the Dial and Slider are the same

 

 

• 

Since the code in the Dial and Slider are the same it makes sense to put the code into a procedure that can be called from multiple places.

 

Note: The changes in the code such as local and the single quotes are not needed but make the code easier to read and less likely to run into errors if edited in the future (for example if you create a variable called dial8 it won't interfere now that the names are in quotes).

 

 

UpdateMath:=proc() 

UpdateMath:=proc()
local theta_d, phi_s, expr, new_expr, new_expr0;
use DocumentTools in 
theta_d:=GetProperty('Dial8','value'); #Get value of theta from Dial
phi_s:=GetProperty('Slider8','value'); #Get value of phi from slider

expr:= GetProperty('MathContainer12','expression');
new_expr0:=algsubs('theta'=theta_d*Pi/180,expr);  # Put value of theta in expression
new_expr:=algsubs('phi'=phi_s*Pi/180,new_expr0);  # Put value of phi in expression
SetProperty('MathContainer13','expression',new_expr); # Update expression
end use:
end proc:

 

• 

Now change the code in the components to call the function using UpdateMath().

 

• 

Since the code above is only defined there it will need to be run once (but only once) before moving the components. Instead of leaving it here you can add it to the Startup code by clicking  or going to Edit > Startup code.  This code will run every time you open the Math App ensuring that it works right away.

 

• 

The startup code isn't defined in this document to allow progression of these steps.

 

``

Make the button initialize the app

 

 

• 

Since the startup code isn't defined in this document we are going to move this function into the button.

 

UpdateMath:=proc()

 

UpdateMath:=proc()
local theta_d, phi_s, expr, new_expr, new_expr0;
use DocumentTools in 
theta_d:=GetProperty('Dial9','value'); #Get value of theta from Dial
phi_s:=GetProperty('Slider9','value'); #Get value of phi from slider

expr:= GetProperty('MathContainer14','expression');
new_expr0:=algsubs('theta'=theta_d*Pi/180,expr);  # Put value of theta in expression
new_expr:=algsubs('phi'=phi_s*Pi/180,new_expr0);  # Put value of phi in expression
SetProperty('MathContainer15','expression',new_expr); # Update expression
end use:
end proc:
• 

First click the button to rename it, you'll see the  option in the context panel on the right. Then add the code above to the button in the same way as the Slider an Dial (Right click and select Edit Click Code).

 

``

``

Now it is easy to add new components

 

 

• 

Now if we want to add new components we just have to change the one procedure.  Let's add a Volume Gauge to change the value of A.

 

• 

Click in the cell containing the Dial, the context panel will show the option to Insert a row below the Dial.

• 

Now drag a Volume Gauge into the new cell.

 

• 

Click in the cell and choose the alignment (from the context panel) that looks best to you. In this case I chose center:

 

``

 

NULL

``

Update the procedure code for the Gauge

 

 

• 

Add two lines for the volume gauge to get the value and sub it into the expression

UpdateMath:=proc()

UpdateMath:=proc()
local theta_d, phi_s, expr, new_expr, new_expr0;
use DocumentTools in 
theta_d:=GetProperty('Dial11','value'); #Get value of theta from the Dial
phi_s:=GetProperty('Slider11','value'); #Get value of phi from the Slider
A_g:=GetProperty('VolumeGauge1','value'); #Get value of A from the Guage

expr:= GetProperty('MathContainer18','expression');
new_expr0:=algsubs('theta'=theta_d*Pi/180,expr);  # Put value of theta in expression
new_expr1:=algsubs('phi'=phi_s*Pi/180,new_expr0);  # Put value of phi in expression
new_expr:=algsubs('A'=A_g,new_expr1);  # Put value of A in expression

SetProperty('MathContainer19','expression',new_expr); # Update expression
end use:
end proc:
• 

Now add

UpdateMath();

  to the Gauge.

  ``

``

Plot the changing expression

 

 

• 

Make a procedure to get the value in the second Math Container and plot it

 

PlotMath:=proc()

PlotMath:=proc()
	local expr, p;
	use DocumentTools in 

	expr:=GetProperty('MathContainer21','expression'); 

	p:=plot(expr,'t'=-Pi/2..Pi/2,'view'=[-Pi/2..Pi/2,-100..100]):

	SetProperty('Plot14','value',p)
	end use:
end proc:
• 

Put this procedure in the Initialize button and the call to it in the components.

 

NULL

``

Tidy up the app

 

 

• 

Now that we have an interactive app let's tidy it up a bit.

 

• 

The first thing I'd recommend in your own app is moving the code from the initialize button to startup code. In this document we choose to use the button instead to preserve earlier versions.

 

• 

You can also remove the borders around the components by clicking in the table and selecting "Interior Borders" > "None" and "Exterior Borders" > "None" from the context panel.

NULL

``

``

Now you have a Math App

 

 

• 

You can upload your Math App to the Maple Cloud to share with others by going to "File" > "Save to Cloud".

 

• 

I'd recommend also including a description of what your app does. You can do this nicely using another table and Text mode.

 

 

 

``

``

NULL

HowToMathApp.mw

I’m extremely pleased to introduce the newest update to the Maple Companion. In this time of wide-spread remote learning, tools like the Maple Companion are more important than ever, and I’m happy that our efforts are helping students (and some of their parents!) with at least one small aspect of their life.  Since we’ve added a lot of useful features since I last posted about this free mobile app, I wanted to share the ones I’m most excited about. 

(If you haven’t heard about the Maple Companion app, you can read more about it here.) 

If you use the app primarily to move math into Maple, you’ll be happy to hear that the automatic camera focus has gotten much better over the last couple of updates, and with this latest update, you can now turn on the flash if you need it. For me, these changes have virtually eliminated the need to fiddle with the camera to bring the math in focus, which sometimes happened in earlier versions.

If you use the app to get answers on your phone, that’s gotten much better, too. You can now see plots instantly as you enter your expression in the editor, and watch how the plot changes as you change the expression. You can also get results to many numerical problems results immediately, without having to switch to the results screen. This “calculator mode” is available even if you aren’t connected to the internet.  Okay, so there aren’t a lot of students doing their homework on the bus right now, but someday!

Speaking of plots, you can also now view plots full-screen, so you can see more of plot at once without zooming and panning, squinting, or buying a bigger phone.

Finally, if English is not you or your students’ first language, note that the app was recently made available in Spanish, French, German, Russian, Danish, Japanese, and Simplified Chinese. 

As always, we’d love you hear your feedback and suggestions. Please leave a comment, or use the feedback forms in the app or our web site.

Visit Maple Companion to learn more, find links to the app stores so you can download the app, and access the feedback form. If you already have it installed, you can get the new release simply by updating the app on your phone.

One of the forums asked a question: what is the maximum area of a triangle inscribed in a given ellipse x^2/16 + y^2/3 - 1 = 0? It turned out to be 9, but there are infinitely many such triangles. There was a desire to show them in one of the possible ways. This is a complete (as far as possible) set of such triangles.
(This is not an example of Maple programming; it is just an implementation of a Maple-based algorithm and the work of the Optimization package).
MAX_S_TRIAN_ANINATION.mw

First 9 10 11 12 13 14 15 Last Page 11 of 55