zoukankan      html  css  js  c++  java
  • Lagrange插值C++程序

    输入:插值节点数组、插值节点处的函数值数组,待求点

    输出:函数值

    代码如下:把printf的注释取消掉,能打印出中间计算过程,包括Lagrange多项式的求解,多项式每一项等等(代码多次修改,这些prinft不知道还有没有疏漏,日后再检查检查)

    注:如果要求解插值区间内的多个点的函数值,把newx改成数组类型,把result改成指针类型,然后加一层for循环即可

    /* 这里形参必须是int x[], 写作int[] x产生语法错误
        n次插值Lagrange形式
        x: 插值节点
        y : 插值节点函数值
        len : 插值节点个数
        newX: 所求节点
     */
    double lagrangeInterpolation(double x[], double y[], int len, double newx) {
        //printf("--------------
    ");
        double result = 0;// 这里要记得初始化,否则结果错
        double L;  // lagrange interpolation polyminoal
    
        for (int j = 0; j < len; j++) {
            // every interpolation polyminoal
            L = y[j];
            for (int k = 0; k < len; k++) {
                // every term
                if (j == k) {
                    continue;
                }
                //printf("newx[i]=%lf, x[j]=%lf, x[k]=%lf, 
     (newx[i] - x[k]) / (x[j] - x[k])=%lf
    ", newx[i], x[j], x[k], (newx[i] - x[k]) / (x[j] - x[k]));
                //printf("L*(newx[i] - x[k]) / (x[j] - x[k])=%lf
    ", L*(newx[i] - x[k]) / (x[j] - x[k]));
                L *= (newx - x[k]) / (x[j] - x[k]);
            }
            //printf("result[%d]=%lf
    ", i, result[i]);
            result += L;
            //printf("result[%d]=%lf , iter=%d
    ", i, result[i], j);
    
        //printf("array[%d] is: %lf
    ", i, result[i]);
        }
        return result;
    }

    主函数示例:

    int main() {
        printf("Nuerical Analysis Lagrange Interpolation!
    ");
        // 插值节点与函数值double x[] = { 0.46, 0.47, 0.48, 0.49 };
        int len = sizeof(x) / sizeof(x[0]);
        double y[] = { 0.4846555, 0.4937452, 0.5027498, 0.5116683 };
        // 待求节点
        double newX = 0.472;
        double result = lagrangeInterpolation(x, y, len, newX);
        printf("f(0.472) = %lf
    ", result);return 0;
    }

    结果0.495553

  • 相关阅读:
    shell test用法
    Makefile debug的经验
    Makefile 中:= ?= += =的区别
    Makefile中常用的函数
    Makefile选项CFLAGS,LDFLAGS,LIBS
    makefile双冒号规则
    makefile中的伪目标,强制目标和双冒号规则
    makefile 使用环境变量
    linux shell if语句使用方法
    linux的test命令
  • 原文地址:https://www.cnblogs.com/zhaoke271828/p/13879271.html
Copyright © 2011-2022 走看看