拉格朗日、分段线性、三次样条 插值 C语言

/*
 * @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[
  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值