• 大小: 3.13MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-09-09
  • 语言: C/C++
  • 标签:

资源简介

将三次样条函数封装成了一个CSpline类。实现了样条函数I型边界条件和II型边界条件。

资源截图

代码片段和文件信息

#include “StdAfx.h“
#include “3OrderSpline.h“


CSpline::CSpline(void)
{
}


CSpline::~CSpline(void)
{
}
//================================================================
// 函数功能: 利用求出的二阶导数求给定点值(结合Spline1Spline2)
// 输入参数: *xa 为横坐标值,ya为纵坐标值,n为点个数,m为二阶偏导数
//            x为给定点,y接收插出来的值
// 返回值:   无返回值
//
// 作者:    蒋锦朋   1034378054@qq.com
// 单位:    中国地质大学(武汉) 地球物理与空间信息学院
// 日期:    2014/12/03
//================================================================
void CSpline::Splint(double *xadouble *yadouble *mint ndouble &xdouble &y)
{
int klokhik;
klo=0; khi=n-1;
double hhbbaa;

while(khi-klo>1)            //  二分法查找x所在区间段
{
k=(khi+klo)>>1;
if(xa[k]>x)  khi=k;
else klo=k;
}
hh=xa[khi]-xa[klo];

aa=(xa[khi]-x)/hh;
bb=(x-xa[klo])/hh;

y=aa*ya[klo]+bb*ya[khi]+((aa*aa*aa-aa)*m[klo]+(bb*bb*bb-bb)*m[khi])*hh*hh/6.0;

}
//===========================================================================
// 函数功能: 对一系列点求二阶偏导数,点横坐标单调递增(I型边界)(结合Spline)
// 输入参数: *xa 为横坐标值,ya为纵坐标值,n为点个数,m为二阶偏导数(输出值)
//            bound1、bound2为边界点一阶偏导数
// 返回值:   无返回值
//
// 作者:    蒋锦朋   1034378054@qq.com
// 单位:    中国地质大学(武汉) 地球物理与空间信息学院
// 日期:    2014/12/03
//===========================================================================
void CSpline::Spline1(double *xadouble *yaint ndouble *&mdouble bound1double bound2)
{
                                        //  追赶法解方程求二阶偏导数
double f1=bound1f2=bound2;

double *a=new double[n];                //  a:稀疏矩阵最下边一串数
double *b=new double[n];                //  b:稀疏矩阵最中间一串数
double *c=new double[n];                //  c:稀疏矩阵最上边一串数
double *d=new double[n];

double *f=new double[n];

double *bt=new double[n];
double *gm=new double[n];

double *h=new double[n];
m=new double[n];

for(int i=0;i for(int i=0;i for(int i=1;i a[n-1]=1;

c[0]=1;
for(int i=1;i
for(int i=0;i f[i]=(ya[i+1]-ya[i])/(xa[i+1]-xa[i]);

d[0]=6*(f[0]-f1)/h[0];
d[n-1]=6*(f2-f[n-2])/h[n-2];

for(int i=1;i
bt[0]=c[0]/b[0];                                             //  追赶法求解方程
for(int i=1;i
gm[0]=d[0]/b[0];
for(int i=1;i<=n-1;i++)  gm[i]=(d[i]-a[i]*gm[i-1])/(b[i]-a[i]*bt[i-1]);

m[n-1]=gm[n-1];
for(int i=n-2;i>=0;i--)  m[i]=gm[i]-bt[i]*m[i+1];

delete a;
delete b;
delete c;
delete d;
delete gm;
delete bt;
delete f;
delete h;
}
//===========================================================================
// 函数功能: 对一系列点求二阶偏导数,点横坐标单调递增(II型边界)(结合Spline)
// 输入参数: *xa 为横坐标值,ya为纵坐标值,n为点个数,m为二阶偏导数(输出值)
//            bound1、bound2为边界点二阶偏导数,当bound1和bound2不给值时则使用
//            默认值0,即自然边界
// 返回值:   无返回值
//
// 作者:    蒋锦朋   1034378054@qq.com
// 单位:    中国地

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       5266  2014-12-04 16:16  三次样条函数插值\3OrderSpline.cpp

     文件        329  2014-12-04 16:16  三次样条函数插值\3OrderSpline.h

     文件     936960  2014-12-04 16:16  三次样条函数插值\三次样条插值.ppt

     文件    2792008  2014-12-04 16:21  三次样条函数插值\三次样条插值程序原理.docx

     文件      16139  2014-12-04 16:22  三次样条函数插值\调用方法.docx

     目录          0  2014-12-05 23:33  三次样条函数插值

----------- ---------  ---------- -----  ----

              3750702                    6


评论

共有 条评论