]]>

Let so that too.

Show that and

I got this problem by picking some strictly positive value and breaking the integral as follows:

Let us examine now the factors and above:

We have thus proven that with At this point, all you have to do is pick (provided the denominator is not zero) and you are done.

]]>

]]>

But I am not entirely happy with what I see: my lack of training in the area of Combinatorics results in a rather dry treatment of that part of the mindmap, for example. I am afraid that the same could be told about other parts of the diagram. Any help from the reader to clarify and polish this information will be very much appreciated.

And as a bonus, I included a script to generate the diagram with the aid of the `tikz` libraries.

\tikzstyle{level 2 concept}+=[sibling angle=40] \begin{tikzpicture}[scale=0.49, transform shape] \path[mindmap,concept color=black,text=white] node[concept] {Pure Mathematics} [clockwise from=45] child[concept color=DeepSkyBlue4]{ node[concept] {Analysis} [clockwise from=180] child { node[concept] {Multivariate \& Vector Calculus} [clockwise from=120] child {node[concept] {ODEs}}} child { node[concept] {Functional Analysis}} child { node[concept] {Measure Theory}} child { node[concept] {Calculus of Variations}} child { node[concept] {Harmonic Analysis}} child { node[concept] {Complex Analysis}} child { node[concept] {Stochastic Analysis}} child { node[concept] {Geometric Analysis} [clockwise from=-40] child {node[concept] {PDEs}}}} child[concept color=black!50!green, grow=-40]{ node[concept] {Combinatorics} [clockwise from=10] child {node[concept] {Enumerative}} child {node[concept] {Extremal}} child {node[concept] {Graph Theory}}} child[concept color=black!25!red, grow=-90]{ node[concept] {Geometry} [clockwise from=-30] child {node[concept] {Convex Geometry}} child {node[concept] {Differential Geometry}} child {node[concept] {Manifolds}} child {node[concept,color=black!50!green!50!red,text=white] {Discrete Geometry}} child { node[concept] {Topology} [clockwise from=-150] child {node [concept,color=black!25!red!50!brown,text=white] {Algebraic Topology}}}} child[concept color=brown,grow=140]{ node[concept] {Algebra} [counterclockwise from=70] child {node[concept] {Elementary}} child {node[concept] {Number Theory}} child {node[concept] {Abstract} [clockwise from=180] child {node[concept,color=red!25!brown,text=white] {Algebraic Geometry}}} child {node[concept] {Linear}}} node[extra concept,concept color=black] at (200:5) {Applied Mathematics} child[grow=145,concept color=black!50!yellow] { node[concept] {Probability} [clockwise from=180] child {node[concept] {Stochastic Processes}}} child[grow=175,concept color=black!50!yellow] {node[concept] {Statistics}} child[grow=205,concept color=black!50!yellow] {node[concept] {Numerical Analysis}} child[grow=235,concept color=black!50!yellow] {node[concept] {Symbolic Computation}}; \end{tikzpicture}

]]>

I would like to show a few more examples of beautiful curves generated with this technique, together with their generating axiom, rules and parameters. Feel free to click on each of the images below to download a larger version.

Note that any coding language with plotting capabilities should be able to tackle this project. I used once again `tikz` for , but this time with the tikzlibrary `lindenmayersystems`.

Would you like to experiment a little with axioms, rules and parameters, and obtain some new pleasant curves with this method? If the mathematical properties of the fractal that they approximate are interesting enough, I bet you could attach your name to them. Like the astronomer that finds through her telescope a new object in the sky, or the zoologist that discover a new species of spider in the forest.

]]>

- It also goes through the feet of the heights, points
- If denotes the orthocenter of the triangle, then the Feuerbach circle also goes through the midpoints of the segments For this reason, the Feuerbach circle is also called the
**nine-point circle.** - The center of the Feuerbach circle is the midpoint between the orthocenter and circumcenter of the triangle.
- The area of the circumcircle is precisely four times the area of the Feuerbach circle.

Most of these results are easily shown with `sympy` without the need to resort to Gröbner bases or Ritt-Wu techniques. As usual, we realize that the properties are independent of rotation, translation or dilation, and so we may assume that the vertices of the triangle are and for some positive parameters To prove the last statement, for instance we may issue the following:

>>> import sympy >>> from sympy import * >>> A=Point(0,0) >>> B=Point(1,0) >>> r,s=var('r,s') >>> C=Point(r,s) >>> D=Segment(A,B).midpoint >>> E=Segment(B,C).midpoint >>> F=Segment(A,C).midpoint >>> simplify(Triangle(A,B,C).circumcircle.area/Triangle(D,E,F).circumcircle.area) 4

But probably the most amazing property of the nine-point circle, is the fact that it is tangent to the incircle of the triangle. With exception of the case of equilateral triangles, both circles intersect only at one point: the so-called **Feuerbach point**.

The two results that we want to prove, whose synthetic proofs can be read in [this article] are the following:

Theorem 1.The circle through the feet of the internal bisectors of triangle passes through the Feuerbach point of the triangle.

Theorem 2.The Feuerbach point of triangle is the anti-Steiner point of the Euler line of the intouch triangle of with respect to the same triangle.

Let us prove the first Theorem for the case of a right-triangle. We only need to modify the definition of the point to guarantee this situation. We set for some positive value of the parameter .

Let us start by collecting the hypothesis polynomials that define the coordinates of the Feuerbach point of the triangle

>>> import sympy >>> from sympy import * >>> A=Point(0,0) >>> B=Point(1,0) >>> var('s',positive=True) s >>> C=Point(0,s) >>> Triangle(A,B,C).incircle.equation() -s**2/(s + sqrt(s**2 + 1) + 1)**2 + (-s/(s + sqrt(s**2 + 1) + 1) + x)**2 + (-s/(s + sqrt(s**2 + 1) + 1) + y)**2

We shall introduce the parameter in our polynomial rings, and relate it to the parameter so that This will allow us to input the incenter, incircle and their interaction with other objects, in a simple polynomial way.

>>> var('u') u >>> expr=Triangle(A,B,C).incircle.equation().subs(sqrt(s**2+1),u) >>> numer(together(expr)) -s**2 + (-s + x*(s + u + 1))**2 + (-s + y*(s + u + 1))**2 >>> T=Triangle( Segment(A,B).midpoint, Segment(A,C).midpoint, Segment(B,C).midpoint) >>> expr=together(T.circumcircle.equation()) >>> numer(expr) -s**2 + (-s + 4*y)**2 + (4*x - 1)**2 - 1

We can then use the following three polynomials to define the Feuerbach point:

Let us now proceed to computing the three feet of the internal bisectors, starting by collecting the coordinates of the incenter:

>>> Ic=Triangle(A,B,C).incenter.subs(sqrt(s**2+1),u) >>> intersection(Line(A,C), Line(B,Ic)) [Point(0, s/(u + 1))] >>> intersection(Line(A,B), Line(C,Ic)) [Point(s/(s + u), 0)] >>> intersection(Line(B,C), Line(A,Ic)) [Point(s/(s + 1), s/(s + 1))]

This gives us the hypothesis polynomials for the coordinates of the three feet:

Note we do not need to include polynomials for or since those are always zero. We proceed to compute a polynomial equation of a circle that goes through the last three points:

>>> var('x2:5 y2:5') (x2, x3, x4, y2, y3, y4) >>> Q1=Point(0,y2) >>> Q2=Point(x3,0) >>> Q3=Point(x4,y4) >>> expr=together(Triangle(Q1,Q2,Q3).circumcircle.equation()) >>> numer(expr) -(y2*(-x3**2 + x4**2 + y4**2) + y4*(x3**2 - y2**2))**2 + (2*x*(x3*y4 - y2*(x3 - x4)) - y2*(-x3**2 + x4**2 + y4**2) - y4*(x3**2 - y2**2))**2 + (-x3*(-x3**2 + x4**2 + y4**2) + 2*y*(x3*y4 - y2*(x3 - x4)) - (x3 - x4)*(x3**2 - y2**2))**2 - (x3*(-x3**2 + x4**2 + y4**2) - 2*y2*(x3*y4 - y2*(x3 - x4)) + (x3 - x4)*(x3**2 - y2**2))**2

We thus have the thesis polynomial for the coordinates of the Feuerbach point to belong on the required circumcircle:

We could use then the following code in `sage` or `sympy` in a `Python` session, to prove the result:

import sympy from sympy import var, perm var('s u x1:5 y1:5) # Hypotheses for the Feuerbach point h1=s**2+1-u**2 h2=-s**2 + (-s + 4*y1)**2 + (4*x1 - 1)**2 - 1 h3=-s**2 + (-s + x1*(s + u + 1))**2 + (-s + y1*(s + u + 1))**2 # Hypotheses for the three feet h4=(u+1)*y2-s h5=(s+u)*x3-s h6=(s+1)*x4-s h7=(s+1)*y4-s # Thesis polynomial g=-(y2*(-x3**2 + x4**2 + y4**2) + y4*(x3**2 - y2**2))**2 + (2*x1*(x3*y4 - y2*(x3 - x4)) - y2*(-x3**2 + x4**2 + y4**2) - y4*(x3**2 - y2**2))**2 + (-x3*(-x3**2 + x4**2 + y4**2) + 2*y1*(x3*y4 - y2*(x3 - x4)) - (x3 - x4)*(x3**2 - y2**2))**2 - (x3*(-x3**2 + x4**2 + y4**2) - 2*y2*(x3*y4 - y2*(x3 - x4)) + (x3 - x4)*(x3**2 - y2**2))**2 # The system is almost triangular, except for polynomials h2 and h3. # Substitute those two by the proper pseudo-reminders wrt y1 h3a=prem(h3,h2,y1) h2a=prem(h2,h3a,y1) # The proof (by the Ritt-Wu method): # If the Theorem is true, the last reminder must be zero. R=prem(g,h7,y4) R=prem(R,h6,x4) R=prem(R,h5,x3) R=prem(R,h4,y2) R=prem(R,h3a,y1) R=prem(R,h2a,x1) R=prem(R,h1)

To prove the second theorem, we need to go over the notion of anti-Steiner points first, and some of their properties:

It is known that there is a one-to-one correspondence between any point in the circumcircle of a triangle with a unique line that goes through the orthocenter, via reflections with the sides of the triangle:

- If is a point belonging to the circumcircle, then the images through reflections with axes the three sides of the triangle are collinear, and the corresponding line goes through the orthocenter. This is called the
**Steiner line**of the point - Similarly, if a line goes through the orthocenter, then the three reflected lines with the sides of the triangle, are concurrent at a point of the circumcircle. This is called the
**anti-Steiner point**of the line

It is relatively easy to prove these two facts with `sympy` (for the geometric computations) and `sagemath` (for the Gröbner bases calculations). For example, for the first property, we could do as follows: Start by defining a function that computes the reflection of a point with respect to a line.

def reflection(Pt,ln): Q=intersection(ln.perpendicular_line(Pt),ln)[0] return Point(2*Q.x+Pt.x, 2*Q.y+Pt.y)

Given a generic point , the three reflections with respect to the sides of the triangle read as follows:

>>> reflection(P,Line(A,B)) Point(x, -y) >>> reflection(P,Line(B,C)) Point(-x + 2*(s**2 + (r - 1)*(r*x + s*y - x))/(s**2 + (r - 1)**2), 2*s*(r*x - r + s*y - x + 1)/(s**2 + (r - 1)**2) - y) >>> reflection(P,Line(A,C)) Point(2*r*(r*x + s*y)/(r**2 + s**2) - x, 2*s*(r*x + s*y)/(r**2 + s**2) - y)

If the point is to belong in the circumcircle of triangle then it must satisfy the corresponding polynomial equation:

>>> numer(together(Triangle(A,B,C).circumcircle.equation())) s**2*(2*x - 1)**2 - s**2 - (r**2 - r + s**2)**2 + (-r**2 + r - s**2 + 2*s*y)**2

This is the (only needed) hypothesis polynomial. The thesis polynomial, that inquires whether the three reflection points are collinear, can be reduced to asking whether the triangle has area zero:

>>> numer(together(Triangle(P1,P2,P3).area)) 2*s**2*(r**2*y - r*y + s**2*y - s*x**2 + s*x - s*y**2)

A quick `sagemath` session proves the result true:

sage: R.<x,y,z,r,s>=PolynomialRing(QQ,5,order='lex') sage: h=s**2*(2*x - 1)**2-s**2-(r**2-r+s**2)**2+(-r**2+r-s**2+2*s*y)**2 sage: g=2*s**2*(r**2*y-r*y+s**2*y-s*x**2+s*x-s*y**2) sage: I=R.ideal(1-z*g,h) sage: I.groebner_basis() [1]

]]>

We start, as usual, indicating that this property is independent of shifts, rotations or dilations, and therefore we may assume that the isosceles triangle has one vertex at , another vertex at and the third vertex at for some value In that case, we will need to work on the polynomial ring since we need the parameter free, the variables and are used to input the conditions for the circumcenter of the triangle, the variables and for centroid, and the variables and for the incenter (note that we do not need to use the orthocenter in this case).

We may obtain all six conditions by using `sympy`, as follows:

>>> import sympy >>> from sympy import * >>> A=Point(0,0) >>> B=Point(1,0) >>> s=symbols("s",real=True,positive=True) >>> C=Point(1/2.,s) >>> T=Triangle(A,B,C) >>> T.circumcenter Point(1/2, (4*s**2 - 1)/(8*s)) >>> T.centroid Point(1/2, s/3) >>> T.incenter Point(1/2, s/(sqrt(4*s**2 + 1) + 1))

This translates into the following polynomials

(for circumcenter)

(for centroid)

(for incenter)

(for centroid)

(for incenter)

The hypothesis polynomial comes simply from asking whether the slope of the line through two of those centers is the same as the slope of the line through another choice of two centers; we could use then, for example, It only remains to compute the Gröbner basis of the ideal Let us use SageMath for this task:

sage: R.<s,x1,x2,x3,y1,y2,y3,z>=PolynomialRing(QQ,8,order='lex') sage: h=[2*x1-1,8*r*y1-4*r**2+1,2*x2-1,3*y2-r,2*x3-1,(4*r*y3+1)**2-4*r**2-1] sage: g=(x2-x1)*(y3-y1)-(x3-x1)*(y2-y1) sage: I=R.ideal(1-z*g,*h) sage: I.groebner_basis() [1]

This proves the result.

]]>

To celebrate, I would like to pose a few coding challenges on the use of this library, based on a fun geometric puzzle from cut-the-knot: **Rhombus in Circles**

Segments and are equal. Lines and intersect at Form four circumcircles: Prove that the circumcenters form a rhombus, with

Note that if this construction works, it must do so independently of translations, rotations and dilations. We may then assume that is the origin, that the segments have length one, and that for some parameters it is We let `SymPy` take care of the computation of circumcenters:

import sympy from sympy import * # Point definitions M=Point(0,0) A=Point(2,0) B=Point(1,0) a,theta=symbols('a,theta',real=True,positive=True) C=Point((a+1)*cos(theta),(a+1)*sin(theta)) D=Point(a*cos(theta),a*sin(theta)) #Circumcenters E=Triangle(A,C,M).circumcenter F=Triangle(A,D,M).circumcenter G=Triangle(B,D,M).circumcenter H=Triangle(B,C,M).circumcenter

Finding that the alternate angles are equal in the quadrilateral is pretty straightforward:

In [11]: P=Polygon(E,F,G,H) In [12]: P.angles[E]==P.angles[G] Out[12]: True In [13]: P.angles[F]==P.angles[H] Out[13]: True

To prove it a rhombus, the two sides that coincide on each angle must be equal. This presents us with the first challenge: Note for example that if we naively ask SymPy whether the triangle is equilateral, we get a `False` statement:

In [14]: Triangle(E,F,G).is_equilateral() Out[14]: False In [15]: F.distance(E) Out[15]: Abs((a/2 - cos(theta))/sin(theta) - (a - 2*cos(theta) + 1)/(2*sin(theta))) In [16]: F.distance(G) Out[16]: sqrt(((a/2 - cos(theta))/sin(theta) - (a - cos(theta))/(2*sin(theta)))**2 + 1/4)

Part of the reason is that we have not indicated anywhere that the parameter `theta` is to be strictly bounded above by (we did indicate that it must be strictly positive). The other reason is that `SymPy` does not handle identities well, unless the expressions to be evaluated are perfectly simplified. For example, if we *trust* the routines of simplification of trigonometric expressions alone, we will not be able to resolve this problem with this technique:

In [17]: trigsimp(F.distance(E)-F.distance(G),deep=True)==0 Out[17]: False

Finding that with `SymPy` is not that easy either. This is the second challenge.

How would the reader resolve this situation?

]]>

Exercise 1Let be a measurable space and suppose is a sequence of measurable functions in that converge almost everywhere to a function and such that the sequence of norms converges to . Prove that the sequence of integrals converges to the integral for every measurable set .

*Proof:* Note first that

Set then (which are non-negative functions) and apply Fatou’s Lemma to that sequence. We have then

which implies

It must then be . But this proves the statement, since

Exercise 2Let be a finite measure space and let . Suppose that is a sequence of measurable functions in whose norms are uniformly bounded in and which converge almost everywhere to a function . Prove that the sequence converges to for all where is the conjugate exponent of .

*Proof:* The proof is very similar to the previous problem. We start by noticing that under the hypotheses of the problem,

If we prove that , we are done.

We will achieve this by using the convexity of , since in that case it is

hence,

Set then (which are non-negative functions) and apply Fatou’s Lemma as before.

]]>

Or more importantly: rear your children to become nice people, water those trees, and make sure that your books make a good impact.

I recently enjoyed the rare pleasure of having a child (my first!) and publishing a book almost at the same time. Since this post belongs in my professional blog, I will exclusively comment on the latter: Learning SciPy for Numerical and Scientific Computing, published by Packt in a series of technical books focusing on Open Source software.

Keep in mind that the book is for a very specialized audience: not only do you need a basic knowledge of Python, but also a somewhat advanced command of mathematics/physics, and an interest in engineering or scientific applications. This is an excerpt of the detailed description of the monograph, as it reads in the publisher’s page:

It is essential to incorporate workflow data and code from various sources in order to create fast and effective algorithms to solve complex problems in science and engineering. Data is coming at us faster, dirtier, and at an ever increasing rate. There is no need to employ difficult-to-maintain code, or expensive mathematical engines to solve your numerical computations anymore. SciPy guarantees fast, accurate, and easy-to-code solutions to your numerical and scientific computing applications.

Learning SciPy for Numerical and Scientific Computingunveils secrets to some of the most critical mathematical and scientific computing problems and will play an instrumental role in supporting your research. The book will teach you how to quickly and efficiently use different modules and routines from the SciPy library to cover the vast scope of numerical mathematics with its simplistic practical approach that is easy to follow.The book starts with a brief description of the SciPy libraries, showing practical demonstrations for acquiring and installing them on your system. This is followed by the second chapter which is a fun and fast-paced primer to array creation, manipulation, and problem-solving based on these techniques.

The rest of the chapters describe the use of all different modules and routines from the SciPy libraries, through the scope of different branches of numerical mathematics. Each big field is represented: numerical analysis, linear algebra, statistics, signal processing, and computational geometry. And for each of these fields all possibilities are illustrated with clear syntax, and plenty of examples. The book then presents combinations of all these techniques to the solution of research problems in real-life scenarios for different sciences or engineering — from image compression, biological classification of species, control theory, design of wings, to structural analysis of oxides.

The book is also being sold online in Amazon, where it has been received with pretty good reviews. I have found other random reviews elsewhere, with similar welcoming comments:

- Artificial Intelligence in Motion by Marcel Caraciolo
- The Endeavour, by John D. Cook

]]>