zoukankan      html  css  js  c++  java
  • C语言实现newton多项式插值法

    博主原创,未经允许,不得转载!

    #define _CRT_SECURE_NO_DEPRECATE
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>;
    #define n 6
    void ark(float A[][6], float x1[], float y1[],int n1) {
    for (int r = 0; r <= n1 - 1; r++) {
    A[r][0] = y1[r];
    }
    for (int k = 1; k <= n1; k++) {
    for (int r = k; r <= n1; r++) {
    A[r][k] = (A[r][k - 1] - A[r - 1][k - 1]) / (x1[r] - x1[r - k]);
    }
    }
    for (int i = 0; i <= n1; i++) {
    printf("%f ", A[i][i]);
    }

    }

    //此算法运用递归可以算出组合数

    float C(int r, int k, float x[], int n1) {
    float s = 0;
    if (k == 0)
    return 1;
    else if (k == 1) {
    for (int i = 0; i < r; i++)
    s = s + x[i];
    return s;
    }
    else {
    for (int j = k - 1; j<r; j++)
    s = s + x[j] * C(j, k - 1, x, n1);
    return s;
    }
    }

    void main() {
    /*
    printf("请输入个数n", " ");
    scanf("%d", &n);
    printf("请输入相应的坐标", " ");
    for (int i = 0; i <= n - 1; i++) {
    printf("x[%d]", i);
    scanf("%f", &x[i]);
    printf("y[%d]", i);
    scanf("%f", &y[i]);
    printf(" ");
    }
    */
    float A[n][n], B[n];
    float x[n] = { 0.40,0.55,0.65,0.80,0.90,1.05 };
    float y[n] = { 0.41075,0.57815,0.69675,0.88811,1.02652,1.25382 };
    ark(A,x,y,6);
    for (int k = n-1; k >=0; k--) {
    B[k] = 0;
    for (int i = 0; i <n - k; i++) {
    B[k] = B[k] + pow(-1, i)*(A[k+i][k+i])*C(k + i, i, x, n);
    }
    }
    for (int i = 0; i <n; i++) {
    printf("%f ", B[i]);
    }

    system("pause");

    }

  • 相关阅读:
    工厂模式
    不错公众号
    linux 下的 正则表达式(awk,sed,awk)学习
    CentOS 7 中安装 bcc-tools
    docker
    Python爬去知乎上问题下所有图片
    过滤重复数据取一条
    阿里云80端口被系统占用
    过滤重复项取时间最近的数据
    Layui的几个问题记录一下
  • 原文地址:https://www.cnblogs.com/cayman/p/6049118.html
Copyright © 2011-2022 走看看