/*
* @file interp.cpp
* @author lsy
* @date 2015-3-30
* @description
* Interpolation method: Lagrange/ Piecewise Linear/ Spline3
* Function: exp(-2x)
* Interval: [0,6]
* Input: Number of segments, method
* Output: Value of interpolation and residuals
*/
#include<stdio.h>
#include<math.h>
#include<ctype.h>
#include<stdlib.h>
typedef struct{
double x;
double y;
}m_Point;
void Lagrange(int n, m_Point *known_points, m_Point *unknown_points);
void PiecewiseLinear(int n, m_Point *known_points, m_Point *unknown_points);
void Spline(int n, m_Point *known_points, m_Point *unknown_points);
void ChaseMethod(int n, double *m, double *beta);
int main()
{
int n=0, method=0;
printf("Please input n:\n");//read in 'n'
scanf("%d",&n);
if(n==0) return 0;
printf("Please choose interpolation method, Lagrange(1)/PiecewiseLinear(2)/Spline(3):\n");//read in method
scanf("%d",&method);
m_Point *known_points=(m_Point*)malloc((n+1)*sizeof(m_Point));//creat array of the known points
m_Point *unknown_points=(m_Point*)malloc((n)*sizeof(m_Point));//create array of the interplating points(y is precise)
double tmp=exp(-12.0/n);//calculating the known points
known_points[0].x=0;
known_points[0].y=1;
for (int i=1; i<=n; i++)
{
known_points[i].x=i*6.0/n;
known_points[i].y=known_points[i-1].y*tmp;
}
unknown_points[0].x=3.0/n;//calculating the precise value of the interpolating points
unknown_points[0].y=exp(-6.0/n);
for (int i=1; i<n; i++)
{
unknown_points[i].x=6.0*(i+0.5)/n;
unknown_points[
拉格朗日、分段线性、三次样条 插值 C语言
最新推荐文章于 2022-10-08 23:49:49 发布
本文详细介绍了如何使用C语言来实现三种不同的插值方法:拉格朗日插值、分段线性插值以及三次样条插值。通过实例代码,阐述了每种插值方法的原理和应用,为数值计算提供了实用的编程技巧。
摘要由CSDN通过智能技术生成