1实验目的和要求

实验目的:理解拉格朗日插值算法及牛顿插值算法的程序实现方法。
程序任务:
1)依据课本18页图1-3编程实现拉格朗日插值算法,并完成54页课后习题6.
注:分别以三个小题目中给出的条件画出插值函数,比较它们的不同。
2)编程实现牛顿插值算法,并完成如下题目:
用牛顿插值法来求sinx在区间多点的值,已知sin0°= 0, sin30°= 0.5, sin45°= 0.7071, sin60° = 0.8660, sin90°= 1. 以此为依据画出sinx在 区间的图像。

2实验环境和工具

用matlab或C语言实现

3实验结果

3.1算法流程图
拉格朗日算法


3.2程序核心代码
c语言:

#include<stdio.h>void achievel(void);
void achieveNew(void);
int main()
{int m;printf("1.实现拉格朗日算法\n2.实现牛顿插值算法\n\n");scanf("%d",&m);switch(m){case 1:achievel();break;case 2:achieveNew();break;}return 0;
}void achievel(void)//实现拉格朗日插值算法
{double xi[20],yi[20];double x,y,t;int i=0,j,k;printf("输入x的值:\n");scanf("%lf",&x);getchar();printf("输入多个点的横纵坐标:\n");while(i<20){scanf("%lf %lf",&xi[i],&yi[i]);//输入9999终止if(xi[i]==9999){break;}i++;}y = 0;for(k=0;k<i;k++){t = 1;for(j=0;j<i;j++){if(j!=k){t = t*(x-xi[j])/(xi[k]-xi[j]);}}y = y + t*yi[k];}printf("纵坐标为:%lf",y);
}void achieveNew(void)//实现牛顿插值算法
{double x,y;double xi[20],yi[20],fx[20][20];int i,j,k,m;printf("输入x的值:\n");scanf("%lf",&x);printf("输入多个点的横纵坐标:\n");for(i=0;i<20;i++){scanf("%lf %lf",&xi[i],&yi[i]);//输入9999fx[0][i] = yi[i];if(xi[i]==9999){break;}}m = i;for(i=1;i<m;i++)//得到差商{for(j=i;j<m;j++){fx[i][j] = (fx[i-1][j]-fx[i-1][j-i])/(xi[j]-xi[j-i]);}}y = fx[0][0];for(i=1;i<m;i++){k = 1;for(j=i;j>0;j--){k = fx[i][i]*(x-xi[j-1])*k;}y = y+k;}printf("纵坐标为:%lf",y);
}

Python(画图):

import matplotlib.pyplot as plt
import numpy as np
import mathdef achievel(s):x = np.linspace(-5, 5, 50)x0 = -1x1 = 1y0 = -1y1 = 1if(s==1):y = (x-x1)/(x0-x1)*y0y = y + (x-x0)/(x1-x0)*y1else:x2 = 0y2 = 0if(s==2):y = (x-x1)*(x-x2)/(x0-x1)/(x0-x2)*y0y = y + (x-x0)*(x-x2)/(x1-x0)/(x1-x2)*y1y = y + (x-x0)*(x-x1)/(x2-x0)/(x2-x1)*y2elif(s==3):x3 = 2y3 = 8y = (x-x1)*(x-x2)*(x-x3)/(x0-x1)/(x0-x2)/(x0-x3)*y0y = y + (x-x0)*(x-x2)*(x-x3)/(x1-x0)/(x1-x2)/(x1-x3)*y1y = y + (x-x0)*(x-x1)*(x-x3)/(x2-x0)/(x2-x1)/(x2-x3)*y2y = y + (x-x0)*(x-x1)*(x-x2)/(x3-x0)/(x3-x1)/(x3-x2)*y3plt.figure()plt.plot(x, y)plt.show()def achieven():x1 = 0x2 = math.pi/6x3 = math.pi/4x4 = math.pi/3x5 = math.pi/2y1 = 0y2 = 0.5y3 = 0.7071y4 = 0.8660y5 = 1y12 = (y2-y1)/(x2-x1)y23 = (y3-y2)/(x3-x2)y34 = (y4-y3)/(x4-x3)y45 = (y5-y4)/(x5-x4)y13 = (y23-y12)/(x3-x1)y24 = (y34-y23)/(x4-x2)y35 = (y45-y34)/(x5-x3)y14 = (y24-y13)/(x4-x1)y25 = (y35-y24)/(x5-x2)y15 = (y25-y14)/(x5-x1)x = np.linspace(0, math.pi/2, 50)y = y1+y12*(x-x1)+y13*(x-x1)*(x-x2)+y14*(x-x1)*(x-x2)*(x-x3)y = y+y15*(x-x1)*(x-x2)*(x-x3)*(x-x4)plt.figure()plt.plot(x, y)plt.show()

3.3运行结果




3.4运行结果分析
根据运行结果可得:拉格朗日算法的拟合效果较好,牛顿插值算法的拟合效果也很好。牛顿插值算法更适合较为复杂的函数进行拟合,而拉格朗日算法适合相较简单一点的函数。两者都是适合预估的函数值的算法。

4实验心得

在本次实验中,拉格朗日算法已经给出算法流程图,实现起来并不困难。牛顿插值算法虽然没有给出算法流程图,但这也帮助我们回顾了这个算法。
在这次实验中,我最大的收获,就是了解了c语言的局限性。画图可以使用c++、matlab、java、python,但无法使用c语言画图,或者说,用c语言画出函数图像的难度大大提高,用其他语言画函数的图像,难度较低。也证明了c语言有它的优越性,也有其局限性,c语言在图形处理方面不如别的语言。
这更让我明白,一个合格的程序员不能只掌握一种语言,一种语言对于一个合格的程序员是远远不够的,我们在掌握多门语言的基础上,也需要尽全力学通每一门语言,只有做到这两点,我们才能在未来大显身手。
这一次的实验,也是对我们的促进,告诉我们需要不断努力。

合肥工业大学宣城校区计算方法 实验一相关推荐

  1. 合肥工业大学宣城校区计算方法 实验二

    1实验目的和要求 实验目的: (1)熟悉复化梯形方法.复化Simpson方法.梯形递推算法.龙贝格算法: (2)能编程实现复化梯形方法.复化Simpson方法.梯形递推算法.龙贝格算法: (3)理解并 ...

  2. 合肥工业大学宣城校区数据挖掘实验 分类任务

    (文章最后有全部源代码) 一.实验要求 1.1实验目的 1)理解分类任务: 2)考察学生对数据预处理步骤的理解,强化预处理的重要性: 3)基模型可以调用已有的包,训练学生熟悉数据挖掘的基本框架: 4) ...

  3. 合肥工业大学宣城java实验报告,(合肥工业大学宣城校区JAVA作业问答题.doc

    (合肥工业大学宣城校区JAVA作业问答题 第一章 1.Java 语言有哪些特点? 答:Java 语言的特点有:简单性.面向对象技术.分布性.健壮性.安全性.体系结构中立.可移植性.解释执行.高性能.多 ...

  4. java实验报告合肥工业大学_合肥工业大学 计算机专业 计算方法实验报告

    <合肥工业大学 计算机专业 计算方法实验报告>由会员分享,可在线阅读,更多相关<合肥工业大学 计算机专业 计算方法实验报告(33页珍藏版)>请在人人文库网上搜索. 1.合肥工业 ...

  5. 合肥工业大学计算机与信息学院学生会宗旨,合肥工业大学宣城校区第一届学生会成立大会召开...

    11月1日晚,合肥工业大学宣城校区第一届学生会成立大会在宣城校区教学一号楼116室召开.宣城校区党委书记.管委会主任陈朝阳,党委副书记.管委会副主任蒋传东,管委会副主任胡学钢,综合办公室主任霍效忠.学 ...

  6. 合肥工业大学宣城校区计算机大赛,初赛公示_2020年全国高校计算机能力挑战赛...

    姓名 学校 奖项 彭正元 重庆大学 西南赛区 一等奖 肖念昕 阜阳师范大学 华东赛区 一等奖 鲁兆成 山东财经大学 华东赛区 一等奖 杨志杰 西北师范大学 西北赛区 一等奖 韩宇博 河南大学 华中赛区 ...

  7. 合肥工业大学宣城校区计算机大赛,合肥工业大学宣城校区“建行杯”计算机设计大赛 颁奖典礼举行...

    4月11日下午,合肥工业大学宣城校区"建行杯"计算机设计大赛颁奖典礼在教学楼114室举行.宣城校区领导陈朝阳.田作淳.蒋传东.胡学钢及各部门负责人.各系部主任,学校教务部副教务长张 ...

  8. 合肥工业大学宣城校区计算机大赛,合工大宣城校区学子!全国冠军!

    原标题:合工大宣城校区学子!全国冠军! 4月18日至21日,2019国家机器人发展论坛暨RoboCup机器人世界杯中国赛在浙江省绍兴市举行. 我校代表队夺得足球仿真2D项目全国冠军(一等奖),这是我校 ...

  9. 合肥工业大学宣城校区Java技术实验二 基于GUI的网络通信程序设计

    一.实验目的 1.掌握Java中GUI程序的编写,包括事件监听机制. 2.掌握Java的网络通信编程,ServerSocket,Socket类的使用. 3.掌握Java中多线程的编程,Thread类, ...

最新文章

  1. DokiCam 360°4K相机:为极致运动爱好者而生
  2. python 归一化 标准化
  3. CTFshow 反序列化 web263
  4. 送给即将毕业的大学生:乔布斯在斯坦福的大学演讲
  5. VCG(VisualCodeGrepper)安装使用教程
  6. 欢乐纪中某B组赛【2018.12.22】
  7. gcc编译缺少数学库
  8. Sql Server发布订阅如何添加新表如何不初始化整个快照
  9. CSS的七种基本选择器及其权值
  10. Upload LABS Pass-9
  11. [转载] Python 统计学习方法——kdTree实现K近邻搜索
  12. 不同版本操作系统和数据库的之间链接,和操作
  13. 荣世达二代机器人_荣事达人工智能机器人到底有多帅?
  14. codeproject
  15. 关于UnityHub更换位置后找不到编辑器以及登录界面白屏的问题
  16. 阿里云域名转入腾讯云
  17. 详解双曲函数(对比三角函数推导)
  18. Java 学生管理系统--------13
  19. nginx中的sub_filter
  20. CAN总线(一)——CAN总线是什么,在哪用,怎么用?

热门文章

  1. js提取新浪邮箱的信用卡
  2. Android自定义控件----高仿Android酷狗播放条(YluoSeekBar)
  3. 免费开源训练营又来啦!这次一起做个“机器人”
  4. ObjectARX-给cad实体贴图
  5. 重教育、包装设计两方面促进可持续包装
  6. 百分点创始人苏萌:个性化为互联网商业未来
  7. ITX 小钢炮 链接收藏
  8. 当我们遇到问题的时候改如何解决
  9. linux战争雷霆无法运行,战争雷霆Mac版下载及运行问题汇总 苹果OSX系统怎么运行战雷...
  10. 送给她超浪漫的表白信——她感动哭了(.html)