牛顿差值多项式

实验题目:Newton插值多项式相关知识:

通过n+1个节点的次数不超过n的Newton插值多项式为:

 

x

0

10

20

30

40

50

60

70

80

90

100

110

120

y

5

1

7.5

3

4.5

8.8

15.5

6.5

-5

-10

-2

4.5

7

#include <iostream>
#include <vector>using namespace std;//用来保存多项式系数
vector<double> vc; // 牛顿差值多项式 数据double data[][2] = {0,5,10,1,20,7.5,30,3,40,4.5,50,8.8,60,15.5,70,6.5,80,-5,90,-10,100,-2,110,4.5,120,7};//计算出差值函数
void BuildNewtonFunc(double data[][2],const int count)
{//计算出每个 基函数 的系数 下面用 小写字母 c+数字 来注释表示vc.push_back(data[0][1]); //第一个基函数的系数 为y0 ,同时基函数也是常指函数double c0 = vc[0];int k ,i;double d;double u;for(k=1;k< count;k++){d = data[k][0]-data[k-1][0];  //利用 u = vc[k-1];for(i=k-2;i>= 0;i--)  //这个for循环利用的是嵌套乘法 或者 霍纳算法 进行分解{                     // 目的是用已知的c(i)来推算出 未知的 c(i+i)u = u *(data[k][0]-data[i][0])+vc[i];d = d *(data[k][0]-data[i][0]);}vc.push_back((data[k][1]-u)/d);}}
void NewtonFunc(vector<double> vc ,const double x,double &y)
{y = 0;int i;int j;double temp;for(i=0;i<vc.size();++i){temp = vc[i];for(j=0;j<i;j++){temp *= x - data[j][0];	}y += temp;}
}int main()
{BuildNewtonFunc(data,sizeof(data)/sizeof(data[0]));double y;NewtonFunc(vc,65,y);//cout << y << endl;printf("%f",y);return 0;
}

 

 

 

 

 

试验要求:利用Newton插值多项式求被插值函数f(x)在点x=65处的近似值。建议:画出Newton插值多项式的曲线。

下面的算法我借鉴的机械工业出版社的一本数值计算的书《数值分析》/.(美) David Kincaid,(美)Ward Cheney著/.王国荣, 俞耀明, 徐兆亮译

 

WIN32代码

 

// application.
//#include  <windows.h>
#include <iostream>
#include <vector>LRESULT CALLBACK MainWndProc(HWND hwnd ,UINT message, WPARAM wParam,LPARAM lParam);//---------------------------------------------------------------------------using namespace std;//用来保存多项式系数
vector<double> vc; // 牛顿差值多项式 数据double data[][2] = {0,5,10,1,20,7.5,30,3,40,4.5,50,8.8,60,15.5,70,6.5,80,-5,90,-10,100,-2,110,4.5,120,7};//计算出差值函数
void BuildNewtonFunc(double data[][2],const int count)
{//计算出每个 基函数 的系数 下面用 小写字母 c+数字 来注释表示vc.push_back(data[0][1]); //第一个基函数的系数 为y0 ,同时基函数也是常指函数double c0 = vc[0];int k ,i;double d;double u;for(k=1;k< count;k++){d = data[k][0]-data[k-1][0];  //利用 u = vc[k-1];for(i=k-2;i>= 0;i--)  //这个for循环利用的是嵌套乘法 或者 霍纳算法 进行分解{                     // 目的是用已知的c(i)来推算出 未知的 c(i+i)u = u *(data[k][0]-data[i][0])+vc[i];d = d *(data[k][0]-data[i][0]);}vc.push_back((data[k][1]-u)/d);}}
void NewtonFunc(vector<double> vc ,const double x,double &y)
{y = 0;int i;int j;double temp;for(i=0;i<vc.size();++i){temp = vc[i];for(j=0;j<i;j++){temp *= x - data[j][0];	}y += temp;}
}//---------------------------------------------------------------------------int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR     lpCmdLine,int       nCmdShow)
{char szClassName[] = "MainWClass";	WNDCLASSEX wndclass;// 用描述主窗口的参数填充WNDCLASSEX结构wndclass.cbSize = sizeof(wndclass); // 结构的大小wndclass.style = CS_HREDRAW|CS_VREDRAW;//指定如果大小改变就重画wndclass.lpfnWndProc = MainWndProc; // 窗口函数指针wndclass.cbClsExtra = 0;//wndclass.cbWndExtra = 0; //wndclass.hInstance = hInstance;//实例句柄wndclass.hIcon = ::LoadIcon(NULL,IDI_APPLICATION);//使用预定义的图标 wndclass.hCursor = ::LoadCursor(NULL,IDC_ARROW);//使用预定义的光标 wndclass.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH);//使用白色背景画刷wndclass.lpszMenuName = NULL;//不指定菜单 wndclass.lpszClassName = szClassName;//窗口类的名称 wndclass.hIconSm = NULL;//没有类的小图标 //注册窗口类::RegisterClassEx(&wndclass);HWND hwnd = ::CreateWindowEx(0,//扩展样式szClassName,//类名"My First Window",//标题 WS_OVERLAPPEDWINDOW,//窗口风格 overlapped windowCW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,//父窗口句柄NULL,// 菜单句柄hInstance , // 程序实例句柄 NULL);if (hwnd == NULL){	::MessageBox(NULL,"ERror","error",MB_OK);return -1;}//显示窗口,刷新客户区::ShowWindow(hwnd,nCmdShow);::UpdateWindow(hwnd);MSG msg ;while(::GetMessage(&msg,NULL,0,0)){::TranslateMessage(&msg);::DispatchMessage(&msg);}return msg.wParam;
}
void DrawLine(HDC hdc,int ax,int ay,int bx,int by)
{::MoveToEx(hdc, ax, ay, NULL);::LineTo(hdc, bx ,by);
}
LRESULT CALLBACK MainWndProc(HWND hwnd ,UINT message, WPARAM wParam,LPARAM lParam)
{char szText[] = "最简单的窗口";int cx,cy;double i,y,y2;switch(message){case WM_PAINT:{HDC hdc;PAINTSTRUCT ps;hdc = ::BeginPaint(hwnd ,&ps);RECT rt;::GetClientRect(hwnd,&rt);cx = rt.right;cy = rt.bottom;//::TextOut(hdc ,10,10,szText,strlen(szText));BuildNewtonFunc(data,sizeof(data)/sizeof(data[0]));/*double y;NewtonFunc(vc,65,y);*/::SetMapMode(hdc,MM_ANISOTROPIC); //设置坐标模式::SetWindowExtEx(hdc,600,200,NULL);//设置逻辑单位的大小为1000*1000;::SetViewportExtEx(hdc,cx,-cy,NULL);::SetViewportOrgEx(hdc,cx/2,cy/2,NULL);//设置坐标原点::TextOut(hdc,0,0,"o",1);//画X轴DrawLine(hdc,-cx,0,cy,0);DrawLine(hdc,0,cx,0,-cy);MoveToEx(hdc,0,0,NULL);for(i=0;i<100;i++){NewtonFunc(vc,i,y);NewtonFunc(vc,i+1,y2);DrawLine(hdc,i,y,i+1,y2);}::EndPaint(hwnd ,&ps);return 0 ;}case WM_DESTROY:{::PostQuitMessage(0);return 0 ;}}return ::DefWindowProc(hwnd ,message,wParam ,lParam );
}


效果图:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Easyspy网络检测系统

Easyspy是一款网络入侵检测和流量实时监控软件。作为一个入侵检测系统&#xff0c;用来快速发现并定位诸如ARP攻击、DOS/DDOS、分片IP报文攻击等恶意攻击行为&#xff0c;帮助发现潜在的安全隐患。Easyspy又是一款Sniffer软件&#xff0c;用来进行故障诊断&#xff0c;快速排查…

复杂性研究简介——从西蒙到霍兰

来源&#xff1a;信息系统论坛摘要&#xff1a;复杂性研究&#xff08;Complexity Study&#xff09;是上世纪末以来逐步兴起的一股思潮。本文将基于我们自己的认识过程&#xff0c;对于这个值得关注的领域进行简要的介绍&#xff0c;希望能够引起更多朋友的关注。重点是对于赫…

CSAPP--整数的运算

一.无符号数加法运算 二.有符号数加法运算 三.无符号数乘法 截断w位也就是对2^w取模 四.有符号数&#xff08;补码表示&#xff09;乘法 换算成补码在进行乘法运算 参考&#xff1a; 【合集】CSAPP-深入理解计算机系统_哔哩哔哩_bilibili

算法实现:返回单链表的倒数第pos个节点

//腾讯的面试题 2015-04-14 //转载自&#xff1a;http://blog.chinaunix.net/uid-23629988-id-2169046.html?page2 #include <iostream> #include <ctime> #include <vector> using namespace std;//建立一个链表 struct Node {int data;Node *next; };//函…

验证occ和vtk整合工作的demo

在编译occ通过过后&#xff0c;我需要验证occ是否能够正常结合vtk进行开发工作 使用CMake进行环境变量设置&#xff1a; CMakeList.txt PROJECT (IGESReader)#VTK Part: FIND_PACKAGE(VTK) IF (VTK_FOUND)INCLUDE(${VTK_USE_FILE}) ELSE(VTK_FOUND)MESSAGE(FATAL_ERROR"Ca…

CSAPP--浮点数

一.定点表示小数 缺点:表示不了很大的数 二.IEEE关于浮点数表示法 float32:符号位1位&#xff0c;阶码字段:8位,小数点为23位 float64:符号位1位&#xff0c;阶码字段:11位,小数点为52位 三.浮点数的数值类型 1.规格化值 2.非规格值 3.特殊值 而阶码的值决定其属于那一类…

干货|一文看懂美国共享出行3大领域8大头部玩家

来源&#xff1a;42号车库摘要&#xff1a;年初某机构统计的滴滴、Uber、Lyft、Grab和Go-jek全球五大共享出行服务平台的总估值1290亿美元。12月中旬&#xff0c;Uber、Lyft先后宣布即将于2019年IPO。其中&#xff0c;Uber的估值高达1000-1200亿美元&#xff0c;接近年初某机构…

组合算法问题

//转载自&#xff1a;http://blog.csdn.net/ywjun0919/article/details/11180685 // 和 http://www.2cto.com/kf/201301/181305.html /* 题目要求: 写一个程序&#xff0c;打印出以下的序列。 (a),(b),(c),(d),(e)........(z) (a,b),(a,c),(a,d),(a,e)......(a,z),(b,c),(b,d).…

《C++ Primer 4th》读书笔记 第7章-函数

原创文章&#xff0c;转载请注明出处&#xff1a;http://www.cnblogs.com/DayByDay/p/3912413.html 转载于:https://www.cnblogs.com/DayByDay/p/3912413.html

MSE与FC作用

一.MSE作用 在做super resolution的时候&#xff0c;如果用MSE&#xff0c;做出来的图片会非常的模糊&#xff0c;就是因为MSE是基于高斯分布假设&#xff0c;最后的结果会尽可能地靠近高斯分布最高的地方&#xff0c;使得结果不会太sharp。 二.FC作用 转载: 为什么回归问题用…

爆发的电池储能市场真相!年销量将超260亿美元

来源&#xff1a;智东西摘要&#xff1a;全面分析在集成领域以及其他形式的电池解决方案的开发和部署方面所取得的进展 。电池储能是非常灵活的&#xff0c;它可以进行快速部署&#xff0c; 且具有多种应用。 同时它能够产生大量价值流——更不用说电池价格比预期中下降得还要快…

install scikit-learn

>>pip install scikit-learn Error:sklearn/svm/libsvm.c:346:31: fatal error: numpy/arrayobject.h >>zypper in python-numpy-devel转载于:https://www.cnblogs.com/learnthenknow/p/scikit-learn.html

HTML CSS JS(一)

学习前端的几个网站&#xff1a; http://www.divcss5.com/ http://v2.bootcss.com/ 公司能连google&#xff0c;不知道没有翻墙的电脑能不能打开。 http://zh.html.net/ 个人感觉这个网站上前端知识的讲解 很有趣。 http://www.w3school.com.cn/

刚刚!刘永坦院士和钱七虎院士荣获2018年度国家最高科技奖

来源&#xff1a; 青塔人才 摘要&#xff1a;今天上午&#xff0c;2018年度国家科学技术奖励大会在北京隆重召开。2018年国家科学技术奖共评选出278个项目和7名科技专家&#xff0c;合计285项&#xff08;人&#xff09;&#xff0c;国家最高科学技术奖颁予刘永坦院士和钱七虎院…

好用工具推荐

一.函数画图软件 图形计算器 二.流程图 Flowchart Maker & Online Diagram Software 可以画完就存在github里面 三.linux手册 Linux命令大全(手册) – 真正好用的Linux命令在线查询网站 四.在线工具百宝箱 在线工具 - 你的工具箱

说明exit()函数作用的程序

// algo1-4.cpp 说明exit()函数作用的程序 #include"c1.h" int a(int i) { if(i1) { printf("退出程序的运行\n"); exit(1); } return i; } void main() { int i; printf("请输入i&#xff1a;"); scanf("%d",&i); printf("a…

给Sublime text2安装Zen Coding插件

转载自&#xff1a;http://m.blog.csdn.net/blog/u013867072/38714069 原文内容&#xff1a;//------------------------------------------------------------------------------------- 参考资料&#xff1a;http://drizzlep.diandian.com/SublimeText2 今天&#xff0c;刚安…

光子人工智能芯片助“中国芯”换道超车

来源&#xff1a;新京报摘要&#xff1a;算力是传统芯片1000倍&#xff0c;功耗仅为其百分之一&#xff1b;未来可应用于自动驾驶、智能机器人、无人机等领域。光子人工智能芯片。光子芯片的计算速度为电子芯片的1000倍&#xff0c;但功耗仅为其百分之一。算力是传统电子人工智…

二进制逆序

要求计算二进制(16位)的逆序&#xff0c;如数12345用二进制表示为&#xff1a; 00110000 00111001 将它逆序&#xff0c;我们得到了一个新的二进制数&#xff1a; 10011100 00001100 最容易想到的方法就是依次交换两端的数据&#xff0c;从右向左遍历数字&#xff0c;当i位遇到…

sublime text3安装插件 emmet

转载自&#xff1a;http://9iphp.com/web/html/1260.html Sublime Text常用插件总结及Package Control安装方法 2015/01/09 | HTML/CSS,Linux | 8 条评论 | (2评) | 评分 Sublime Text 是一个代码编辑器&#xff0c;具有漂亮的用户界面和强大的功能&#xff0c;并且它还是…