📄 fenduanpowu.cpp
字号:
//分段抛物插值算法源程序:
#include<iostream.h>
#define SIZE 10
void main()
{
int n,i=1,j=1;
double xx,yy=1,result=0;
double x[SIZE];
double y[SIZE];
cout<<"**********分段抛物插值**********"<<endl<<endl;
cout<<"输入已知插值结点总数目(未剔除时应当大于3): ";
cin>>n;
while(n<3)
{
cout<<"输入错误,点的数目必须大于3!请重新输入: ";
cin>>n;
}
cout<<"依次输入第结点的坐标: x y"<<endl;
while(i<=n)
{
cout<<"第 "<<i<<" 个点的坐标为 ";
cin>>x[i]>>y[i];
i++;
}
cout<<"输入所求插值结点x坐标: ";
cin>>xx;
if(xx>=x[n-1])
{
x[1]=x[n-2];
x[2]=x[n-1];
x[3]=x[n];
y[1]=y[n-2];
y[2]=y[n-1];
y[3]=y[n];
}
{
for(j=1;j<n;j++)
{
if(xx>=x[j]&&xx<=x[j+1])
{
if((xx-x[j-1])<=(x[j+2]-xx))
{
x[1]=x[j-1];
x[2]=x[j];
x[3]=x[j+1];
y[1]=y[j-1];
y[2]=y[j];
y[3]=y[j+1];
}
else
{
x[1]=x[j];
x[2]=x[j+1];
x[3]=x[j+2];
y[1]=y[j];
y[2]=y[j+1];
y[3]=y[j+2];
}
}
}
}
cout<<"自动筛选后坐标为: "<<x[1]<<","<<y[1]<<" "<<x[2]<<","<<y[2]<<" "<<x[3]<<","<<y[3]<<endl;
for(i=1;i<=3;i++)
{
for(j=1,yy=1;j<=3;j++)
if(j!=i)yy=yy*(xx-x[j])/(x[i]-x[j]);
result=result+yy*y[i];
}
cout<<"所求y坐标为: "<<result;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -