| |
|
|
p.specht
| Pour une Funktion 3. Grades nécessaire cela procéder pour R. Brent [1973] seulement 8 Passes, um sur 16-stellige Genauigkeit trop venons. Allerdings sommes Voraussetzungen trop rencontrer: qui Anfangswerte devrait différent Vorzeichen avons. en supplément muss on déjà quelque chose Ahnung avons, comment qui Funktionsgraph ungefähr aussieht. là cela nachfolgende Programme ici seulement une Fehlermeldung abgibt, sich alors pas (comment qui Profi-Programme) selber sur qui cherche pour geeigneten Werten begibt, handelt es sich seulement einmal seulement um une Prinzipstudie. Immerhin funktioniert cela Prinzip mais très bien!
Titre de la fenêtre "Prinzipstudie: Nichtlineare Gleichung numerisch Lösen pour Brent [1973]"
Fenêtre Style 24:CLS:font 2
declare c0!,c1!,c2!,c3!,c4!,c5!,x!,a!,b!,c!,d!,e!,tol!,fa!,fb!,fc!
declare iter&,maxiter&,eps!,m!,r!,s!,t!,p!,q!,xs!
'Funktionstyp qui trop lösenden Gleichung (ici:Polynom max. 5.Grades)
proc f :parameters x!
return c0!+x!*c1!+x!*x!*c2!+x!*x!*x!*c3!+x!*x!*x!*x!*c4!+x!*x!*x!*x!*x!*c5!
endproc
'Funktionsparameter: Testfunktion ist ici 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 se mettre):
eps!=val("1e-16")
maxiter&=1000
t!=0'kleine additive Konstante (nnur chez très schwierigen Funktionen)
'Suchbereich 1:
imprimer "\n Test-Sollwerte: ",6.208317, 9.67556
a!=6
b!=7
BRENT :Waitinput 1000
a!=7
b!=10
BRENT :beep:Waitinput
FIN
Proc BRENT
Déclarer x!, c!,d!,e!,tol!,fa!,fb!,fc!
Déclarer iter&,m!,r!,s!,p!,q!,xs!
imprimer "\n\n dans den Grenzen ";format$("%g",a!),"bis",format$("%g",b!);" wurden trouvé:"
fa!=f(a!)
fb!=f(b!)
si (fa!*fb!)>0
imprimer "\n ERROR: f(a) et f(b) devrait différent Vorzeichen haben"
beep:waitinput:end
endif
c!=a!:fc!=fa!' trop Beginn ist c = a
d!=b!-a!
e!=d!
iter&=0
tandis que iter&<maxiter&
iter&=iter&+1
si (fb!*fc!)>0
c!=a!:fc!=fa!:d!=b!-a!:e!=d!
endif
si 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
si (abs(m!)>tol!) AND (abs(fb!)>0)' procéder muss encore durchgeführt volonté
si (abs(e!)<tol!) OU (abs(fa!)<=abs(fb!))
d!=m!:e!=m!
d'autre
s!=fb!/fa!
si a!=c!
p!=2*m!*s!
q!=1-s!
d'autre
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
si p!>0
q!=-q!
d'autre
p!=-p!
endif
s!=e!
e!=d!
si ( (2*p!)<(3*m!*q!-abs(tol!*q!)) ) AND (p!<abs(s!*q!/2))
d!=p!/q!
d'autre
d!=m!
e!=m!
endif
endif
a!=b!
fa!=fb!
si abs(d!)>tol!
b!=b!+d!
d'autre
si m!>0
b!=b!+tol!
d'autre
b!=b!-tol!
endif
endif
d'autre
pause
endif
fb!=f(b!)
endwhile
xs!=b!
imprimer "\n Nullwurzel: ";format$("%g",xs!)," avec "
imprimer "\n Restfehler: ";format$("%g",fb!)," trouvé dans ";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 ▲ |
|
|
|