牛顿插值求解多项式

  1. #include <iostream>
  2. using namespace std;
  3. //牛顿插值求解多项式
  4. double * xs; //all input x
  5. double * ys; //all input y
  6. int n; //size
  7. //1 2 3 4
  8. //0 -5 -6 3
  9. //1.5
  10. //-2.625
  11. void init()
  12. {
  13. cout << "please input n " << endl;
  14. cin >> n;
  15. xs = new double[n];
  16. ys = new double[n];
  17. //input x
  18. cout << "please input the x‘s value !" << endl;
  19. for(int i=0; i<n; i++)
  20. {
  21. cin >> xs[i];
  22. }
  23. //input y
  24. cout << "please input the y‘s value !" << endl;
  25. for(int i=0; i<n; i++)
  26. {
  27. cin >> ys[i];
  28. }
  29. }
  30. double f(int n)
  31. {
  32. double f=0;
  33. double temp=0;
  34. for(int i=0; i<n+1; i++)
  35. {
  36. temp=ys[i];
  37. for(int j=0; j<n+1; j++)
  38. {
  39. if(i!=j)
  40. temp /= (xs[i]-xs[j]);
  41. }
  42. f += temp;
  43. }
  44. return f;
  45. }
  46. double newton(double x)
  47. {
  48. double result=0;
  49. for(int i=0; i<n; i++)
  50. {
  51. double temp=1;
  52. double fi=f(i);
  53. for(int j=0; j<i; j++)
  54. {
  55. temp = temp*(x-xs[j]);
  56. }
  57. result += fi*temp;
  58. }
  59. return result;
  60. }
  61. int main()
  62. {
  63. init();
  64. double x;
  65. cout << "please input the x‘ value !" << endl;
  66. cin >> x;
  67. cout << "the result of the Newton is " << newton(x);
  68. return 0;
  69. }

来自为知笔记(Wiz)

附件列表

时间: 2024-10-17 13:27:08

牛顿插值求解多项式的相关文章

多项式函数插值:多项式形式函数求值的Horner嵌套算法

设代数式序列 $q_1(t), q_2(t), ..., q_{n-1}(t)$ ,由它们生成的多项式形式的表达式(不一定是多项式): $$p(t)=x_1+x_2q_1(t)+...x_nq_1(t)q_2(t)..q_{n-1}(t)=\sum\limits_{i=1}^n(x_i\prod\limits_{j=1}^{i-1}q_j(t))$$ 一般来讲,按照这个形式计算函数在 $t_0$ 点的取值的复杂度为:n-1次 $q_i(t)$ 求值,n-1次浮点数乘法(生成n个不同的乘积),n-

牛顿迭代法求解平方根

牛顿迭代法求解平方根 2015-05-16 10:30 2492人阅读 评论(1) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 一个实例 迭代简介 牛顿迭代法 牛顿迭代法简介 简单推导 泰勒公式推导 延伸与应用 一个实例 //java实现的sqrt类和方法 public class sqrt { public static double sqrt(double n) { if (n<0) return Double.NaN; double err = 1e

秦九韶算法求解多项式

秦九韶算法是中国南宋时期的数学家秦九韶提出的一种多项式简化算法.在西方被称作霍纳算法.它是一种将一元n次多项式的求值问题转化为n个一次式的算法. 一般地,一元n次多项式的求值需要经过[n(n+1)]/2次乘法和n次加法,而秦九韶算法只需要n次乘法和n次加法.其大大简化了计算过程,即使在现代,利用计算机解决多项式的求值问题时,秦九韶算法依然是最优的算法. 题目:写程序计算给定多项式在给定点x处的值 f(x) = a0 + a1x + … + an-1xn-1 + anxn 分析:对比使用常规算法和

【数值分析】拉格朗日插值与牛顿插值

在工程应用和科学研究中,经常要研究变量之间的关系y=f(x).但对于函数f(x),常常得不到一个具体的解析表达式,它可能是通过观测或实验得到的一组数据(x,f(x)),x为一向量;或则是解析表达式非常复杂,不便于计算和使用.因此我们需要寻找一个计算比较简单的函数S(x)近似代替f(x),并使得S(x)=f(x),这种方法就称为插值法. 常用的插值法有: 一维插值法:拉格朗日插值.牛顿插值.分段低次插值.埃尔米特插值.样条插值. 二维插值法:双线性插值.双二次插值. 拉格朗日插值法 已知函数f(x

利用牛顿迭代法求解非线性方程组

最近一个哥们,是用牛顿迭代法求解一个四变量方程组的最优解问题,从网上找了代码去改进,但是总会有点不如意的地方,迭代的次数过多,但是却没有提高精度,真是令人揪心! 经分析,发现是这个方程组中存在很多局部的极值点,是用牛顿迭代法不能不免进入局部极值的问题,更程序的初始值有关! 发现自己好久没有是用Matlab了,顺便从网上查了查代码,自己来修改一下! 先普及一下牛顿迭代法:(来自百度百科) 牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson m

快速傅里叶变换(FFT)求解多项式乘法

在我还会FFT的时候赶快写下一篇博客留着以后看...... FFT是用来求解多项式乘法,那么首先我们要知道多项式是啥. \[A(x) = a_0+a_1x^1+a_2x^2+···+a_{n-1}x^{n-1} \] 这是个n-1次多项式(最高项是\(x^{n-1}\)),\(a_0,a_1,···a_{n-1}\)是它各项的系数,该多项式可以写成: \[A(x) = \sum_{j=0}^{n-1}a_jx^j \] 一个多项式可以通过一组系数所确定,而这组系数所组成的向量也叫做系数向量(如\

MATLAB实现牛顿插值

牛顿插值法的原理,在维基百科上不太全面,具体可以参考这篇文章.同样贴出,楼主作为初学者认为好理解的代码. function p=Newton1(x1,y,x2) %p为多项式估计出的插值 syms x n = length(x1); %差商的求法 for i=2:n f1(i,1)=(y(i)-y(i-1))/(x1(i)-x1(i-1)); end for i=2:n for j=i+1:n f1(j,i)=(f1(j,i-1)-f1(j-1,i-1))/(x1(j)-x1(j-i)); en

牛顿差值多项式c语言版

#include <iostream>#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>const int n=4;//插值节点的最大数为四 using namespace std; double x1[n+1]= {0.4,0.55,0.65,0.8,0.9};double y1[n+1]= {0.4175,0.57815,0.69657,0.88811,

数据结构学习笔记 求解多项式

#include<stdio.h> #include<time.h> #include<math.h> clock_t start ,stop; double duration; #define MAXN 10  #define MAXK 1e7 double f1(int n ,double a[],double x); double f2(int n ,double a[],double x); int main() { int i; double a[MAXN];