C++牛顿插值法找e

今天遇到一题要运用到牛顿插值法寻找e的问题,但我输出的e却总是离实际值有一定差距,不知道式这个方法本身就会有差距,还是我的程式有甚麽问题,来寻求各位的帮助,附上我写的程式

img

这要看你题目中对误差要求的具体描述,你可能少了最后一项误差值。题目贴出来看一下

查到牛顿插值法的计算 C++

#include <iostream>
#include <cmath>

using namespace std;

double newton_interpolation(double x[], double y[], int n, double e) {
    double f[n][n];
    for (int i = 0; i < n; i++) {
        f[i][0] = y[i];
    }
    for (int j = 1; j < n; j++) {
        for (int i = 0; i < n-j; i++) {
            f[i][j] = (f[i+1][j-1] - f[i][j-1]) / (x[i+j] - x[i]);
        }
    }
    double result = f[0][0];
    for (int j = 1; j < n; j++) {
        double term = f[0][j];
        for (int i = 0; i < j; i++) {
            term *= (e - x[i]);
        }
        result += term;
    }
    return result;
}

int main() {
    double x[] = {1, 2, 3, 4, 5};
    double y[] = {exp(1), exp(2), exp(3), exp(4), exp(5)};
    int n = sizeof(x) / sizeof(x[0]);
    double e = 2.71828;
    double result = newton_interpolation(x, y, n, e);
    cout << "e ≈ " << result << endl;
    return 0;
}
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7563110
  • 这篇博客你也可以参考下:【C++】模板定义位置引发未定义标识符 “E“
  • 除此之外, 这篇博客: 密立根油滴实验数据处理(C++实现)中的 注意注意:也就是不看第一次和第二次测得的e最终平均值和E相对误差,只看最后一次的就好啦* 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 不看画“×”的(忽略就好),只看最后一次画“√”的就好了,
    在这里插入图片描述其实看到这里也就结束啦!如果你跟我的处理方式一样一样,解决这个实验数据处理够用啦!

    ———————————————————假设有分割线————————————————

    1题外话不知道你有没有发现我是自定义的四舍五入函数?
    原因是,我在网上查找的四舍五入是这样的:

    在math.h或cmath头文件中有四舍五入有关的函数
    在这里插入图片描述
    但是我试了一下会显示这样的错误,error C2065: ‘round’ : undeclared identifier,(目前还不知道为什么会这样,还没去查)然后我就四舍五入关系写了一个,需要保留的小数,调用函数就可以啦。

    /*自定义函数四舍五入*/
    int round(float f)
    {
    	if ((int)f+0.5>f)
    	return (int)f;
    	else
    	return (int)f + 1;
    }
    
    

    2题外话****我还用到了绝对值函数,下面是我结合课本所学知识和网上查到,都是我测试过的,比网上找的靠谱哦!(因为关于头文件跟调用函数)
    首先,绝对值里可以是任意的两个变量哦,下面是我在处理大物时写的

    E=(fabs(e_Zhong_Ever-e0))/1.60e-19;	cout<<"  E相对误差:"<<E*100<<'%'<<endl;
    

    在处理大物实验数据时,通常在求解相对误差时需要用到绝对值函数

    首先,绝对值里可以是任意的两个变量哦,下面是我在处理大物时写的

    E=(fabs(e_Zhong_Ever-e0))/1.60e-19;	cout<<"  E相对误差:"<<E*100<<'%'<<endl;
    

    下面都是我在结合所学知识以及网上查找测试之后写的,因为网上有的介绍的头文件与相应的函数是不匹配的。
    在这里插入图片描述

    在这里插入图片描述

    # include<iostream>
    //# include<cmath>
    using namespace std;
    
    int main()
    {int a;
    //double b;
    a=abs(223-3);
    //b=fabs(223.8-3.5);
    cout<<"a="<<a<<endl;
    //cout<<"b="<<b<<endl;
    return 0;
    }
    

    在这里插入图片描述

    **二.#include内,有fabs()函数,可以对浮点型变量求绝对值**

    # include<iostream>
    # include<cmath>      //浮点型需要求绝对值
    using namespace std;
    
    int main()
    {int a;
    double b; 
    a=abs(223-3);
    b=fabs(223.8-3.5);          
    cout<<"a="<<a<<endl;
    cout<<"b="<<b<<endl;
    return 0;
    }
    

    在这里插入图片描述**三.#include内,有long labs(long   n) 返回长整型参数n的绝对值**
    这个就不举例啦,不常用到。