he he
unknown
plain_text
a year ago
5.3 kB
8
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