三次样条C语言的实现实验二 .三次样条C语言的实现
1.实验目的:
进一步熟悉三次样条插值法。
掌握编程语言字符处理程序的设计和调试技术。
2.实验要求:
已知:某些点的坐标以及初值条件。
输入:条件点数以及这些点的坐标,边界条件
输出:根据三次样条公式求出多项式公式。
3.程序流程:
(1)输入已知点的个数;
(2)分别输入已知点的X,Y坐标;
(3)输入边界条件;
(4)通过调用函数,求三次样条函数。
三次样条函数如下:
常见边界条件有三种:
(1) 第1种边界条件:
(2) 第2种边界条件:
(3) 周期边界条件
对于第1,2...
实验二 .三次样条C语言的实现
1.实验目的:
进一步熟悉三次样条插值法。
掌握编程语言字符处理程序的设计和调试技术。
2.实验要求:
已知:某些点的坐标以及初值条件。
输入:条件点数以及这些点的坐标,边界条件
输出:根据三次样条公式求出多项式公式。
3.程序
:
(1)输入已知点的个数;
(2)分别输入已知点的X,Y坐标;
(3)输入边界条件;
(4)通过调用函数,求三次样条函数。
三次样条函数如下:
常见边界条件有三种:
(1) 第1种边界条件:
(2) 第2种边界条件:
(3) 周期边界条件
对于第1,2种条件可写成矩阵形式:
对于第3种条件可写成矩阵形式:
通过以上方程求出Mi
其中:
将求出的解带入:
即得所求函数
程序流程图:
↓
↓
↓
↓
程序如下:
#include
#include
using namespace std;
const int MAX = 250;
float x[MAX], y[MAX], h[MAX];
float c[MAX], a[MAX], fxym[MAX];
float f(int x1, int x2, int x3){
float a = (y[x3] - y[x2]) / (x[x3] - x[x2]);
float b = (y[x2] - y[x1]) / (x[x2] - x[x1]);
return (a - b)/(x[x3] - x[x1]);
} //求差分
void printout(int n){
cout< 0)cout< 0)cout<<" + "< 0)cout<<"+ "< 0)cout<<" + "<= 0; i--)
fxym[i] = fxym[i] - B[i]*fxym[i+1];
}
void printout(int n);
int main(){
int n,i; char ch;
do{
cout<<"请输入节点个数:";
cin>>n;
n=n-1;
for(i = 0; i <= n; i++){
cout<<"请输入 X"<>x[i]; //cout<>y[i]; //cout<>t;
switch(t){
case 1:cout<<"请输入 Y0\' Y"<>f0>>f1;
c[0] = 1; a[n] = 1;
fxym[0] = 6*((y[1] - y[0]) / (x[1] - x[0]) - f0) / h[0];
fxym[n] = 6*(f1 - (y[n] - y[n-1]) / (x[n] - x[n-1])) / h[n-1];
break;
case 2:cout<<"请输入 Y0\" Y"<>f0>>f1;
c[0] = a[n] = 0;
fxym[0] = 2*f0; fxym[n] = 2*f1;
break;
default:cout<<"不可用\n";//待定
};//switch
for(i = 1; i < n; i++)
fxym[i] = 6 * f(i-1, i, i+1);
for(i = 1; i < n; i++){
a[i] = h[i-1] / (h[i] + h[i-1]);
c[i] = 1 - a[i];
}
a[n] = h[n-1] / (h[n-1] + h[n]);
cal_m(n);
cout<<"\n输出三次样条插值函数:\n";
printout(n);
cout<<"Do you to have anther try ? y/n :";
cin>>ch;
}while(ch == 'y' || ch == 'Y');
return 0;
}
例题:
设f(x)为定义在【27.7,30】上的函数,在节点xi(i=0,1,2,3)上的值如下:
f(x0)=f(27.7)=4.1, f(x1)=f(28)=4.3,
f(x2)=f(29)=4.1 f(x3)=f(30)=3.0
试求三次样条函数S(x),使它满足边界条件S‘(27.7)=3.0 S’(30)=-4.0
开始
输入已知点个数n
分别输入已知点的X,Y坐标并输入边界条件
调用函数,求三次样条函数
输出结果
_1348251346.unknown
_1348250926.unknown
本文档为【三次样条C语言的实现】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。