| |
|
|
p.specht
| Für una Función 3. Grades benötigt el Verfahren después de R. Brent [1973] sólo 8 Durchgänge, en en 16-stellige Genauigkeit a kommen. Aunque son Voraussetzungen a erfüllen: El Anfangswerte debería diferente Vorzeichen haben. Dazu muss uno ya algo Idea haben, como el Funktionsgraph ungefähr aussieht. Como el nachfolgende Programa hier sólo una Fehlermeldung abgibt, se also no (como Profi-Programas) selber en el Búsqueda después de geeigneten Werten begibt, es lo sólo una vez sólo una Prinzipstudie. Immerhin funktioniert el Principio aber muy bien!
Título de la ventana "Prinzipstudie: Nichtlineare Gleichung numerisch Lösen después de Brent [1973]"
Ventana de Estilo 24:CLS:font 2
declarar c0!,c1!,c2!,c3!,c4!,c5!,x!,a!,b!,c!,d!,e!,tol!,fa!,fb!,fc!
declarar iter&,maxiter&,eps!,m!,r!,s!,t!,p!,q!,xs!
'Funktionstyp el a lösenden Gleichung (Hier:Polynom max. 5.Grades)
proc f :parámetros x!
volver c0!+x!*c1!+x!*x!*c2!+x!*x!*x!*c3!+x!*x!*x!*x!*c4!+x!*x!*x!*x!*x!*c5!
ENDPROC
'Funktionsparameter: Testfunktion es hier vom Grad 3 = Kubische Parabel
c0!=-5
c1!=8.17
c2!=-1.894
c3!=.114
c4!=0
c5!=0
'Gewünschte Genauigkeit (max. 15 signifikannte Stellen):
eps!=val("1e-16")
maxiter&=1000
t!=0'kleine additive Konstante (nnur en muy schwierigen Características)
'Suchbereich 1:
imprimir "\n Test-Sollwerte: ",6.208317, 9.67556
a!=6
b!=7
BRENT :Waitinput 1000
a!=7
b!=10
BRENT :beep:Waitinput
FIN
Proc BRENT
Declarar x!, c!,d!,e!,tol!,fa!,fb!,fc!
Declarar iter&,m!,r!,s!,p!,q!,xs!
imprimir "\n\n In el Grenzen ";format$("%g",a!),"bis",format$("%g",b!);" fueron gefunden:"
fa!=f(a!)
fb!=f(b!)
if (fa!*fb!)>0
imprimir "\n ERROR: f(a) y f(b) debería diferente Vorzeichen haben"
beep:waitinput:end
endif
c!=a!:fc!=fa!' Zu Beginn es c = a
d!=b!-a!
e!=d!
iter&=0
mientras que iter&<maxiter&
iter&=iter&+1
if (fb!*fc!)>0
c!=a!:fc!=fa!:d!=b!-a!:e!=d!
endif
if abs(fc!)<abs(fb!)
a!=b!:b!=c!:c!=a!
fa!=fb!: fb!=fc!: fc!=fa!
endif
tol!=2*eps!*abs(b!)+t!'Toleranz
m!=(c!-b!)/2
if (abs(m!)>tol!) AND (abs(fb!)>0)' Verfahren muss todavía durchgeführt voluntad
if (abs(e!)<tol!) O (abs(fa!)<=abs(fb!))
d!=m!:e!=m!
más
s!=fb!/fa!
if a!=c!
p!=2*m!*s!
q!=1-s!
más
q!=fa!/fc!
r!=fb!/fc!
p!=s!*(2*m!*q!*(q!-r!)-(b!-a!)*(r!-1))
q!=(q!-1)*(r!-1)*(s!-1)
endif
if p!>0
q!=-q!
más
p!=-p!
endif
s!=e!
e!=d!
if ( (2*p!)<(3*m!*q!-abs(tol!*q!)) ) AND (p!<abs(s!*q!/2))
d!=p!/q!
más
d!=m!
e!=m!
endif
endif
a!=b!
fa!=fb!
if abs(d!)>tol!
b!=b!+d!
más
if m!>0
b!=b!+tol!
más
b!=b!-tol!
endif
endif
más
romper
endif
fb!=f(b!)
endwhile
xs!=b!
imprimir "\n Nullwurzel: ";format$("%g",xs!)," con "
imprimir "\n Restfehler: ";format$("%g",fb!)," gefunden en ";iter&;" Durchgängen."
ENDPROC
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 27.05.2021 ▲ |
|
|
|