he he

 avatar
unknown
plain_text
5 months ago
5.3 kB
5
Indexable
#include<bits/stdc++.h>
using namespace std;


#define f1(x,y,z) (85-6*y+z)/27
#define f2(x,y,z) (72-6*x-2*z)/15
#define f3(x,y,z) (110-x-y)/54
void jacobi(){
    double x1,y1,z1,e1,e2,e3,x0,y0,z0;
    x0=y0=z0=0;
    do{
        x1=f1(x0,y0,z0);
        y1=f2(x0,y0,z0);
        z1=f3(x0,y0,z0);
        e1=abs(x1-x0);
        e2=abs(y1-y0);
        e3=abs(z1-z0);
        x0=x1;
        y0=y1;
        z0=z1;
    }while(e1>.001&&e2>.001&&e3>.001);

    cout<<x0<<" "<<y0<<" "<<z0<<endl;
}


double pos,neg,a,b,c,d,e;
#define fb(x) a*x*x*x*x+b*x*x*x+c*x*x+d*x+e

double bisection_ans(double pos,double neg){
    double x,f1,f2,fc;
    do{
        //bisection
        // x=(pos+neg)/2;
        // f1=fb(x);
        // if(f1>0){
        //     pos=x;
        // }else{
        //     neg=x;
        // }

        f1=fb(neg);
        f2=fb(pos);
        x=(pos*f1-neg*f2)/(f1-f2);
        fc=fb(x);
        if(fc>0){
            pos=x;
        }else{
            neg=x;
        }
    }while(abs(f1)>.00001/*abs(fc)>.001*/);
 return x;
}

void bisection(){
    a=b=c=d=e=0;
    cin>>c>>d>>e;
    double n=floor(sqrt(abs(a+b+c+d+e)))+10;
    vector<pair<double,double>>interval;
    for(double i=-n;i<n;i+=0.1){
        if(fb(i)*fb(i+.1)<0){
            interval.push_back({i,i+.1});
        }
    }
    set<double>st;
    for(auto i:interval){
        double ans=bisection_ans(i.first,i.second);
        ans=floor(ans);
        st.insert(ans);
    }
    cout<<st.size()<<endl;
    for(auto i:st){
        cout<<i<<" ";
    }
}


#define fn(x) x*x*x-3*x-5
#define dfn(x) 3*x*x-3
void newtonraphsan(){
    double x0,x1,x2;
    cin>>x1>>x2;
    double x,f1,f2,df1;
    do{
        //newton raphsan
        // f1=fn(x0);
        // df1=dfn(x0);
        // x=x0-(f1/df1);
        // x0=x;
        // f1=fn(x);

        //secant
        f1=fn(x1);
        f2=fn(x2);
        x=x1-(f1*(x1-x2))/(f1-f2);
        x1=x2;
        x2=x;
        f1=fn(x);

    }while(abs(f1)>.01);
    cout<<x<<endl;


    // a=b=c=d=e=0;
    // cin>>c>>d>>e;
    // double n=floor(sqrt(abs(a+b+c+d+e)))+10;
    // vector<pair<double,double>>interval;
    // for(double i=-n;i<n;i+=0.1){
    //     if(fb(i)*fb(i+.1)<0){
    //         interval.push_back({i,i+.1});
    //     }
    // }
    // set<double>st;
    // for(auto i:interval){
    //     double ans=bisection_ans(i.first,i.second);
    //     ans=floor(ans);
    //     st.insert(ans);
    // }
    // cout<<st.size()<<endl;
    // for(auto i:st){
    //     cout<<i<<" ";
    // }
}


void gauss_elimination(){
    int n;
    cin>>n;
    double arr[n][n+1],x[n],ratio;
    for(int i=0;i<n;i++){
        for(int j=0;j<=n;j++){
            cin>>arr[i][j];
        }
    }
    for(int i=0;i<n;i++){
        if(arr[i][i]==0){
            cout<<"ERROR"<<endl;
        }
        break;

        for(int j=i+1;j<n;j++){
            ratio=arr[j][i]/arr[i][i];
            for(int k=0;k<=n;k++){
                arr[j][k]-=(arr[i][k]*ratio);
            }
        }
    }

    x[n-1]=arr[n-1][n]/arr[n-1][n-1];

    for(int i=n-2;i>-1;i--){
        x[i]=arr[i][n];
        for(int j=i+1;j<n;j++){
            x[i]-=(arr[i][j]*x[j]);
        }
        x[i]=x[i]/arr[i][i];
    }

    for(int i=0;i<n;i++){
        cout<<x[i]<<" ";
    }
}


#define f(x,y) (x+y*y)
void runge_kutta(){
    double x0,y0,xn,interval;
    cin>>x0>>y0>>xn>>interval;
    double h=(xn-x0)/interval;
    double yn,k1,k2,k3,k4,k;
    for(int i=1;i<=interval;i++){
        k1=h*f(x0,y0);
        k2=h*f(x0+h/2,y0+k1/2);
        k3=h*f(x0+h/2,y0+k2/2);
        k4=h*f(x0+h,y0+k3);
        k=(k1+2*k2+2*k3+k4)/6;
        yn=y0+k;
        y0=yn;
        x0+=(i*h);
    }
    cout<<yn<<endl;
}


void newton_forward(){
    int n;
    cin>>n;
    double x[n],y[n];
    for(int i=0;i<n;i++){
        cin>>x[i]>>y[i];
    }
    double value;
    cin>>value;
    double diff[n+1][n+1];
    // for(int i=0;i<n-1;i++){
    //     diff[i][0]=y[i+1]-y[i];
    // }

    for(int i=n;i>-1;i--){
        diff[i][0]=y[i]-y[i-1];
    }

    // for(int j=2;j<5;j++){
    //     for(int i=0;i<n;i++){
    //         diff[i][j]=diff[i+1][j-1]-diff[i][j-1];
    //     }
    // }

    for(int j=1;j<5;j++){
        for(int i=n;i>j;i--){
            diff[i][j]=diff[i][j-1]-diff[i-1][j-1];
        }
    }

    //int id=0;
    int id=n-1;
    while(x[id]<value){id++;}
    id--;
    double h=x[1]-x[0];
    double u=(value-x[id])/h;

    double y_value=y[id];

    double fact_u=1.0,multi=1.0;
    for(int i=1;i<5;i++){
        fact_u*=(u+i-1);
        //fact_u*=(u-i+1);
        multi*=i;
        y_value+=(fact_u/multi)*diff[id][i];
    }

    cout<<y_value<<endl;
}


#define f(x) log(x)
void simpson(){
    double low,up;
    cin>>low>>up;
    double interval;
    cin>>interval;
    double step=(up-low)/interval;
    double ans=f(low)+f(up);
    for(int i=1;i<interval;i++){
        double x=low+i*step;
        if(i%2!=0){ans+= (4*f(x));}
        else{
            ans+=(2*f(x));
        }
    }
    cout<<ans*step/3<<endl;
}


int main(){
    newton_forward();
}
Editor is loading...
Leave a Comment