Riemanns in keinem Intervall stetige Funktion

Prof. Dr. Dörte Haftendorn: Mathematik mit MuPAD 4, Sept 07    Update 10.09.07

Web:  https://mathe.web.leuphana.de             www.mathematik-verstehen.de ######################################################

Dateiname riemann-unstet-int.mn

Dieser Bestandteil B der Riemann-Funktion sorgt für die Unstetigkeitsstellen.

B:=x->if abs(2*x-round(2*x))<10^(-10)

       then 0 else x-round(x) end_if;

x -> (if abs(2*x - round(2*x)) < 10^(-10) then

    0

  else

    x - round(x)

  end_if)

 

B(i*1/10) $ i=0..20

math

B(i*0.1) $ i=0..20

math

b1g:=plot::Listplot([[i/100,B(i/100)] $ i=0..600] ):

plot(b1g)

MuPAD graphics

Riemanns Funktion  ist die unendliche Summe der B-Terme: .

f:=(x,n)->sum(B(i*x)/i^2,i=1..n)

math

Veranschaulichung der Bausteine image:

n:=11:

bg:=array(1..n):

bg[1]:=plot::Listplot([[i/100,B(i/500)] $ i=0..500], PointsVisible=FALSE, LineColor=[0,0,1] ):

bg[2]:=plot::Listplot([[i/100,B(2*i/500)/2^2] $ i=0..500],PointsVisible=FALSE, LineColor=[1,0,0]  ):

bg[3]:=plot::Listplot([[i/100,B(3*i/500)/3^2] $ i=0..500],PointsVisible=FALSE, LineColor=[0,1,0]  ):

bg[4]:=plot::Listplot([[i/100,B(4*i/500)/4^2] $ i=0..500],PointsVisible=FALSE, LineColor=[1,0,1]  ):

bg[5]:=plot::Listplot([[i/100,B(5*i/500)/5^2] $ i=0..500],PointsVisible=FALSE, LineColor=[1,0.5,0]  ):

bg[6]:=plot::Listplot([[i/100,B(6*i/500)/6^2] $ i=0..500],PointsVisible=FALSE, LineColor=[0,0,0]  ):

bg[7]:=plot::Listplot([[i/100,B(7*i/500)/7^2] $ i=0..500],PointsVisible=FALSE, LineColor=[1,1,0]  ):

bg[8]:=plot::Listplot([[i/100,B(8*i/500)/8^2] $ i=0..500],PointsVisible=FALSE, LineColor=[0,0,1]  ):

bg[9]:=plot::Listplot([[i/100,B(9*i/500)/9^2] $ i=0..500],PointsVisible=FALSE, LineColor=[0,0.8,0]  ):

bg[10]:=plot::Listplot([[i/100,B(10*i/500)/10^2] $ i=0..500],PointsVisible=FALSE, LineColor=[1,1,0]  ):

bg[11]:=plot::Listplot([[i/100,B(11*i/500)/11^2] $ i=0..500],PointsVisible=FALSE, LineColor=[0.5,0,1]  ):

plot(bg[i] $ i=1..n-3)

MuPAD graphics

Die Steigungen sind 1/n. Die Sprungstellen liegen bei den

ungeraden Vielfachen von 1/(2n).

Die Sprunghöhen sind 1/n^2

Aufgrund des Umweges über Einzelpunkte sind die bei den Sprungstellen die Senkrechten mitgezeichnet.

---------------------------------------------------------------------

Nun werden alle diese Funktionen addiert.

Aus technischen Gründen wird das Intervall in 6000 Teile geteilt.

fplatz ist also die diskrete Version von f.

Hier werden konkret nur 11 Funktionen, f(x,1) bis  f(x,11) addiert.

nenner:=6000:

fplatz:=i->B(1*i/nenner)/1^2+B(2*i/nenner)/2^2+B(3*i/nenner)/3^2+B(4*i/nenner)/4^2+         B(5*i/nenner)/5^2+B(6*i/nenner)/6^2+B(7*i/nenner)/7^2+B(8*i/nenner)/8^2+B(9*i/nenner)/9^2+

B(10*i/nenner)/10^2+B(11*i/nenner)/11^2

math

fplatz(100.49)   //Probe, es werden auch Zwischenwerte berechnet.

math

fganz:=plot::Listplot([[i/nenner,fplatz(i)] $ i=0..nenner],

                    PointsVisible=FALSE, LineColor=[1,0,0] ):

xachse:=plot::Function2d(0,x=0..1,LineColor=[0,0,0]):

plot(fganz,xachse)

MuPAD graphics

 

Das ist der Graph der Riemann-Funktion.

Mit noch mehr Punkten als 6000 erreicht man kein anderes Bild.

MuPAD graphics

Riemanns Funktion ist in keinem Intervall stetig.

Die Unstetigkeitsstellen liegen dicht.

Dennoch ist sie integrierbar, natürlich nicht automatisch.

Erzeugen der Verfeinerung: (Verfeinerung, .... unter "Datei, Eigenschaften" eingetragen.

Es sind die in der Datei riemann-int entwickelten Prozeduren.)

alleli:=verfeinern(0,1,4):

print(alleli[j]) $ j=1..5

[0, 0.2703567032, 1]

[0, 0.2703567032, 0.8142678572, 1]

[0, 0.1145977439, 0.2703567032, 0.8142678572, 1]

[0, 0.1145977439, 0.247668289, 0.2703567032, 0.8142678572, 1]

[0, 0.1145977439, 0.247668289, 0.2703567032, 0.436855213, 0.8142678572, 1]

 

Selbstverständlich würde es jetzt nicht leichtfallen, in jedem Intervall

Maximum und Minimum zu finden. Daher nimmt Riemann den Funktionswert

an einer beliebigen Zwischenstelle in jedem Intervall.

rieS:=proc(li)

        local anz,pkt,polyg,wert;

        begin

         anz:=nops(li);

            pkt:=[[li[i],fplatz((li[i]+frandom()*(li[i+1]-li[i]))*nenner)] $ i=1..anz-1];

            polyg:=(plot::Polygon2d([[pkt[i][1],0],[pkt[i][1],pkt[i][2]],

                    [pkt[i+1][1],pkt[i][2]],[pkt[i+1][1],0]],Filled=TRUE,                 

                    FillColor=[0,0,1]) $ i=1..anz-2),

                    plot::Polygon2d([[pkt[anz-1][1],0],[pkt[anz-1][1],

                        pkt[anz-1][2]], [li[anz],pkt[anz-1][2]],[li[anz],0]],

                        Filled=TRUE, FillColor=[0,0,1]);

            //plot(xachse,polyg,fganz);

           wert:=_plus((pkt[i+1][1]-pkt[i][1])*pkt[i][2] $ i=1..anz-2)+(1-pkt[anz-1][1])*pkt[anz-1][2];

            return([[polyg],pkt,wert])

          end_proc:

 

Wiederholbarer Block ################

n:=50:

alleg:=array(1..n+2):    /* Tabelle der Graphen */

alleli:=verfeinern(0,1,n+1):  /* a,b,n=Steifenzahl - 1  */

//print(alleli[j]) $ j=1..n+1:  /* Folge aus n+1 Verfeinerungslisten  */

Für die Zahlenwerte die Auskommentierung entfernen.

Das folgende in der MuPad-Datei auswerten. Das sieht am Eindurcksvollsten aus.

 

for j from 1 to n+1 do

    erg:=rieS(alleli[j]):

    alleg[j]:=erg[1]:

    allep[j]:=erg[2]:

    allew[j]:=erg[3]:

   end_for:

matrix([allew[j] $ j=n-5..n+1]);

matrix([allep[j] $ j=1..3]);

plot(alleg[j],fganz,xachse) $ j=1..n+1;

plot(xachse,alleg[n+1] , fganz);

MuPAD graphics

Das sind drei Teilungen und die Riemannschen Summen (als Bilder).

MuPAD graphics

MuPAD graphics

MuPAD graphics

Das sind Bilder der Riemannschen Summen,

weil mit der  Geamtauswertung die Datei zu groß wird.

---------------------------------------------

Theoretische Untersuchung der auftretenden Summen

sum(1/(2*i-1)^2,i=1..n)

math

sum(1/(2*i-1)^2,i=1..infinity)

math

 

psi(infinity,1)

math

Die Sprunghöhen sind:

float(PI^2/(8*n^2)) $ n=1..5

math

MuPAD graphics

Die Sprunghöhen passen gut zu der Zeichnung.

Die ersten Sprünge sind bei den geraden Stammbrüchen

1/2,1/4,1/6,1/8,1/10

math