东南大学计算方法与实习实验报告
东南大学计算机组成原理实验报告
实验一门电路一、实验目的1.验证常用TTL集成门电路逻辑功能。
2.掌握各种门电路的逻辑符号。
3.掌握Quartus软件的使用。
4.了解集成电路的外引线排列及其使用方法。
二、实验原理和电路集成逻辑门电路是最简单、最基本的数字集成元件。
任何复杂的组合电路和时序电路都可用逻辑门通过适当的组合连接而成。
目前已有门类齐全的集成门电路,例如“与门”、“或门”、“非门”、“与非门”、“或非门”等。
掌握逻辑门的工作原理,熟练、灵活地使用逻辑门是数字技术工作者所必备的基本功之一。
TTL门电路TTL集成电路由于工作速度高、输出幅度较大、种类多、不易损坏而使用较广。
在后面的实验中采用74系列TTL集成电路。
它的工作电压为5V±0.5V,逻辑高电平1时≥2.4V,低电平0时≤0.4V。
三、实验内容和步骤TTL门电路逻辑功能验证1、首先建立工程(以后每个实验都要分别建立)。
按图1在Quartus软件中调入相应的标准门电路,并把输入端,输出端分别设置好。
2、新建波形文件,按状态表1中“与”一栏输入A、B(0、1)信号,观察输出结果(发光二极管亮为1,灭为0)填入表1中。
3、按同样的方法,验证“或门”7432,“与非门”7437,“反相器”7404的逻辑功能,并把结果填入表1中。
4、Quartus仿真结果(功能防真和时序防真)(a) 与门Q=A•B 功能仿真时序仿真(a) 与门Q=A•B(b) 或门Q=A﹢B 功能仿真时序仿真(b) 或门Q=A﹢B(c) 与非门Q= A•B功能仿真时序仿真(c) 与非门Q= A•B(d) 反相器Q= A功能仿真时序仿真(d) 反相器Q= A 表1 逻辑功能表实验二译码器一、实验目的1、掌握译码器的工作原理和特点。
2、熟悉常用译码器的逻辑功能和应用。
二、实验原理和电路所谓“译码”就是把代码的特定含义“翻译”出来的过程,而实现译码操作的电路称为译码器。
三、实验内容和步骤译码器实验译码器选用74138,其引脚排列见附录。
东南大学计算方法与实习上机实验一
东南大学计算方法与实习实验报告学院:电子科学与工程学院学号:06A*****姓名:***指导老师:***实习题14、设S N=Σ(1)编制按从大到小的顺序计算S N的程序;(2)编制按从小到大的顺序计算S N的程序;(3)按两种顺序分别计算S1000,S10000,S30000,并指出有效位数。
解析:从大到小时,将S N分解成S N-1=S N-,在计算时根据想要得到的值取合适的最大的值作为首项;同理从小到大时,将S N=S N-1+ ,则取S2=1/3。
则所得式子即为该算法的通项公式。
(1)从大到小算法的C++程序如下:/*从大到小的算法*/#include<iostream>#include<iomanip>#include<cmath>using namespace std;const int max=34000; //根据第(3)问的问题,我选择了最大数为34000作为初值void main(){int num;char jus;double cor,sub;A: cout<<"请输入你想计算的值"<<'\t';cin>>num;double smax=1.0/2.0*(3.0/2.0-1.0/max-1.0/(max+1)),temps;double S[max];// cout<<"s["<<max<<"]="<<setprecision(20)<<smax<<'\n';for(int n=max;n>num;){temps=smax;S[n]=temps;n--;smax=smax-1.0/((n+1)*(n+1)-1.0);}cor=1.0/2.0*(3.0/2.0-1.0/num-1.0/(num+1.0)); //利用已知精确值公式计算精确值sub=fabs(cor-smax); //double型取误差的绝对值cout<<"用递推公式算出来的s["<<n<<"]="<<setprecision(20)<<smax<<'\n';cout<<"实际精确值为"<<setprecision(20)<<cor<<'\n';cout<<"则误差为"<<setprecision(20)<<sub<<'\n';cout<<"是否继续计算S[N],是请输入Y,否则输入N!"<<endl;cin>>jus;if ((int)jus==89||(int)jus==121) goto A;}(2)从小到大算法的C++程序如下:/*从小到大的算法*/#include<iostream>#include<iomanip>#include<cmath>using namespace std;void main(){int max;A: cout<<"请输入你想计算的数,注意不要小于2"<<'\t';cin>>max;double s2=1.0/3.0,temps,cor,sub;char jus;double S[100000];for(int j=2;j<max;){temps=s2;S[j]=temps;j++;s2+=1.0/(j*j-1.0);}cor=1.0/2.0*(3.0/2.0-1.0/j-1.0/(j+1.0)); //利用已知精确值公式计算精确值sub=fabs(cor-s2); //double型取误差的绝对值cout<<"用递推公式算出来的s["<<j<<"]="<<setprecision(20)<<s2<<'\n';cout<<"实际精确值为"<<setprecision(20)<<cor<<'\n';cout<<"则误差为"<<setprecision(20)<<sub<<'\n';cout<<"是否继续计算S[N],是请输入Y,否则输入N!"<<endl;cin>>jus;if ((int)jus==89||(int)jus==121) goto A;}(3)(注:因为程序中setprecision(20)表示输出数值小数位数20,则程序运行时所得到的有效数字在17位左右)ii.选择从小到大的顺序计算S1000、S10000、S30000的值需要计算的项S1000S10000S30000计算值0.74900049950049996 0.74966672220370571 0.74996666722220728实际精确值0.74900049950049952 0.74990000499950005 0.74996666722220373误差 4.4408920985006262*10-16 5.6621374255882984*10-15 3.5527136788005009*10-15有效数字17 17 17附上部分程序运行图:iii.实验分析通过C++程序进行计算验证采用从大到小或者从小到大的递推公式算法得到的数值基本稳定且误差不大。
计算方法与实习 第四版 (孙志忠 著) 东南大学出版社 课后答案
2
ww
w.
kh
da
w.
co
∗ − y | → ∞, 计算过程不稳定。 注 :此题中,|yn n
m
× 10−3 .
w.
n = 1, 2, · · ·
co m
e2 e2 r r = . 1 + er 1 − er
w.
课后答案网
aw . kh d
∗ − y | = 510 e ≤ n = 10时,|yn n 0
√ 计算到y100 , 若取 783 ≈ 27.982 (5位有效数字),试问计算到y100 将有多大误差? √ 答 :设x∗ = 783, x = 27.982, x∗ = x + e.
−2 ∗ = y∗ yn n−1 − 10 (x + e), yn = yn−1 − 10−2 x,
1 √ 783, 100
概率与数理统计 第二, C语言程序设计教程 第 西方经济学(微观部分) C语言程序设计教程 第 复变函数全解及导学[西 三版 (浙江大学 三版 (谭浩强 张 (高鸿业 著) 中 二版 (谭浩强 张 安交大 第四版]
社区服务
社区热点
进入社区
/
2009-10-15
ww
er − er = er −
e2 e e 1 r = . = e − = e − r r x∗ e+x 1 + er 1 + e1 r ·········
7. 设y0 = 28, 按递推公式
案 答
yn = yn−1 −
网 课 后
1 2
6. 机器数–略。
w. kh da
∗ −y |=e≤ n = 100时,|yn n
课后答案网
东南大学数值分析上机报告完整版
数值分析上机实验报告目录1.chapter1舍入误差及有效数 (1)2.chapter2Newton迭代法 (3)3.chapter3线性代数方程组数值解法-列主元Gauss消去法 (7)4.chapter3线性代数方程组数值解法-逐次超松弛迭代法 (8)5.chapter4多项式插值与函数最佳逼近 (10)1.chapter1舍入误差及有效数1.1题目设S N =∑1j 2−1N j=2,其精确值为)11123(21+--N N 。
(1)编制按从大到小的顺序11131121222-+⋯⋯+-+-=N S N ,计算S N 的通用程序。
(2)编制按从小到大的顺序1211)1(111222-+⋯⋯+--+-=N N S N ,计算S N 的通用程序。
(3)按两种顺序分别计算64210,10,10S S S ,并指出有效位数。
(编制程序时用单精度)(4)通过本次上机题,你明白了什么? 1.2编写相应的matlab 程序 clear;N=input('please input N:'); AValue=((3/2-1/N-1/(N+1))/2); sn1=single(0); sn2=single(0); for i=2:Nsn1=sn1+1/(i*i-1); %从大到小相加的通用程序% endep1=abs(sn1-AValue); for j=N:-1:2sn2=sn2+1/(j*j-1); %从小到大相加的通用程序% endep2=abs(sn2-AValue);fprintf('精确值为:%f\n',AValue);fprintf('从大到小的顺序累加得sn=%f\n',sn1); fprintf('从大到小相加的误差ep1=%f\n',ep1); fprintf('从小到大的顺序累加得sn=%f\n',sn2); fprintf('从小到大相加的误差ep2=%f\n',ep2); disp('================================='); 1.3matlab 运行程序结果 >> chaper1please input N:100 精确值为:0.740050从大到小的顺序累加得sn=0.740049 从大到小相加的误差ep1=0.000001 从小到大的顺序累加得sn=0.740050 从小到大相加的误差ep2=0.000000 >> chaper1please input N:10000 精确值为:0.749900从大到小的顺序累加得sn=0.749852 从大到小相加的误差ep1=0.000048 从小到大的顺序累加得sn=0.749900 从小到大相加的误差ep2=0.000000please input N:1000000精确值为:0.749999从大到小的顺序累加得sn=0.749852 从大到小相加的误差ep1=0.000147 从小到大的顺序累加得sn=0.749999 从小到大相加的误差ep2=0.0000001.4结果分析以及感悟按照从大到小顺序相加的有效位数为:5,4,3。
大学计算方法实验报告
《计算方法》实验报告实验题目实验报告1:非线性方程组的求解···················P1~2实验报告2:线性方程组解法·······················P3~4 实验报告3:Lagrange 插值多项式··················P5~7姓名:学号:班级:指导老师:时间:专业 序号 日期实验报告1:非线性方程组的求解【实验目的】1.用MATLAB 来实践进行牛顿法的变形,即对牛顿法进行了修正,使其应用更为方便,掌握用MATLAB 运用割线法求解非线性方程组。
2.运用MATLAB 进行隐函数作图。
【实验内容】[方法] 设a,b 为迭代初值,求两点(a,f(a)) 与 (b,f(b)) 的连线(割线)与 x 轴的交点记为 c ,再把迭代初值换成 b,c,重复计算.[要求] 把下面程序复制为新的 M-文件,去掉开头的 %再把 '?' 部分改写正确就是一个完整的程序,找前面一个例子试算【解】在牛顿迭代公式中用差商代替导数。
带入初值(a,f(a)),(b,f(b)),两点的连线与x 轴的交点作为c ,再把迭代初值换为b ,c ,重复计算。
【计算机求解】以y= x-exp(-x)为例初值a=0,b=1,误差不超过1.0*10^(-5)进行计算。
东南大学计算方法实验报告
计算方法与实习实验报告学院:电气工程学院指导老师:***班级:160093******学号:********实习题一实验1 拉格朗日插值法一、方法原理n次拉格朗日插值多项式为:L n(x)=y0l0(x)+y1l1(x)+y2l2(x)+…+y n l n(x)n=1时,称为线性插值,L1(x)=y0(x-x1)/(x0-x1)+ y1(x-x0)/(x1-x0)=y0+(y1-x0)(x-x0)/(x1-x0)n=2时,称为二次插值或抛物线插值,精度相对高些L2(x)=y0(x-x1)(x-x2)/(x0-x1)/(x0-x2)+y1(x-x0)(x-x2)/(x1-x0)/(x1-x2)+y2(x-x0)(x-x1)/(x2-x0)/(x2-x1)二、主要思路使用线性方程组求系数构造插值公式相对复杂,可改用构造方法来插值。
对节点x i(i=0,1,…,n)中任一点x k(0<=k<=n)作一n 次多项式l k(x k),使它在该点上取值为1,而在其余点x i(i=0,1,…,k-1,k+1,…,n)上为0,则插值多项式为L n(x)=y0l0(x)+y1l1(x)+y2l2(x)+…+y n l n(x) 上式表明:n 个点x i(i=0,1,…,k-1,k+1,…,n)都是l k(x)的零点。
可求得l k三.计算方法及过程:1.输入节点的个数n2.输入各个节点的横纵坐标3.输入插值点4.调用函数,返回z函数语句与形参说明程序源代码如下:#include<iostream>#include<math.h>using namespace std;#define N 100double fun(double *x,double *y, int n,double p);void main(){int i,n;cout<<"输入节点的个数n:";cin>>n;double x[N], y[N],p;cout<<"please input xiangliang x= "<<endl;for(i=0;i<n;i++)cin>>x[i];cout<<"please input xiangliang y= "<<endl;for(i=0;i<n;i++)cin>>y[i];cout<<"please input LagelangrichazhiJieDian p= "<<endl;cin>>p;cout<<"The Answer= "<<fun(x,y,n,p)<<endl;system("pause") ;}double fun(double x[],double y[], int n,double p){double z=0,s=1.0;int k=0,i=0;double L[N];while(k<n){ if(k==0){ for(i=1;i<n;i++)s=s*(p-x[i])/(x[0]-x[i]);L[0]=s*y[0];k=k+1;}else{s=1.0;for(i=0;i<=k-1;i++)s=s*((p-x[i])/(x[k]-x[i]));for(i=k+1;i<n;i++) s=s*((p-x[i])/(x[k]-x[i]));L[k]=s*y[k];k++;}}for(i=0;i<n;i++)z=z+L[i];return z;}五.实验分析n=2时,为一次插值,即线性插值n=3时,为二次插值,即抛物线插值n=1,此时只有一个节点,插值点的值就是该节点的函数值n<1时,结果都是返回0的;这里做了n=0和n=-7两种情况3<n<100时,也都有相应的答案常用的是线性插值和抛物线插值,显然,抛物线精度相对高些n次插值多项式Ln(x)通常是次数为n的多项式,特殊情况可能次数小于n.例如:通过三点的二次插值多项式L2(x),如果三点共线,则y=L2(x)就是一条直线,而不是抛物线,这时L2(x)是一次式。
东南大学计算方法上机报告实验报告完整版
实习题11. 用两种不同的顺序计算644834.11000012≈∑=-n n,试分析其误差的变化解:从n=1开始累加,n 逐步增大,直到n=10000;从n=10000开始累加,n 逐步减小,直至1。
算法1的C 语言程序如下: #include<stdio.h> #include<math.h> void main() { float n=0.0; int i; for(i=1;i<=10000;i++) { n=n+1.0/(i*i); } printf("%-100f",n); printf("\n"); float m=0.0; int j; for(j=10000;j>=1;j--) { m=m+1.0/(j*j); } printf("%-7f",m); printf("\n"); }运行后结果如下:结论: 4.设∑=-=Nj N j S 2211,已知其精确值为)11123(21+--N N 。
1)编制按从大到小的顺序计算N S 的程序; 2)编制按从小到大的顺序计算N S 的程序;3)按2种顺序分别计算30000100001000,,S S S ,并指出有效位数。
解:1)从大到小的C语言算法如下:#include<stdio.h>#include<math.h>#include<iostream>using namespace std;void main(){float n=0.0;int i;int N;cout<<"Please input N"<<endl;cin>>N;for(i=N;i>1;i--){n=n+1.0/(i*i-1);N=N-1;}printf("%-100f",n);printf("\n");}执行后结果为:N=2时,运行结果为:N=3时,运行结果为:N=100时,运行结果为:N=4000时,运行结果为:2)从小到大的C语言算法如下:#include<stdio.h>#include<math.h>#include<iostream>using namespace std;void main(){float n=0.0;int i;int N;cout<<"Please input N"<<endl;cin>>N;for(i=2;i<=N;i++){n=n+1.0/(i*i-1);}printf("%-100f",n);printf("\n");}执行后结果为:N=2时,运行结果为:N=3时,运行结果为:N=100时,运行结果为:N=4000时,运行结果为:结论:通过比较可知:N 的值较小时两种算法的运算结果相差不大,但随着N 的逐渐增大,两种算法的运行结果相差越来越大。
东南大学计算机网络实验报告一
东南大学自动化学院实验报告课程名称:信息通信网络概论第1次实验实验名称:TCP/IP协议与Socket编程认识实验院(系):自动化专业:自动化姓名:学号:实验室:金智楼5楼实验组别:同组人员:实验时间:2016 年11 月29日评定成绩:审阅教师:目录一.实验目的和要求 (3)二.实验原理 (3)三. 实验方案与实验步骤 (5)四.实验设备与器材配置 (7)五.实验记录 (7)六.实验总结 (9)七.思考题或讨论题 (9)附录:部分代码一.实验目的和要求1)熟悉TCP/IP协议的功能和网络操作;2)了解基于SOCKET的编程原理;3)编写一个小型的Socket实用程序,初步了解Windows环境下使用Socket的编程。
二.实验原理1、什么是Windows Sockets规范?Windows Sockets规范以U.C. Berkeley大学BSD UNIX中流行的Socket接口为范例定义了一套Micosoft Windows下网络编程接口。
它不仅包含了人们所熟悉的Berkeley Socket 风格的库函数;也包含了一组针对Windows的扩展库函数,以使程序员能充分地利用Windows消息驱动机制进行编程。
Windows Sockets规范本意在于提供给应用程序开发者一套简单的API,并让各家网络软件供应商共同遵守。
此外,在一个特定版本Windows的基础上,Windows Sockets也定义了一个二进制接口(ABI),以此来保证应用Windows Sockets API的应用程序能够在任何网络软件供应商的符合Windows Sockets协议的实现上工作。
因此这份规范定义了应用程序开发者能够使用,并且网络软件供应商能够实现的一套库函数调用和相关语义。
遵守这套Windows Sockets规范的网络软件,我们称之为Windows Sockets兼容的,而Windows Sockets兼容实现的提供者,我们称之为Windows Sockets提供者。
计算方法与实习上机实验报告
计算方法与实习上机实验报告一、引言本文旨在介绍和展示我们在“计算方法”课程中的实习上机实验环节所完成的一些关键任务和所取得的成果。
该实验课程的目标是让我们更深入地理解和应用各种计算方法,并在实际操作中提高我们的编程和问题解决能力。
二、实验内容与目标实验的主要内容是利用各种计算方法解决实际数学问题。
我们被要求使用编程语言(如Python或Java)来实现和解决这些问题。
这些问题包括使用牛顿法求解平方根,使用蒙特卡洛方法计算圆周率,以及使用最优化方法求解函数的最小值等。
实验的目标不仅是让我们掌握计算方法的基本理论,更是要让我们能够在实际操作中运用这些方法。
我们需要在实习过程中,通过与同伴们合作,共同解决问题,提高我们的团队合作能力和问题解决能力。
三、实验过程与问题解决策略在实验过程中,我们遇到了许多问题,如编程错误、理解困难和时间压力等。
我们通过相互讨论、查阅资料和寻求教师帮助等方式,成功地解决了这些问题。
例如,在实现牛顿法求解平方根时,我们一开始对导数的计算和理解出现了一些错误。
但我们通过查阅相关资料和讨论,最终理解了导数的正确计算方法,并成功地实现了牛顿法。
四、实验结果与结论通过这次实习上机实验,我们不仅深入理解了计算方法的基本理论,还在实际操作中提高了我们的编程和问题解决能力。
我们的成果包括编写出了能有效求解平方根、计算圆周率和求解函数最小值的程序。
这次实习上机实验非常成功。
我们的团队不仅在理论学习和实践操作上取得了显著的进步,还在团队合作和问题解决方面积累了宝贵的经验。
这次实验使我们对计算方法有了更深的理解和认识,也提高了我们的编程技能和解决问题的能力。
五、反思与展望回顾这次实验,我们意识到在实验过程中,我们需要更好地管理我们的时间和压力。
在解决问题时,我们需要更有效地利用我们的知识和资源。
在未来,我们希望能够更加熟练地运用计算方法,并能够更有效地解决问题。
我们也希望能够将所学的计算方法应用到更广泛的领域中,如数据分析、科学研究和工业生产等。
计算课实验报告总结(3篇)
第1篇一、实验背景随着信息技术的飞速发展,计算课已成为现代教育中不可或缺的一部分。
通过计算课的学习,学生可以掌握计算机基本操作、编程语言以及算法设计等知识,为今后从事相关工作奠定基础。
本次实验旨在通过实际操作,加深对所学知识的理解,提高动手能力和团队协作能力。
二、实验目的1. 熟悉计算机基本操作,掌握常用软件的使用方法;2. 学习一种编程语言,理解编程思想,实现基本算法;3. 培养团队协作精神,提高动手实践能力;4. 提高对计算课重要性的认识,激发学习兴趣。
三、实验内容本次实验主要包括以下内容:1. 计算机基本操作:熟练使用计算机操作系统,掌握文件管理、系统设置等基本操作;2. 编程语言学习:选择一种编程语言(如Python、Java等),学习基本语法、数据结构、算法等知识;3. 算法实现:设计并实现一个简单算法,如排序、查找等;4. 项目实践:分组完成一个小型项目,如制作一个简单的网页、编写一个计算器程序等。
四、实验过程1. 实验准备:了解实验内容,预习相关理论知识,准备好实验所需的计算机和软件;2. 实验操作:按照实验指导书进行操作,记录实验步骤和结果;3. 团队协作:分组讨论,分工合作,共同完成实验任务;4. 结果分析:对实验结果进行分析,总结经验教训。
五、实验结果与分析1. 计算机基本操作:通过实验,掌握了计算机基本操作,如文件管理、系统设置等,提高了计算机应用能力;2. 编程语言学习:学习了所选编程语言的基本语法、数据结构、算法等知识,为今后深入学习打下了基础;3. 算法实现:实现了排序、查找等基本算法,加深了对算法原理的理解;4. 项目实践:分组完成了一个小型项目,如制作了一个简单的网页、编写了一个计算器程序等,提高了团队协作能力和动手实践能力。
六、实验总结1. 计算课实验对提高学生计算机应用能力具有重要意义,有助于培养学生动手实践能力和团队协作精神;2. 实验过程中,要注重理论与实践相结合,不断总结经验教训,提高实验效果;3. 在今后的学习中,要继续努力,深入学习计算课相关知识,为将来从事相关工作打下坚实基础。
计算方法实验指导与实验报告
6
实验题目 2 龙贝格(Romberg)积分法
方法概要:利用复化梯形求积公式、复化辛普生求积公式、复化柯特斯求积公式 的误差估计式计算积分 计算公式:
b
a
f ( x)dx 。记 h
ba , xk a k h , k 0,1, n
, n ,其
Tn
1 n h k 1[ f ( xk 1 ) f ( xk )] 2
2
实验题目 1 拉格朗日(Lagrange)插值
方法概要: 给定平面上 n 1 个不同的数据点 ( xk , f ( xk )) , k 0,1, 则满足条件
, n , xi x j , i j ;
Pn ( xk ) f ( xk ) , k 0,1,
的 n 次拉格朗日插值多项式
, n ,构造 Pn ( x ) ,利用拉格朗日插值多项式 Pn ( x ) 作
为 f ( x) 的近似值。分别取 n 5 , n 10 , n 20 ,同时计算 Pn ( x ) 在 x 0.95 ,
x 0.05 , x 0.05 , x 0.95 处的函数值。
(2)设 f ( x) e , x [1,1] ,考虑非等距节点的拉格朗日插值多项式 Pn ( x ) ,
问题 2 插值区间越小越好吗? 考虑下面两个拉格朗日插值问题:
1 , x [1,1] ,考虑等距节点的拉格朗日插值多项式 Pn ( x ) , 1 x2 2.0 xk 1.0 k h , 即将区间 [1,1] 进行 n 等分, 记h , 构造 Pn ( x ) , k 0,1, , n , n
问题 4 考虑拉格朗日插值问题,内插比外推更可靠吗? 考虑下面两个拉格朗日插值问题: (1)设 f ( x)
计算方法与实习上机报告
计算方法与实习——上机报告学院:电子工程学院学号:姓名:刘波2015.1.4计算方法与实习上机报告习题一:1 舍入误差及稳定性一、实验目的(1)通过上机编程,复习巩固以前所学程序设计语言及上机操作指令;(2)通过上机计算,了解舍入误差所引起的数值不稳定性二、实验内容1、用两种不同的顺序计算1000021n n -=∑,分析其误差的变化 2、已知连分数()101223//(.../)n n a f b b a b a a b =++++,利用下面的算法计算f : 11,i n n i i i a d b d b d ++==+(1,2,...,0)i n n =-- 0f d = 写一程序,读入011,,,...,,,...,,n n n b b b a a 计算并打印f 3、给出一个有效的算法和一个无效的算法计算积分1041nn x y dx x =+⎰ (0,1,...,10)n = 4、设2211N N j S j ==-∑,已知其精确值为1311221N N ⎛⎫-- ⎪+⎝⎭ (1)编制按从大到小的顺序计算N S 的程序 (2)编制按从小到大的顺序计算N S 的程序(3)按两种顺序分别计算10001000030000,,,S S S 并指出有效位数三、实验步骤、程序设计、实验结果及分析1、用两种不同的顺序计算1000021n n -=∑,分析其误差的变化 (1)实验步骤:分别从1~10000和从10000~1两种顺序进行计算,应包含的头文件有stdio.h 和math.h(2)程序设计:a.顺序计算#include<stdio.h>#include<math.h>void main(){double sum=0;int n=1;while(1){sum=sum+(1/pow(n,2));if(n%1000==0)printf("sun[%d]=%-30f",n,sum);if(n>=10000)break;n++;}printf("sum[%d]=%f\n",n,sum);}b.逆序计算#include<stdio.h>#include<math.h>void main(){double sum=0;int n=10000;while(n!=0){sum=sum+(1/pow(n,2));if(n%200==0)printf("sum[%d]=%-10f",n,sum);if(n<1)break;n--;}printf("sum[%d]=%f\n",n,sum);}(3)实验结果及分析:程序运行结果:a.顺序计算b.逆序计算结果分析:两种不同顺序计算结果是一样的,顺序计算误差从一开始就很小,而逆序计算误差最开始十分大,后来结果正确。
东南大学计算方法与实习实验报告
东南大学计算方法与实习实验报告计算方法与实习实验报告学院:学号:姓名:完成日期:实习题一4、设2211Nn j S j ==-∑,已知其精确值为。
1)编制按从大到小的顺序计算S n 的程序; 2)编制按从小到大的顺序计算S n 的程序;3)按两种顺序分别计算S 1000,S 10000,S 30000,并指出有效位数。
● 实验代码 C 语言程序如下:#include #include using namespace std; int main(){ float Sn=0; int N; cin>>N; for(float j=2;j<=N;j++){ Sn=1/(j*j-1)+Sn; } cout<<"从小到大计算的结果为"<<sn<for(j=N;j>=2;j--){ Sn=1/(j*j-1)+Sn;}cout<<"从大到小计算的结果为"<<sn<<=""> ● 运行窗口实习题二1、用牛顿法求下列方程的根:1) 20xx e -=实验代码C 语言程序代码如下:#include #include #define N 100 #define eps 1e-6 #define eta 1e-8using namespace std;float Newton(float f(float),float fl(float),float x0){ float x1,d; int k=0;do{x1=x0-f(x0)/fl(x0);if(k++>N||fabs(fl(x1))<eps){cout<<"发散"<<endl;break;}< p="">d=fabs(x1)<1?x1-x0:(x1-x0)/x1;x0=x1;cout<<"x="<<x0<<endl;< p="">}while(fabs(d)>eps&&fabs(f(x1))>eta);return x1;}float f(float x){return x+log10(x)-2;}float fl(float x){return 1+1/x;}void main(){float x0,y0;cin>>x0;y0=Newton(f,fl,x0);cout<<"方程的根为"<<y0<<endl;< p="">}运行窗口实习题三1、用列主元消去法解方程组:1)12434x x x ++= 123421x x x x +-+=1234333x x x x --+=-1234234x x x x -++-=实验代码C 语言程序代码如下: #include #include using namespace std;void ColPivot(float *c,int n,float x[]) { int i,j,t,k; float p; for(i=0;i<=n-2;i++){ k=i; for(j=i+1;j<=n-1;j++) if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i)))) k=j; if(k!=j) for(j=i;j<=n;j++){ p=*(c+i*(n+1)+j); *(c+i*(n+1)+j)=*(c+k*(n+1)+j); *(c+k*(n+1)+j)=p; } for(j=i+1;j<=n-1;j++){ p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i)); for(t=i;t<=n;t++)*(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t)); } } for(i=n-1;i>=0;i--){ for(j=n-1;j>=i+1;j--) (*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j)); x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i)); } } int main(){ void ColPivot(float*,int,float[]); int i;float x[4];float c[4][5]={1,1,0,3,4,2,1,-1,1,1,3,-1,-1,3,-3,-1,2,3,-1,4};ColPivot(c[0],4,x);for(i=0;i<=3;i++)printf("[x%d]=%f\n",i,x[i]);return 0;}●运行窗口4、编写用追赶法解三对角线性方程组的程序,并解下列方程组:,其中2)Ax bA10x10=-4 11 -4 11 -4 1. . .. . .1 -4 11 -4b= -27-15…-15●实验代码C语言程序如下:#include#includeusing namespace std;void ColPivot(float *c,int n,float x[]){int i,j,t,k;float p;for(i=0;i<=n-2;i++){k=i;for(j=i+1;j<=n-1;j++)if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i)))) k=j; if(k!=j)for(j=i;j<=n;j++){p=*(c+i*(n+1)+j);*(c+i*(n+1)+j)=*(c+k*(n+1)+j);*(c+k*(n+1)+j)=p;}for(j=i+1;j<=n-1;j++){p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));for(t=i;t<=n;t++)*(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t)); }}for(i=n-1;i>=0;i--){for(j=n-1;j>=i+1;j--)(*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j));x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i));}}int main(){void ColPivot(float*,int,float[]);int i;float x[10];float c[10][11]={-4,1,0,0,0,0,0,0,0,0,-27, 1,-4,1,0,0,0,0,0,0,0,-15,0,1,-4,1,0,0,0,0,0,0,-15,0,0,1,-4,1,0,0,0,0,0,-15,0,0,0,1,-4,1,0,0,0,0,-15,0,0,0,0,1,-4,1,0,0,0,-15,0,0,0,0,0,1,-4,1,0,0,-15,0,0,0,0,0,0,1,-4,1,0,-15,0,0,0,0,0,0,0,1,-4,1,-15,0,0,0,0,0,0,0,0,1,-4,-15};ColPivot(c[0],10,x);for(i=0;i<=9;i++)printf("[x%d]=%f\n",i,x[i]); return 0;}●运行窗口实习题四123●实验代码C语言程序如下:#include#includeusing namespace std;#define N 5void Difference(float x[],float y[],int n){float *f=new float[n+1];int k,i;for(k=1;k<=n;k++){f[0]=y[k];for(i=0;i<k;i++)< p="">f[i+1]=(f[i]-y[i])/(x[k]-x[i]);y[k]=f[k];}delete f;return;}int main(){int i;float a,b,c,varx=0.46,vary=0.55,varz=0.60;float x[N+1]={0.30,0.42,0.50,0.58,0.66,0.72};floaty[N+1]={1.04403,1.08462,1.11803,1.15603,1.19817,1.23223};Difference(x,y,N); a=y[N];b=y[N];c=y[N]; for(i=N-1;i>=0;i--) a=a*(varx-x[i])+y[i]; for(i=N-1;i>=0;i--) b=b*(vary-x[i])+y[i]; for(i=N-1;i>=0;i--) c=c*(varz-x[i])+y[i];printf("Nn(%f)=%f\n",varx,a); printf("Nn(%f)=%f\n",vary,b); printf("Nn(%f)=%f\n",varz,c); return 0;}● 运行窗口实习题六1、用复化梯形公式和复化辛卜生公式计算积分I 1(f )=?+202x cos 1πdx 。
东南大学虚拟仪器实验报告-(计算n!,计算器)
东南大学生物科学与医学工程学院虚拟仪器实验报告第二次实验实验名称:程序结构专业:生物医学工程姓名:学号:同组人员:学号:实验室: 综合楼716实验时间:10月14日评定成绩:审阅教师:一、计算n的阶乘 (3)1实验题目 (3)2实验目的 (3)3实验内容 (3)4设计方案选择、方案的优缺点。
(3)5软件设计: (3)6调试: (6)7测试结果和分析。
(6)8使用说明: (7)9结束语、总结、心得体会。
(7)二、实现加减乘除的计算器 (7)1实验题目 (7)2实验目的 (7)3实验内容 (7)4设计方案选择、方案的优缺点。
(7)5软件设计: (8)6调试: (9)7测试结果和分析 (10)8使用说明: (10)9结束语、总结、心得体会。
(10)一、计算n的阶乘1实验题目完成计算n的阶乘2实验目的①前面板数字控制器可随意输入n的值,并能显示结果(注:0!=1)。
②For循环中重复时间不少于100ms(即程序每100ms循环一次)。
3实验内容⑴学习while、For循环的使用方法。
⑵学习移位寄存器的概念,学习移位寄存器的使用。
⑶学习使用Case结构,学习添加和删除分支。
4设计方案选择、方案的优缺点。
计算n的阶乘的计算器方案选择:利用循环语句,进行数字n的阶乘运算,利用移位寄存器实现数据的传送完成数字连乘。
利用时间计时器的差值得出程序运行所用时间。
能够简洁明了的实现计算n的阶乘的功能,数据正确。
5软件设计:虚拟仪器设计步骤详细介绍。
(1)程序前面板设计:数值输入控件:名称:输入n 属性:双精度(DBL)用途:面向用户,手动输入n值数值显示控件:名称:n!的值属性:双精度(DBL)用途:显示n!运算结果名称:运行时间(ms)属性:双精度(DBL)用途:显示程序运行时间面板的布局:。
(2)框图程序设计:程序流程图:源程序:6调试:调试步骤:使用高亮执行该段程序,观察数据流的动向。
调试中问题:一开始使用整型,对于较小数值,结算结果正确,但对于较大的数值计算结果错误。
东南大学高等数学数学实验报告
高等数学数学实验报告实验人员:院(系) 经济管理学院 学号 14B13310 姓名 夏清晨 实验地点:计算机中心机房实验一空间曲线与曲面的绘制一、实验题目利用参数方程作图,做出由下列曲面所围成的立体:二、实验目的和意义利用数学软件mathematica 绘制三维图形来观察空间曲线和空间曲面图形的特点,以加强几何的直观性。
三、计算公式● v u x sin *cos = v v y sin *sin = v z cos = (0<u<2∏ 0<v<0.5∏) ● u x sin *5.0= u y cos = z=v (0<u<2∏ -1<v<2) ● x=u y=v z=0 (-2<u<2 -2<v<2)四、程序设计s1=ParametricPlot3D[{u,v,1u 2v 2},{u,-1,1},{v,-1,1},PlotRange →{-1,1},AxesLabel →{"X","Y","Z"},DisplayFunction →Identity]; s2=ParametricPlot3D[{u 2+v 2-u,u,v},{u,-1,1},{v,-1,1},AxesLabel →{"X","Y","Z"},DisplayFunction →Identity]; s3=ParametricPlot3D[{u,v,0},{u,-1,1},{v,-1,1},AxesLabel →{"X","Y","Z"},DisplayFunction →Identity]; Show [s1,s2,s3,DisplayFunction →$DisplayFunction]五、程序运行结果六、结果的讨论和分析利用Mathematica,直观地展示了图形的空间结构以及交界情况。
《计算方法》实验报告材料
double Newton(double x,vector<double>&X,vector<double>&Y);
int main(){
char a='n';
do{
int n;
cout<<"请输入插值点个数:"<<endl;
for(int i=0;i<N;i++){
X[i]=p;
Y[i]=1/(1+p*p);
p=p+c;
}
cout<<"请输入要求值x的值:"<<endl;
double x;
cin>>x;
double result=fenduan(N,X,Y,x,c);
cout<<"由分段线性插值法得出结果: "<<result<<endl;
cin>>n;
vector<double>X(n,0);
vector<double>Y(n,0);
cout<<"请输入插值点对应的值及函数值(Xi,Yi):"<<endl;
for(int i=0;i<n;i++){
cin>>X[i]>>Y[i];
}
cout<<"请输入要求值x的值:"<<endl;
计算方法与实习报告
Difference(x,y,N);
b=y[N];
for(i=N-1;i>=0;i--)
b=b*(varx-x[i])+y[i];
printf("Nn(%f)=%f",varx,b);
(3)如果 ,则交换第k行与第 行对应元素位置
(4)消元,对i=k+1,........,n计算 ,对j=k+1,..........,n+1计算
回代过程
(1)若 ,则矩阵A奇异,程序结束;否则执行(2)
(2) ;对i=n-1,......2,1计算
(1)程序代码为:
#include<iostream>
void main()
{
float sum=0;
int n=1;
while(n<=10000){
sum=sum+(float)1/(n*n);
n++;
}
cout<<"The sum that from min to max is:"<<sum;
}
(2)运行输出的结果为:
The sum that from max to min is:=1.64473
}
while(fabs(d)>eps&&fabs((*f)(x1))>eta);
return x1;
}
float f(float x)
{
return float(x*x-exp(x));
东南大学数学建模与实验+实验报告
% Z 转化为26以便输出 % 转为ASCII码
% 转为ASCII码
执行结果
原文: ( xxxxxxxxxxxxxxxxxxxxx )
text = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
加密矩阵:
A= 1 0 8 9
解密矩阵:
A= 1 0 2 3
3
for i=1:n1-1 h1(i)=X1(i+1)-X1(i); end d1(1)=6*((Y1(2)-Y1(1))/h1(1)-gbar1(1))/h1(1); d1(n1)=6*(gbar1(2)-(Y1(n1)-Y1(n1-1))/h1(n11))/h1(n1-1); for i=2:n1-1 lmd1(i)=h1(i)/(h1(i-1)+h1(i)); mu1(i)=1- lmd1(i); d1(i)=6*((Y1(i+1)-Y1(i))/h1(i)-(Y1(i)-Y1 (i-1))/h1(i-1))/(h1(i-1)+h1(i)); End % 计算hj,μj,λj,dj A1(1,1)=2; A1(1,2)=1; A1(n1,n1-1)=1; A1(n1,n1)=2; for i=2:n1-1 A1(i,i-1)=mu1(i); A1(i,i)=2; % 估算g’(x) end M1=inv(A1)*d1'; % A1*M1=d1 A1(i,i+1)=lmd1(i);
数学建模与实验 实验报告
授课教师
计算机科学与工程学院
目录
实验 1—3.4 节“企业利润合理使用 ”例题的求解 ……………………………… 1 实验 2—Hill 密码加密、解密 …………………………………………………… 2 实验 3—习题 5.3“样条差值法绘制公路”求解 ………………………………… 3 实验 4—Volterra 方程组求解(改进欧拉公式与龙格-库塔公式比较)…… 5 实验 5—习题 6.8“饮酒驾车的药物注射模型”求解…………………………… 7 实验 6—银行贷款利息的计算…………………………………………………… 9
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
f[i+1]=(f[i]-y[i])/(x[k]-x[i]);
y[k]=f[k];
}
delete f;
return;
}
int main(){
int i;
float a,b,c,varx=0.46,vary=0.55,varz=0.60;
float x[N+1]={0.30,0.42,0.50,0.58,0.66,0.72};
return 0;
}
运行窗口
实习题七
2、用四阶龙格-库塔公式(取h=0.1)解下列微分方程组初值问题:
(1)
实验代码
C语言程序如下:
#include<stdio.h>
void Runge_Kutta(float(*f1)(float x,float y1,float y2),float(*f2)(float x,float y1,float y2),float a,float b,float y0,int N){
void ColPivot(float *c,int n,float x[])
{
int i,j,t,k;
float p;
for(i=0;i<=n-2;i++){
k=i;
for(j=i+1;j<=n-1;j++)
if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i)))) k=j;
#include <cstdio>
using namespace std;
#define N 5
void Difference(float x[],float y[],int n){
float *f=new float[n+1];
int k,i;
for(k=1;k<=n;k++){
f[0]=y[k];
int i;
float x[4];
float c[4][5]={1,1,0,3,4,
2,1,-1,1,1,
3,-1,-1,3,-3,
-1,2,3,-1,4};
ColPivot(c[0],4,x);
for(i=0;i<=3;i++)printf("[x%d]=%f\n",i,x[i]);
return 0;
}
运行窗口
4、编写用追赶法解三对角线性方程组的程序,并解下列方程组:
2) ,其中
A10x10=-4 1
1 -4 1
1 -4 1
. . .
. . .
1 -4 1
1 -4
b= -27
-15
…
-15
实验代码
C语言程序如下:
#include<iostream>
#include<cmath>
using namespace std;
Sn=1/(j*j-1)+Sn;
}
cout<<"从大到小计算的结果为"<<Sn<<endl;
return 0;
}
运行窗口
实习题二
1、用牛顿法求下列方程的根:
1)
实验代码
C语言程序代码如下:
#include <iostream>
#include <cmath>
#define N 100
#define eps 1e-6
return 1+1/x;
}
void main(){
float x0,y0;
cin>>x0;
y0=Newton(f,fl,x0);
cout<<"方程的根为"<<y0<<endl;
}
运行窗口
实习题三
1、用列主元消去法解方程组:
1)
实验代码
C语言程序代码如下:
#include<iostream>
#include<cmath>
using namespace std;
void ColPivot(float *c,int n,float x[])
{
int i,j,t,k;
float p;
for(i=0;i<=n-2;i++){
k=i;
for(j=i+1;j<=n-1;j++)
if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i)))) k=j;
if(k!=j)
for(j=i;j<=n;j++){
p=*(c+i*(n+1)+j);
*(c+i*(n+1)+j)=*(c+k*(n+1)+j);
*(c+k*(n+1)+j)=p;
}
for(j=i+1;j<=n-1;j++){
p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));
for(t=i;t<=n;t++)*(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t));
float x=a,K1,K2,K3,K4,L1,L2,L3,L4,y1=y0,y2=y0;
float h=(b-a)/N;
int i;
printf("x[0]=%f\ty1[0]=%f\ty2[0]=%f\n",x,y1,y2);
for(i=1;i<=N;i++){
K1=(*f1)(x,y1,y2);
if(fabs(f2-q)<0.000001)break;
}
cout<<setw(15)<<f2<<setw(15)<<fabs(f2-q)<<endl;
if(fabs(f2-q)<0.000001)break; q=f2; n2++; f2=0;
}
cout<<setprecision(7)<<"用复化辛卜生公式计算得f1="<<f2<<",迭代次数为:n="<<n2<<endl;
b=b*(vary-x[i])+y[i];
for(i=N-1;i>=0;i--)
c=c*(varz-x[i])+y[i];
printf("Nn(%f)=%f\n",varx,a);
printf("Nn(%f)=%f\n",vary,b);
printf("Nn(%f)=%f\n",varz,c);
return 0;
#define eta 1e-8
using namespace std;
floatNewton(float f(float),float fl(float),float x0){
float x1,d;
int k=0;
do{
x1=x0-f(x0)/fl(x0);
if(k++>N||fabs(fl(x1))<eps){cout<<"发散"<<endl;break;}
float y[N+1]={1.04403,1.08462,1.11803,1.15603,1.19817,1.23223};
Difference(x,y,N);
a=y[N];b=y[N];c=y[N];
for(i=N-1;i>=0;i--)
a=a*(varx-x[i])+y[i];
for(i=N-1;i>=0;i--)
if(k!=j)
for(j=i;j<=n;j++){
p=*(c+i*(n+1)+j);
*(c+i*(n+1)+j)=*(c+k*(n+1)+j);
*(c+k*(n+1)+j)=p;
}
for(j=i+1;j<=n-1;j++){
p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));
for(t=i;t<=n;t++)*(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t));
cout<<setw(15)<<"f1"<<setw(15)<<"前后项差值"<<endl;
for(i=0;;i++){
a=0; b=3.14159/2; h=(b-a)/n2;
for(j=1;j<=n2;j++){
x1=a+(j-1)*h;
x2=a+j*h; x3=a+(j-0.5)*h;
f2+=h/6*(sqrt(1+cos(x1)*cos(x1))+4*sqrt(1+cos(x3)*cos(x3))+sqrt(1+cos(x2)*cos(x2)));