📄 分段线性插值.cpp
字号:
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <Malloc.h>
#include <iostream.h>
double f(double x)
{
return exp(x)+10*x-2;
}
double f(double x,double y)
{
return y-2.0*x/y;
}
void main()
{
cout<<"******分段线性插值******"<<endl;
double x0,y1=0,a=0,b=0,temp;
double *x,*y;
int num;
cout<<"输入要分的段数:";
cin>>num;
x=(double *)malloc(sizeof(double)*num);
y=(double *)malloc(sizeof(double)*num);
int i,j,seg=0;
while(seg<num)
{
cout<<"x["<<seg<<"]=";
cin>>x[seg];
y[seg]=f(x[seg]);
seg++;
}
for(i=0;i<seg-1;i++)
for(j=0;j<seg-1;j++)
{
if(x[j]>x[j+1])
{temp=x[j];x[j]=x[j+1];x[j+1]=temp;
temp=y[j];y[j]=y[j+1];y[j+1]=temp;
}
else if(x[j]==x[j+1])
cout<<"Can't have same values!"<<endl;
}
cout<<"Please input x:";
while(cin>>x0)
{
for(i=0;i<seg;i++)
{
if(x0>=x[i] && x0<=x[i+1])
{
if(i!=seg)
{
y1+=(x0-x[i+1])/(x[i]-x[i+1])*y[i]+(x0-x[i])/(x[i+1]-x[i])*y[i+1]/1.0;
a=(y[i]-y[i+1])/(x[i]-x[i+1])/1.0;
b=(x[i]*y[i+1]-x[i+1]*y[i])/(x[i]-x[i+1])/1.0;
}
else y1+=0;
}
}
if(b==0) cout<<"Li(x)="<<a<<"x"<<endl;
else if(b>0) cout<<"Li(x)="<<a<<"x+"<<b<<endl;
else cout<<"Li(x)="<<a<<"x"<<b<<endl;
cout<<"f(x)="<<f(x0)<<" "<<"一次分段插值:S1="<<y1<<endl;
cout<<"误差是:"<<fabs(f(x0)-y1)<<endl;
y1=0;a=0;b=0;
}
free(x);
free(y);
getch();
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -