Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "mlisp.h"
- #include <iostream>
- #include <cmath>
- double a=0.;
- double b=2.;
- double xmin=0.;
- double tolerance=0.00001;
- double mphi=(3.-sqrt(5))/2.;
- double xa;
- double xb;
- double ya;
- double yb;
- double fun(double x){
- x=x-105./106.;
- return (x*atan(x)-1./3.);
- }
- double golden__section__search(double a, double b);
- double golden__start(double a,double b);
- double _VVV_try(double a,double b,double xa,double ya,double xb,double yb);
- double close__enough_Q(double x,double y);
- double golden__section__search(double a, double b){
- {
- (a<b)? xmin=golden__start(a,b) : xmin=golden__start(b,a);
- }
- newline();
- return(xmin);
- }
- double golden__start(double a,double b){
- {
- xa=a+(mphi*(b-a));
- xb=b-(mphi*(b-a));
- }
- return _VVV_try(a,b,xa,fun(xa),xb,fun(xb));
- }
- double _VVV_try(double a,double b,double xa,double ya,double xb,double yb){
- close__enough_Q(a,b) ? ((a+b) * 0.5) : (
- display("+"),
- (ya < yb) ? (b =xb, xb = xa, yb = ya, xa = a + (mphi * (b-a)), _VVV_try(a,b,xa,fun(xa),xb,yb)) : ( a= xa, xa =xb, ya = yb, xb = (b - mphi*(b-a)), _VVV_try(a,b, xa, ya, xb, fun(xb))
- ));
- }
- double close__enough_Q(double x,double y){
- return (abs(x-y)<tolerance);
- }
- int main(){
- xmin=golden__section__search(a,b);
- display("interval=\t[");
- display(a);
- display(" , ");
- display(b);
- display("]\n");
- display("xmin=\t\t");
- display(xmin);
- newline();
- display("f(xmin)=\t");
- display(fun(xmin));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement