| |
|
|
p.specht
| intégration - qui zugrundeliegende Frage ist stets: comment grand ist qui Surface sous un certain Funktionskurve y=f(x) entre den x-Grenzen a et b ? dans qui Praxis hat on allerdings seulement y-Meßwerte trop certain x-Achsenwerten, kennt alors qui zugrundeliegende mathématique Funktion pas wirklich. presque genial erscheint daher qui concept, cela Gummilineal qui mathématique, qui Polynomfunktion dans qui Meßpunkte einzupassen et anschließend trop intégrer. cela allez, weil nämlich cela Integral eines Polynoms formelmäßig très bien bekannt ist. Bloß qui entsprechenen Koeffizienten manquer encore - doch là peut Kapazunder comment Kepler, Euler, Gauss, Lagrange, Cotes ou bien plan aussi qui Schottisch-Britische Mathematiker, Astronom et Universitätsrektor Sir David Gregory (1659-1708), un Zeitgenosse Newtons, aider - et zwar gründlich:
qui de ihm verwendeten Formeln sommes vom Grad her einstellbar, si il qui procéder aller vorgenannter Herren beliebig emulieren peux. Weiters sommes sa Koeffizientenformeln comme Gewichte eines iterativen Verfahrens léger implementierbar.
P.S.: Mathematische interessanter lieben Lagrange- et Tschebeyschow-Polynome son, mais pas praxisgerechter. Lediglich cela Romberg-procéder erscheint et avec ca eleganter!
Titre de la fenêtre " GREGORY-INTEGRATION einer eingebauten Testfunktion x^n "
Fenêtre Style 24:Fenêtre 0,0-%maxx,%maxy-40:font 0:set("decimals",17)
'---------------------------------------------------------------------
' (C) ACM-TOMS ALGORITHM 280, COLLECTED ALGORITHMS FROM ACM.
' THIS WORK PUBLISHED IN COMMUNICATIONS OF THE ACM,
' VOL. 9, NO. 4, avril, 1966, P. 271
'---------------------------------------------------------------------
' (D) Demo-Migration de C++ pour XProfan11.2a 2014-11
' by P.Specht, vienne (Austria). OHNE JEDE GEWÄHR!
'---------------------------------------------------------------------
'------------------------------------------------------------------------
' Programmanpassungen pour Arraygröße et trop integrierende Funktion
'------------------------------------------------------------------------
Var nmax&=100' procéder ausgelegt pour cet maximalen Arraygrößen
Proc Fn_PowN :parameters a!,n&
' y=x^n
cas n&=0:return 1
si n&>0 : var x!=a!
whileloop n&-1
x!=x!*a!
endwhile
return x!
d'autre
Imprimer " Negativer Exponent dans Fn_PowN pas erlaubt!"
beep:waitinput 20000:return 0
endif
ENDPROC
'------------------------------------------------------------------------
'------------------------------------------------------------------------
Proc Gregory :parameters n&,r&,t![],w![]'findet Gewichtungskoeffizienten
' Computes le abscissas and weights of le Gregory quadrature rule
' with r differences: Given h = (t_n - t_0)/n, then holds:
' Integral_from t_0 to t_n of: f(t) dt =~
' h*(f_0/2 + f_1 + ... +f_n-1 + f_n/2 )
' - h*12*( nabla(f_n) - delta(f_0) )
' - h*24*( nabla^2(f_n) + delta^2(f_0))
' - ...
' - h*c[r+1] *( nabla^r*f(n) + delta^r*(f_0) )
'= Sum[j=0..n]of w[j]*f(t[j])
'where h = (t_n - t_0)/n, and le c_j' sont given dans Henrici (1964, suisse & USA)
'The number r must être à integer à partir de 0 to n, le number of subdivisions.
'The left and right endpoints must être dans t(0) and t(n) respectively.
'The abscissas sont returned dans t(0) to t(n) and le corresponding weights
'dans w(0) to w(n).
'
'Si r=0 le Gregory rule is le same as le repeated trapezoid rule, and
'si r=n le same as le Newton-Cotes rule (closed type). The l'ordre p of le
'quadrature rule is p = r+1 for r odd and p = r+2 for r even.
'For n >= 9 and large r some of le weights can être negative.
'
'For n <= 32 and r<= 24, le numerical intégration of powers (less than r)
'of x on le interval [0,1] gave 9 significant digits correct dans à 11
'digit mantissa.
'
'2 References:
'Hildebrand, F. B. Introduction to Numerical Analysis.
'McGraw-Hill, New York 1956, p. 155 ;
'Henrici, Peter. Elements of Numerical Analysis.
'Wiley, New York 1964, p. 252.
'personne: https://en.wikipedia.org/wiki/Peter_Henrici_%28mathematician%28 : The Book:
'https://ia700700.us.archive.org/23/items/ElementsOfNumericalAnalysis/Henrici-ElementsOfNumericalAnalysis.pdf
'--------------------------------------------------------------------
Déclarer i&,j&,h!,cj!,c![nmax&+1],b![nmax&]
b![0]=1:b![n&]=0
c![0]=1:c![1]=-0.5
w![0]=0.5:w![n&]=w![0]
h!=(t![n&]-t![0])/n&
whileloop n&-1:i&=&Boucle:
w![i&]=1
b![i&]=0
t![i&]=i&*h!+t![0]
endwhile
cas r&>n&:r&=n&
Whileloop r&:j&=&Boucle
cj!=0.5*c![j&]
whileloop j&,1,-1:i&=&Boucle
b![i&]=b![i&]-b![i&-1]
endwhile
whileloop 3,j&+2:i&=&Boucle
cj!=cj!+c![j&+2-i&]/i&
endwhile
c![j&+1]=-cj!
whileloop 0,n&:i&=&Boucle
w![i&]=w![i&]-cj!*(b![n&-i&]+b![i&])
endwhile
Endwhile
WhileLoop 0,n&:i&=&Boucle
w![i&]=w![i&]*h!
endWhile
ENDPROC'Gregory
'--------------------------------------------------------------------
' Testteil
'--------------------------------------------------------------------
declare t![nmax&],w![nmax&]:declare I!,dans!,i&,n&,r&,p&:declare a!,b!
a!=-1.0'intégration de a
b!= 1.0'jusqu'à b
n&= 7'Grad des impliziten Polynoms
r&=n&
t![0]=a!:t![n&]=b!' Integrationsgrenzen belegen
Gregory(n&,r&,t![],w![])' Polynom-Koeffizienten (Gregory-Gewichtungen) berechnen
' Kontrollausgabe:
font 2:Imprimer "\n Gregory-Gewichtungen:\n "+mkstr$("-",40)
WhileLoop 0,n&:i&=&Boucle
imprimer tab(2);si(w![i&]<0,»," ");format$("%g",w![i&]),
imprimer tab(27);si(t![i&]<0,»," ");format$("%g",t![i&])
endwhile:imprimer
'-----------------------------------------------------------------------
' Testanwendung: Integriere qui Funktion x^p et gib qui Ergebnisse aus:
'-----------------------------------------------------------------------
whileloop 0,r&+4:p&=&Boucle
I!= ( Fn_PowN(b!,p&+1) - Fn_PowN(a!,p&+1) ) / (p&+1)
dans!=0
whileloop 0,n&:i&=&Boucle
dans!=dans!+w![i&]*Fn_PowN(t![i&],p&)
endwhile
imprimer tab(2);n&,tab(5);r&,tab(8);p&,
imprimer tab(13);si(I!<0,»," ");format$("%g",I!),
imprimer tab(43);si(dans!<0,»," ");format$("%g",dans!),
imprimer tab(73);si((I!-dans!)<0,»," ");format$("%g",I!-dans!)
Endwhile
BEEP
Imprimer "\n Es folgen qui Vergleichsdaten lt. livre [bouton]\n"+mkstr$("-",80)
waitinput
var wdata$=\
" 0.086921 -1.000000 \n 0.414005 -0.714286 \n"+\
" 0.153125 -0.428571 \n 0.345949 -0.142857 \n"+\
" 0.345949 0.142857 \n 0.153125 0.428571 \n"+\
" 0.414005 0.714286 \n 0.086921 1.000000 \n"
var outdata$= "\n "+\
"7 7 0 2.000000 2.000000 4.440892e-16 \n "+\
"7 7 1 0.000000 -0.000000 1.110223e-16 \n "+\
"7 7 2 0.666667 0.666667 2.220446e-16 \n "+\
"7 7 3 0.000000 -0.000000 8.326673e-17 \n "+\
"7 7 4 0.400000 0.400000 1.665335e-16 \n "+\
"7 7 5 0.000000 -0.000000 8.326673e-17 \n "+\
"7 7 6 0.285714 0.285714 0.000000e+00 \n "+\
"7 7 7 0.000000 -0.000000 4.163336e-17 \n "+\
"7 7 8 0.222222 0.230297 -8.075245e-03 \n "+\
"7 7 9 0.000000 -0.000000 2.775558e-17 \n "+\
"7 7 10 0.181818 0.202532 -2.071405e-02 \n "+\
"7 7 11 0.000000 -0.000000 1.387779e-17"
font 2:imprimer Wdata$,outdata$
waitinput
Fin
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 16.05.2021 ▲ |
|
|
|