he he
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