计算方法B上机报告
上机实验报告(精选11篇)
上机实验报告篇1用户名se××××学号姓名学院①实验名称:②实验目的:③算法描述(可用文字描述,也可用流程图):④源代码:(.c的文件)⑤用户屏幕(即程序运行时出现在机器上的画面):2.对c文件的要求:程序应具有以下特点:a可读性:有注释。
b交互性:有输入提示。
c结构化程序设计风格:分层缩进、隔行书写。
3.上交时间:12月26日下午1点-6点,工程设计中心三楼教学组。
请注意:过时不候哟!四、实验报告内容0.顺序表的插入。
1.顺序表的删除。
2.带头结点的单链表的\'插入。
3.带头结点的单链表的删除。
注意:1.每个人只需在实验报告中完成上述4个项目中的一个,具体安排为:将自己的序号对4求余,得到的数即为应完成的项目的序号。
例如:序号为85的同学,85%4=1,即在实验报告中应完成顺序表的删除。
2.实验报告中的源代码应是通过编译链接即可运行的。
3.提交到个人空间中的内容应是上机实验中的全部内容。
上机实验报告篇2一、《软件技术基础》上机实验内容1.顺序表的建立、插入、删除。
2.带头结点的单链表的建立(用尾插法)、插入、删除。
二、提交到个人10m硬盘空间的内容及截止时间1.分别建立二个文件夹,取名为顺序表和单链表。
2.在这二个文件夹中,分别存放上述二个实验的相关文件。
每个文件夹中应有三个文件(.c文件、.obj文件和.exe文件)。
3. 截止时间:12月28日(18周周日)晚上关机时为止,届时服务器将关闭。
三、实验报告要求及上交时间(用a4纸打印)1.格式:《计算机软件技术基础》上机实验报告用户名se××××学号姓名学院①实验名称:②实验目的:③算法描述(可用文字描述,也可用流程图):④源代码:(.c的文件)⑤用户屏幕(即程序运行时出现在机器上的画面):2.对c文件的要求:程序应具有以下特点:a 可读性:有注释。
b 交互性:有输入提示。
计算方法上机实验报告——椭圆周长
计算方法上机实习题目(四)——龙贝格算法计算椭圆周长一、 题目用龙贝格算法计算椭圆110040022=+y x 的周长,使误差不超过410-。
二、解题方法由题目中椭圆的标准方程 110040022=+y x 知,该椭圆的参数方程为)2,0[ sin 10cos 20π∈⎩⎨⎧==t ty t x 参考微积分中曲线弧长计算公式dt t y t x s ⎰+=βα)()(2'2' 知该椭圆的周长计算公式为 dt t t s ⎰+=π2022cos 100sin 400 故该问题为利用龙贝格算法计算数值积分。
参考教材式(5.42),若以一个二元数组T[i][j]代表式中的)(j i T ,则式(5.42)可化为⎪⎪⎪⎩⎪⎪⎪⎨⎧=⋯=--=--+-+=+-=-+-=-∑-)3,2,1;,2,1,0(144]2)12([221)]()([2][]1[]1[]1[][][21]1[]0[][]0[]0[]0[1m k T T T a b i a f a b T T b f a f a b T m k m k m m k m i l l l l l 其中t t t f 22cos 100sin 400)(+=,a ,b 为区间端点值,π2,0==b a 。
相应的计算程序段为T[0][0]=(b-a)*(f(a)+f(b))/2;k=1;T[0][1]=T[0][0]/2+(b-a)*Sum(1)/pow(2,1);T[1][0]=(4*T[0][1]-T[0][0])/(4-1);k=2;T[0][2]=T[0][1]/2+(b-a)*Sum(2)/pow(2,2);T[1][1]=(4*T[0][2]-T[0][1])/(4-1);T[2][0]=(pow(4,2)*T[1][1]-T[1][0])/(pow(4,2)-1);k=3;T[0][k]=T[0][k-1]/2+(b-a)*Sum(k)/pow(2,k);T[1][k-1]=(4*T[0][k]-T[0][k-1])/(4-1);T[2][k-2]=(pow(4,2)*T[1][k-1]-T[1][k-2])/(pow(4,2)-1);T[3][k-3]=(pow(4,3)*T[2][k-2]-T[2][k-3])/(pow(4,3)-1);for(k=4;fabs(T[3][k-4]-T[3][k-5])>=pow(10,-4);k++){T[0][k]=T[0][k-1]/2+(b-a)*Sum(k)/pow(2,k);T[1][k-1]=(4*T[0][k]-T[0][k-1])/(4-1);T[2][k-2]=(pow(4,2)*T[1][k-1]-T[1][k-2])/(pow(4,2)-1);T[3][k-3]=(pow(4,3)*T[2][k-2]-T[2][k-3])/(pow(4,3)-1);}其中f(x)和Sum(l)为调用的子函数,子函数程序如下:double Sum(int l){i;intdoublesum,a,b;double f(double x);a=0.0;b=2*PI;sum=0;for(i=1;i<=pow(2,l-1);i++)sum=sum+f(a+(2.0*i-1.0)*(b-a)/pow(2,l));sum;return}double f(double x){y;doubley=sqrt(pow(20*sin(x),2)+pow(10*cos(x),2));y;return}因为并不是一开始T[3][j]就同步出现,所以需将k=3之前的各值先单独算出,又因为要10-,所以控制循环结束的条件是fabs(T[3][k-4]-T[3][k-5])>=pow(10,-4),求最后误差不超过4其中fabs(x)为求绝对值的函数,这里需要注意的是,每次判断时已经执行了k++这条指令,所以在判断是应该是T[3][k-4]-T[3][k-5],而不是T[3][k-3]-T[3][k-4],我在最初编写程序时就忽略了这个问题,导致花费很久调试程序。
数值计算方法上机实验报告
数值计算方法上机实验报告
一、实验目的
本次实验的主要目的是熟悉和掌握数值计算方法,学习梯度下降法的
原理和实际应用,熟悉Python语言的编程基础知识,掌握Python语言的
基本语法。
二、设计思路
本次实验主要使用的python语言,利用python下的numpy,matplotlib这两个工具,来实现数值计算和可视化的任务。
1. 首先了解numpy的基本使用方法,学习numpy的矩阵操作,以及numpy提供的常见算法,如矩阵分解、特征值分解等。
2. 在了解numpy的基本操作后,可以学习matplotlib库中的可视化
技术,掌握如何将生成的数据以图表的形式展示出来。
3. 接下来就是要学习梯度下降法,首先了解梯度下降法的主要原理,以及具体的实际应用,用python实现梯度下降法给出的算法框架,最终
可以达到所期望的优化结果。
三、实验步骤
1. 熟悉Python语言的基本语法。
首先是熟悉Python语言的基本语法,学习如何使用Python实现变量
定义,控制语句,函数定义,类使用,以及面向对象编程的基本概念。
2. 学习numpy库的使用方法。
其次是学习numpy库的使用方法,学习如何使用numpy库构建矩阵,学习numpy库的向量,矩阵操作,以及numpy库提供的常见算法,如矩阵分解,特征值分解等。
3. 学习matplotlib库的使用方法。
计算方法B上机报告
西安交通大学计算方法B上机报告班级:XXXXXXXX姓名:XXX学号:XXXXXXXX2015/12/13 Sunday目录1题目一 (1)1.数值计算 (1)2.实现思想 (1)3.源程序 (1)4.计算结果 (2)5.分析总结 (2)2题目二 (3)1.数据近似 (3)2.实现思想 (3)3.源程序 (5)4.计算结果 (6)5.分析总结 (7)3题目三 (8)1.数据拟合 (8)2.实现思想 (8)3.源程序 (9)4.计算结果 (12)5.分析总结 (14)4题目四 (15)1.非线性方程求解 (15)2.实现思想 (15)3.源程序 (16)4.计算结果 (17)5.分析总结 (17)5题目五 (18)1.线性方程组求解。
(18)2.文件格式说明 (18)3.实现思想 (19)4.源程序 (20)5.计算结果 (23)6.分析总结 (25)7.实际问题 (25)1 题目一1. 数值计算计算以下和式:0142118184858616nn S n n n n ∞=⎛⎫=--- ⎪++++⎝⎭∑,要求:(1)若保留11个有效数字,给出计算结果,并评价计算的算法;(2)若要保留30个有效数字,则又将如何进行计算。
2. 实现思想对于(1)可用迭代的方法进行处理。
通过do-while 循环使和式从0开始计算直到结果满足有效数字即可。
在循环中通过比较本次和上一次结果之差的绝对值与相应有效数字的大小的1/2,即可构成循环中止条件。
对于(2)可用同样的方法进行计算,然而由于所保留的有效数字较大,此时若不对上述算法进行改善的话,由于每一步所得计算结果都是其真实值,此时可能会存在有效数字丢失的情况,从而影响计算的准确性。
因此我们需要对程序中的计算精度进行控制。
在Maltlab 中可利用digits()函数对运算精度进行规定,为防止出现有效位的损失,在实际程序中需将精度提高几位。
而对迭代中每一步所得到的结果则利用vpa()函数进行限定,这样一来我们对每一个运算都控制了精度,而不只是单纯控制了结果的精度3. 源程序使用Matlab 所编写程序如下所示:(1)clear;clc;sd = 11; %所要保留有效数字 n = 0; %迭代次数S1 = 0; %当前n 时计算结果 S2 = 0; %n-1时计算结果 while 1eq = (4/(8*n+1)-2/(8*n+4)-1/(8*n+5)-1/(8*n+6))/16^n; S1 = S1 + eq;if abs(S1-S2)<0.5*10^(-(sd-1)) %迭代是否终止判断条件 break endS2 = S1; n = n+1; endS=vpa(S1,sd)(2)clear;clc;sd = 30; %所要保留有效数字digits(sd+2);%控制精度n = 0; %迭代次数S1 = vpa(0); %当前n时计算结果S2 = vpa(0); %n-1时计算结果while 1eq = vpa((4/(8*n+1)-2/(8*n+4)-1/(8*n+5)-1/(8*n+6))/16^n);S1 = vpa(S1 + eq);if abs(S1-S2)<vpa(0.5*10^(-(sd-1))) %迭代是否终止判断条件breakendS2 = S1;n = n+1;endS=vpa(S1,sd)4.计算结果(1)S =3.1415926536(2)S =3.141592653589793238435711679225.分析总结从计算结果可以看出与准确值3.1415926535897932384357116792180407…相比(1)和(2)所得结果分别是准确值保留11位和30位有效数字的结果,即利用本程序所得结果准确。
东南大学计算方法上机报告实验报告完整版
实习题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 的逐渐增大,两种算法的运行结果相差越来越大。
计算方法与计算 实验一误差分析
% 输出的量--每次迭代次数k和迭代值xk,
%
--每次迭代的绝对误差juecha和相对误差xiangcha,
误差分析
误差问题是数值分析的基础,又是数值分析中一个困难的课题。在实际计算 中,如果选用了不同的算法,由于舍入误差的影响,将会得到截然不同的结果。 因此,选取算法时注重分析舍入误差的影响,在实际计算中是十分重要的。同时, 由于在数值求解过程中用有限的过程代替无限的过程会产生截断误差,因此算法 的好坏会影响到数值结果的精度。 一、实验目的
因为运行后输出结果为: y 1.370 762 168 154 49, yˆ =1.370 744 664 189
38, R 1.750 396 510 491 47e-005, WU= 1.782 679 830 970 664e-005 104 . 所
以, yˆ 的绝对误差为 10 4 ,故 y
③ 运行后输出计算结果列入表 1–1 和表 1-2 中。
④ 将算法 2 的 MATLAB 调用函数程序的函数分别用 y1=15-2*x^2 和
y1=x-(2*x^2+x-15)/(4*x+1)代替,得到算法 1 和算法 3 的调用函数程序,将其保
存,运行后将三种算法的前 8 个迭代值 x1, x2 ,, x8 列在一起(见表 1-1),进行
的精确解 x* 2.5 比较,观察误差的传播.
算法 1 将已知方程化为同解方程 x 15 2x2 .取初值 x0 2 ,按迭代公式
xk1 15 2xk2
大学计算机实验报告心得(3篇)
大学计算机实验报告心得(3篇)在未学习计算机之前,我从不知道它究竟是干什么用的,为什么许多许多的人都要迫不及待的地要去学它,同时也有人陷入计算机的泥潭,不能自拔。
自从我触摸到它的时候,即教师教给我们怎样使用计算机时,我才明白它的重要性。
它涉及了生活的各个方面以及各个层次的人都离不开它,同时也明白了它的利与弊。
我在读小学的时候第一次接触计算机觉得很新奇。
我清楚的记得,当时有一个清楚的想法,那就是肯定要学好计算机。
但随着自己对电脑接触的不断深入,对计算机的熟悉越来越深,特殊是刚进到高中,使用了各种办公软件,可是在设计和办公过程中,当遇到一些电脑系统出错导致文件成果丧失的突发问题时。
我才深深地感受到自己计算机学问是多么的欠缺,自己终归不是学计算机专业的,对计算机学问的把握都是零散的,对这些突发问题只能束手无策。
于是我暗自宣誓,无论如何,要学好计算机,但上高中是我忙于课业学习,没有足够的时间学习计算机学问。
这一只是一个很大的圆满,所以我在高中时就打算大学后肯定要好好学习计算机学问,把落下的都补回来。
令我快乐的是,大学计算机课时许多,我可以好好利用它来猎取我想要的学问。
在课堂上我专心听讲,仔细做笔记。
实践课上也好好练习,学到了许多新的学问。
真的很值啊。
我对自己也提了许多要求,只为了学好学问,向全方位人才买件一步。
首先,我要了解肯定的硬件学问。
不少人刚开头学电脑就抱本DOS 或WINDOWS操作指南之类的教材,坐在电脑前将教材上的命令一个个使用一次。
这样的话,对电脑硬件一无所知怎能把握好对它们的操作?比方,对内存和硬盘的概念不理解,就难于理解存盘与未存盘的区分,对硬盘、软盘的作用不明白,就难于理解什么时候用软盘什么时候用硬盘等等。
由于应用系统的操作有很多是针对硬件的,对硬件的把握能推动应用软件的学习。
其次,对自己所要学习的软件要有明确的熟悉。
计算机软件分为系统软件和应用软件,应用软件是能直接为用户解决某一特定问题的软件,它必需以系统软件为根底。
计算机上机实验内容及实验报告要求实验报告
计算机上机实验内容及实验报告要求实验报告
上机实验内容可以根据具体的课程和学科要求来设定,以下是一个示例:
上机实验内容:
1. 设计一个简单的计算器程序,能够实现基本的四则运算。
2. 编写一个程序,实现对学生成绩的管理,包括添加、删除、查询学生信息等功能。
3. 使用Python编写一个简单的文本编辑器,能够实现打开、编辑、保存文件等功能。
实验报告要求:
1. 封面:包括实验标题、班级、姓名等基本信息。
2. 实验目的:阐述本次实验的目标和意义。
3. 实验原理:简要介绍实验所涉及的基本原理和背景知识。
4. 实验步骤:详细描述实验的具体步骤和操作过程。
5. 实验结果:展示实验过程中产生的结果和数据,可以使用截图、表格等形式。
6. 实验分析:对实验结果进行分析和解释,可以结合相关理论知识加以说明。
7. 实验总结:总结实验的过程和结果,总结实验中所学到的知识和经验。
8. 实验改进:提出对实验的改进意见和建议,指出可能存在的不足之处和改进方向。
9. 参考文献:列出实验过程中参考的相关文献和资料。
注意事项:
1. 实验报告应使用规范的学术写作语言,遵循论文写作规范。
2. 图表应清晰可读,标注明确。
3. 所有使用的源代码和数据应在实验报告中附上。
4. 提交实验报告时应按要求进行格式排版,并正确命名文件。
数值计算方法上机实验报告
数值计算方法上机实验报告实验目的:复习和巩固数值计算方法的基本数学模型,全面掌握运用计算机进行数值计算的具体过程及相关问题。
利用计算机语言独立编写、调试数值计算方法程序,培养学生利用计算机和所学理论知识分析解决实际问题的能力。
上机练习任务:利用计算机基本C 语言编写并调试一系列数值方法计算通用程序,并能正确计算给定题目,掌握调试技能。
掌握文件使用编程技能,如文件的各类操作,数据格式设计、通用程序运行过程中文件输入输出运行方式设计等。
一、各算法的算法原理及计算机程序框图1. 列主元高斯消去法算法原理:高斯消去法是利用现行方程组初等变换中的一种变换,即用一个不为零的数乘一个方程后加只另一个方程,使方程组变成同解的上三角方程组,然后再自下而上对上三角方程组求解。
列选住院是当高斯消元到第k 步时,从k 列的kk a 以下(包括kk a )的各元素中选出绝对值最大的,然后通过行交换将其交换到kk a 的位置上。
交换系数矩阵中的两行(包括常数项),只相当于两个方程的位置交换了,因此,列选主元不影响求解的结果。
●源程序:#define N 200#include "stdio.h"#include "math.h"FILE *fp1,*fp2;void LZ(){int n,i,j,k=0,l;double d,t,t1;static double x[N],a[N][N];fp1=fopen("a1.txt","r");fp2=fopen("b1.txt","w");fscanf(fp1,"%d",&n);for(i=0;i<n;++i)for(j=0;j<=n;++j){fscanf(fp1,"%lf",&a[i][j]);}{d=a[k][k];l=k;i=k+1;do{if(fabs(a[i][k])>fabs(d)) /*选主元*/{d=a[i][k];l=i;}i++;}while(i<n);if(d==0){printf("\n输入矩阵有误!\n");}else{ /*换行*/if(l!=k){for(j=k;j<=n;j++){t=a[l][j];a[l][j]=a[k][j];a[k][j]=t;}}}for(j=k+1;j<=n;j++) /*正消*/ a[k][j]/=a[k][k];for(i=k+1;i<n;i++)for(j=k+1;j<=n;j++)a[i][j]-=a[i][k]*a[k][j];k++;}while(k<n);if(k!=0){for(i=n-1;i>=0;i--) /*回代*/ {t1=0;for(j=i+1;j<n;j++)t1+=a[i][j]*x[j];x[i]=a[i][n]-t1;}for(i=0;i<n;i++)fprintf(fp2,"\n 方程组的根为x[%d]=%lf",i+1,x[i]); fclose(fp1); fclose(fp2); }main() { LZ(); }● 具体算例及求解结果:用列选主元法求解下列线性方程组⎪⎩⎪⎨⎧=++=++=-+28x x 23x 2232832321321321x x x x x x 输入3 输出结果:方程组的根为x[1]=6.0000001 2 -3 8 方程组的根为x[2]=4.000000 2 1 3 22 方程组的根为x[3]=2.000000 3 2 1 28● 输入变量、输出变量说明:输入变量:ij a 系数矩阵元素,i b 常向量元素 输出变量:12,,n b b b 解向量元素2. 杜里特尔分解法解线性方程● 算法原理:求解线性方程组Ax b =时,当对A 进行杜里特尔分解,则等价于求解LUx b =,这时可归结为利用递推计算相继求解两个三角形(系数矩阵为三角矩阵)方程组,用顺代,由Ly b =求出y ,再利用回带,由Ux y =求出x 。
上机报告总结模板下载(通用3篇)
上机报告总结模板下载第1篇一、实验原理(1)电子的自旋轨道磁矩与自旋磁矩 l原子中的电子由于轨道运动,具有轨道磁矩,其数值为:l号表示方向同Pl相反。
在量子力学中PePl2me,负,因而lB1)B2me称为玻尔磁子。
电子除了轨道运动外,其中e还具有自旋运动,因此还具有自旋磁矩,其数值表示为:se Psme。
由于原子核的磁矩可以忽略不计,原子中电子的轨道磁矩和自旋磁矩合成原子的总磁矩:jgej(j1)l(l1)s(s1)Pjg12me,其中g是朗德因子:2j(j1)。
在外磁场中原子磁矩要受到力的作用,其效果是磁矩绕磁场的方向作旋进,也就是Pj 绕着磁场方向作旋进,引入回磁比同时原子角动量Pj和原子总磁矩Pjm ,mj,j1,j2,e2me,总磁矩可表示成jPj。
j取向是量子化的。
Pj在外磁场方向上的投影为:其中m称为磁量子数,相应磁矩在外磁场方向上j。
的投影为: jmmgB ;mj,j1,j2,(2)电子顺磁共振 j。
如果在原子所在的稳定磁场区又叠加一个与之垂直的交变磁场,且角频率满足条件gB B,即EB,刚好满足原子在稳定外磁场中的邻近二能级差时,二邻近能级之间就有共振跃迁,我们称之为电子顺磁共振。
P当原子结合成分子或固体时,由于电子轨道运动的角动量常是猝灭的,即j近似为零,所以分子和固体中的磁矩主要是电子自旋磁矩的贡献。
根据泡利原理,一个电子轨道最多只能容纳两个自旋相反的电子,若电子轨道都被电子成对地填满了,它们的自旋磁矩相互抵消,便没有固有磁矩。
通常所见的化合物大多数属于这种情况,因而电子顺磁共振只能研究具有未成对电子的特殊化合物。
(3)弛豫时间实验样品是含有大量具有不成对电子自旋所组成的系统,虽然各个粒子都具有磁矩,但是在热运动的扰动下,取向是混乱的,对外的合磁矩为零。
当自旋系统处在恒定的外磁场H0中时,系统内各质点的磁矩便以不同的角度取向磁场H0的方向,并绕着外场方向进动,从而形成一个与外磁场方向一致的宏观磁矩M。
计算方法大作业——三次样条插值
计算方法上机报告
此完成所有数据的输入。继续按 Enter 键会出现提示“选择封闭方程组的边界条件: 第 一类边界条件输入 1,第二类边界条件输入 2,第三类边界条件输入 3。 ”根据已知情况 选择相应的边界条件,若为自然三次样条插值,则选 1,并将插值区间两端点的二阶导 数值设置为 0。输入完成之后按 Enter 开始求解,程序运行结束后命令窗口会显示要求 的三次样条插值函数,同时会出现该插值函数以及插值节点的图像,便于直接观察。 2.3 算例及计算结果 (1) 《数值分析》课本第 137 页的例题 4.6.1,已知函数 y=f(x)的数值如下表,求它 的自然三次样条插值函数。 xi yi -3 7 -1 11 0 26 3 56 4 29
(2) 给定函数 f ( x)
3 x 1 1 x 0 0 x3 3 x 4
1 (1 x 1) 。取等距节点,构造牛顿插值多项式 N5(x) 1 25x 2 和 N10(x)及三次样条插值函数 S10(x)。分别将三种插值多项式与 f(x)的曲线画在同一个
N10 x
22757 10 5444 8 20216 6 17147 4 3725 2 x x x x x 1 103 11 53 139 221
将牛顿插值多项式 N5(x)和 N10(x)及三次样条插值函数 S10(x)分别与 f(x)的曲线画在 同一个坐标系上进行比较,如图 12。可以看出三次样条函数与原函数符合的非常好, 对于低次的牛顿插值多项式,与原函数的大致趋势相同,而高次的牛顿插值多项式由 于龙格现象的出现,与原函数之间相差比较大。
S ( xi ) S ( xi ), ( xi ) S ( xi ), S S ( x ) S ( x ), i i i 1, 2, , n 1
电力系统稳态实验报告
电力系统稳态潮流计算上机实验报告一、问题如下图所示的电力系统网络,分别用牛顿拉夫逊法、PQ解耦法、高斯赛德尔法、保留非线性法计算该电力系统的潮流。
发电机的参数如下,*表示任意值负荷参数如下,如上图所示的电力系统,可以看出,节点1、2、3是PQ节点,节点4是PV节点,而将节点5作为平衡节点。
根据问题所需,采用牛顿拉夫逊法、PQ解耦法、高斯赛德尔法、保留非线性法,通过对每次修正量的收敛判据的判断,得出整个电力系统的潮流,并分析这四种方法的收敛速度等等。
算法分析1.牛顿拉夫逊法节点5为平衡节点,不参加整个的迭代过程,节点1、2、3为PQ节点,节点4为PV 节点,计算修正方程中各量,进而得到修正量,判断修正量是否收敛,如果不收敛,迭代继续,如果收敛,算出PQ节点的电压幅值以及电压相角,得出PV节点的无功量以及电压相角,得出平衡节点的输出功率。
潮流方程的直角坐标形式,()()∑∑∈∈++-=ij j ij j ij i ij j ij j ij i i e B f G f f B e G e P()()∑∑∈∈+--=ij j ij j ij i ij j ij j ij i i e B f G e f B e G f Q直角坐标形式的修正方程式,11112n n n m n m -----∆⎡⎤⎡⎤∆⎡⎤⎢⎥⎢⎥∆=-⎢⎥⎢⎥⎢⎥∆⎣⎦⎢⎥⎢⎥∆⎣⎦⎣⎦PHN e Q M L f UR S修正方程式中的各量值的计算,()()][∑∑∈∈++--=∆ij j ij j ij i ij j ij j ij i is i e B f G f f B e G e p P()()][∑∑∈∈+---=∆ij j ij j ij i ij j ij j ij i is i e B f G e f B e G f Q Q)(2222i i is i f e U U +-=∆Jacobi 矩阵的元素计算,()()()ij i ij i i ijij j ij j ii i ii i jj iB e G f j i Q M G f B e B e G f j i e ∈-⎧≠∂∆⎪==⎨++-=∂⎪⎩∑()()()ij i ij i i ijij j ij j ii i ii i jj iG e B f j i Q L G e B f G e B f j i f ∈+⎧≠∂∆⎪==⎨--++=∂⎪⎩∑)()(202i j i j e e U R ijij i =≠⎩⎨⎧-=∂∆∂=)()(202i j i j f f U S ijij i =≠⎩⎨⎧-=∂∆∂=牛顿拉夫逊法潮流计算的流程图如下,2.PQ 解耦法如同牛顿拉夫逊法,快速解耦法的前提是,输电线路的阻抗要比电阻大得多,并且输电线路两端的电压相角相差不大,此时可利用PQ 快速解耦法,来计算整个电力系统网络的潮流。
生产与运作管理上机试验报告
实验一:运用excel进行生产决策一、实验目的和要求1)通过复习生产计划的基础知识,掌握生产计划的制定方法以及将生产计划转化为线性规划的方法。
2)学习Excel中的Solver,掌握生产计划的一种求解方法。
二、实验原理1)熟练掌握生产计划的模型建立。
2)将生产计划模型转化为线性规划模型。
3)求解生产计划;熟练掌握生产计划的模型建立。
三、主要仪器设备(软件)实验硬件:PC机实验软件:Windows操作系统、装有规划求解功能的Excel。
四、实验内容及步骤4.1实验内容:将下列生产问题转化为线性规划问题并求解:A公司是一家生产拉盖式和普通式书桌的公司。
生产一个拉盖式书桌需要10平方尺松木,4平方尺雪松,15平方尺枫木。
一个普通型的书桌需要的木材分别是20、16和10平方尺的木材。
每销售一个书桌可以产生115 元或者90元的利润。
现在公司有200平方尺松木、128平方尺雪松和220平方尺枫木。
他们已经接受了这两种书桌的订货并且想得到最大的利润。
他们应该如何组织生产。
4.2实验步骤1)将问题转化为线性规划问题。
该问题是一个明显的线性规划问题根据线性规划的方法,将以上问题转化为线性规划问题。
在此中注意明确的和隐含的约束。
2)将线性规划的目标函数和约束转化为矩阵形式。
3)将矩阵输入到Excel。
4)调用Solver求解:工具菜单-选择Solver,调用出Solver-〉出现Solver对话框。
5)设置目标单元格。
6)指定是最大问题还是最小问题。
7)告诉Excel约束的数学定义在那里。
8)设置属性。
9)点击“Solver”按钮得到答案。
10)将解转化为问题答案。
五、实验数据记录1 .将生产计划决策问题转化为线性规划问题。
设:生产拉盖型和普通型书桌的数量分别是x 与y 目标函数max=115x+90y 约束条件10x+20y<=2004x+16y<=128 15x+10y<=220其中,x,y>=02 .将线性规划的目标函数和约束函数转化为矩阵形式,将矩阵输入Excel 。
电力系统潮流计算实验报告
11. 手算过程已知:节点1:PQ 节点, s(1)= -0.5000-j0.3500 节点2:PV 节点, p(2)=0.4000 v(2)=1.0500 节点3:平衡节点,U(3)=1.0000∠0.0000 网络的连接图:0.0500+j0.2000 1 0.0500+j0.2000231)计算节点导纳矩阵由2000.00500.012j Z 71.418.112j y ;2000.00500.013j Z71.418.113j y ;导纳矩阵中的各元素:42.936.271.418.171.418.1131211j j j y y Y ;71.418.11212j y Y ; 71.418.11313j y Y; 21Y 71.418.11212j y Y ; 71.418.12122j y Y;002323j y Y;31Y 71.418.11313j y Y; 32Y 002323j y Y;71.418.13133j y Y;形成导纳矩阵BY :71.418.10071.418.10071.418.171.418.171.418.171.418.142.936.2j j j j j j j j j Y B2)计算各PQ、PV 节点功率的不平衡量,及PV 节点电压的不平衡量:取:000.0000.1)0(1)0(1)0(1j jf e U000.0000.1)0(2)0(2)0(2j jf e U节点3是平衡节点,保持000.0000.1333j jf e U为定值。
nj j jij jij ijij jij i ieB fG f fB eG e P1)0()0()0()0()0()0()0(;2nj j jij jij ijij jij i ie B fG e f B eG f Q 1)0()0()0()0()0()0()0(;);(2)0(2)0(2)0(iiif e U)0.142.90.036.2(0.0)0.042.90.136.2(0.1)0(1P)0.171.40.018.1(0.0)0.071.40.118.1(0.1 )0.171.40.018.1(0.0)0.071.40.118.1(0.1 0.0 ;)0.142.90.036.2(0.1)0.042.90.136.2(0.0)0(1Q)0.171.40.018.1(0.1)0.071.40.118.1(0.0 )0.171.40.018.1(0.1)0.071.40.118.1(0.0 0.0 ;)0.171.40.018.1(0.0)0.071.40.118.1(0.1)0(2P)0.171.40.018.1(0.0)0.071.40.118.1(0.1 )0.00.00.00.0(0.0)0.10.00.10.0(0.1 0.0 ;101)(222)0(22)0(22)0(2f e U;于是:;)0()0(iiiP P P ;)0()0(iiiQQ Q);(2)0(2)0(22)0(iiiif e UU5.00.05.0)0(11)0(1P P P ;35.00.035.0)0(11)0(1QQ Q;4.00.04.0)0(22)0(2P P P ;1025.0)01(05.1)(2222)0(22)0(2222)0(2f e UU3)计算雅可比矩阵中各元素雅可比矩阵的各个元素分别为:3ji ij ji ij j i ij j i ij ji ij j i ij e U S f U R e Q L f Q J e P N f P H 22;;; 又: nj j jij jij i jij jij i ieB fG f fB eG e P1)0()0()0()0()0()0()0(; nj j jij jij ijij jij iieB fG e fB eG f Q 1)0()0()0()0()0()0()0(;);(2)0(2)0(2)0(iiif e U)0(1P )0(111)0(111)0(1)0(111)0(111)0(1e Bf G f f B e G e)0(212)0(212)0(1)0(212)0(212)0(1e B fG f f B e G e313313)0(1313313)0(1e Bf G f f B e G e ;)()()0(111)0(111)0(1)0(111)0(111)0(1)0(1e Bf Ge f B e G f Q)()()0(212)0(212)0(1)0(212)0(212)0(1e Bf G e f B e G f)()(313313)0(1313313)0(1e Bf G e f B e G f;)0(2P )0(121)0(121)0(2)0(121)0(121)0(2e Bf G f f B e G e)0(222)0(222)0(2)0(222)0(222)0(2eB fG f fBeG e323323)0(2323323)0(2e Bf G f f B e G e ;)(2)0(22)0(22)0(2f e U42.90.171.40.171.4313)0(212)0(1)0(1)0(11e B e Bf P H ; 36.20.118.10.118.10.136.222313)0(212)0(111)0(1)0(1)0(11 e G e G e G e P N 36.20.118.10.118.1313)0(212)0(1)0(1)0(11 e G e G f Q J442.90.171.40.171.40.142.922313)0(212)0(111)0(1)0(1)0(11 e B e B e B e Q L 71.40.171.4)0(112)0(2)0(1)0(12 e B f P H ; 18.10.118.1)0(112)0(2)0(1)0(12 e G e P N ; 18.10.118.1)0(112)0(2)0(1)0(12 e G f Q J ;71.40.171.4)0(112)0(2)0(1)0(12 e B e Q L ; 71.40.171.4)0(221)0(1)0(2)0(21 e B f P H ; 11.40.111.4)0(221)0(1)0(2)0(21 e G e P N ; 0)0(12)0(2)0(21 f U R ; 0)0(12)0(2)0(21 e U S ; 71.40.10.00.171.4323)0(121)0(2)0(2)0(22 e B e B f P H ; 18.10.10.00.118.10.118.122323)0(121)0(222)0(2)0(2)0(22 e G e G e G e P N ;02)0(2)0(22)0(2)0(22 f f U R ; 0.20.122)0(2)0(22)0(2)0(22 e e U S ; 得到K=0时的雅可比矩阵:0.200018.171.418.171.471.418.142.936.218.171.436.242.9)0(J4)建立修正方程组:5)0(2)0(2)0(1)0(10.200011.4959.1011.4959.10959.1011.4918.2122.811.4959.1022.8918.210975.04.035.08.0e f e f 解得:04875.001828.00504.00176.0)0(2)0(2)0(1)0(1e f e f 因为 )0()0()1(iiie e e ; )0()0()1(iiif f f ;所以 9782.00218.00.1)0(1)0(1)1(1e e e ; 0158.00158.00)0(1)0(1)1(1f f f ;05125.105125.00.1)0(2)0(2)1(2e e e ;05085.005085.00)0(2)0(2)1(2f f f ;5)运用各节点电压的新值进行下一次迭代:即取: 0158.09782.0)1(1)1(1)1(1j jf e U05085.005125.1)1(2)1(2)1(2j jf e U节点3时平衡节点,保持000.0000.1333j jf e U为定值。
计算方法实验上机报告(完整版)
简单迭代法#include<stdio.h>#include<math.h>#define x0 3.0#define MAXREPT 1000#define EPS 1E-6#define G(x) pow(12*x+sin(x)-1,1.0/3)void main(){int i;double x_k=x0,x_k1=x0;printf("k\txk\n");for(i=0;i<MAXREPT;i++){printf("%d\t%g\n",i,x_k1);x_k1=G(x_k);if (fabs(x_k1-x_k)<EPS){printf("THE ROOT IS x=%g,k=%d\n",x_k1,i);return;}x_k=x_k1;}printf("AFTER %d repeate,no solved.\n",MAXREPT);}结果牛顿迭代法一#include<stdio.h>#include<math.h>#define x0 3.0#define MAXREPT 1000#define EPS 1E-6#define G(x) x-(pow(x,3)-sin(x)-12*x+1)/(3*pow(x,2)-cos(x)-12) void main(){int i;double x_k=x0,x_k1=x0;printf("k\txk\n");for(i=0;i<MAXREPT;i++){printf("%d\t%g\n",i,x_k1);x_k1=G(x_k);if (fabs(x_k1-x_k)<EPS){printf("THE ROOT IS x=%g,k=%d\n",x_k1,i);return;}x_k=x_k1;}printf("AFTER %d repeate,no solved.\n",MAXREPT);}结果埃特金加速法#include<stdio.h>#include<math.h>#define x0 3.0#define MAXREPT 1000#define EPS 1E-6#define G(x) (pow(x,3)-sin(x)+1)/12void main(){int i;double x1=x0,x2=x0;double z,y;printf("k\tx1\tx2\txk\n");for(i=0;i<MAXREPT;i++){if(i==0)printf("%d\t\t\t%g\n",i,x2);elseprintf("%d\t%g\t%g\t%g\n",i,y,z,x2);y=G(x1);z=G(y);x2=z-((z-y)*(z-y))/(z-2*y+x1);if (fabs(x2-x1)<EPS){printf("THE ROOT IS x=%g,k=%d\n",x2,i);return;}x1=x2;}printf("AFTER %d repeate,no solved.\n",MAXREPT);} 结果牛顿迭代法二#include<stdio.h>#include<math.h>#define x0 1.5#define MAXREPT 1000#define EPS 1E-6#define G(x) x-(pow(x,3)+pow(x,2)-3*x-3)/(3*pow(x,2)+2*x-3) void main(){int i;double x_k=x0,x_k1=x0;printf("k\txk\n");for(i=0;i<MAXREPT;i++){printf("%d\t%g\n",i,x_k1);x_k1=G(x_k);if (fabs(x_k1-x_k)<EPS){printf("THE ROOT IS x=%g,k=%d\n",x_k1,i);return;}x_k=x_k1;}printf("AFTER %d repeate,no solved.\n",MAXREPT);}结果弦截法#include<stdio.h>#include<math.h>#define x0 0#define x1 1.5#define MAXREPT 1000#define EPS 1E-6#define G(x) pow(x,3)+pow(x,2)-3*x-3void main(){int i;double x_k=x0,x_k1=x1,x_k2=0;double y,z;printf("k\txk\n");for(i=0;i<MAXREPT;i++){printf("%d\t%g\n",i,x_k2);y=G(x_k);z=G(x_k1);x_k2=x_k1-(z*(x_k1-x_k))/(z-y);if (fabs(x_k2-x_k1)<EPS){printf("THE ROOT IS x=%g,k=%d\n",x_k2,i);return;}x_k=x_k1;x_k1=x_k2;}printf("AFTER %d repeate,no solved.\n",MAXREPT); } 结果高斯顺序消元法#include<stdio.h>#include<math.h>#define N 4static double aa[N][N+1]={{2,4,0,1,1},{3,8,2,2,3},{1,3,3,0,6},{2,5,2,2,3}}; int gauss(double a[][N+2],double x[]);void putout(double a[][N+2]);void main(){int i,j,det;double a[N+1][N+2],x[N+1];for(i=1;i<=N;i++)for(j=1;j<=N+1;j++)a[i][j]=aa[i-1][j-1];det=gauss(a,x);if(det!=0)for(i=1;i<=N;i++)printf(" x[%d]=%g",i,x[i]);printf("\n");}int gauss(double a[][N+2],double x[]){int i,j,k;double c;putout(a);for(k=1;k<=N-1;k++){ if(fabs(a[k][k])<1e-17){printf("\n pivot element is 0.fail!\n");return 0;}for(i=k+1;i<=N;i++){c=a[i][k]/a[k][k];for(j=k;j<=N+1;j++){a[i][j]=a[i][j]-c*a[k][j];}}putout(a);}if(fabs(a[N][N])<1e-17){printf("\n pivot element is 0.fail!\n");return 0;}for(k=N;k>=1;k--){x[k]=a[k][N+1];for(j=k+1;j<=N;j++){x[k]=x[k]-a[k][j]*x[j];}x[k]=x[k]/a[k][k];}return(1);}void putout(double a[][N+2]){for(int i=1;i<=N;i++){for(int j=1;j<=N+1;j++)printf("%-15g",a[i][j]);printf("\n");}printf("\n");}结果雅克比迭代法#include<stdio.h>#include<math.h>#define N 5#define EPS 0.5e-4static double aa[N][N]={{4,-1,0,-1,0},{-1,4,-1,0,-1},{0,-1,4,-1,0},{-1,0,-1,4,-1},{0,-1,0,-1,4}}; static double bb[N]={2,1,2,1,2};void main(){int i,j,k,NO;double a[N+1][N+1],b[N+1],x[N+1],y[N+1];double d,sum,max;for(i=1;i<=N;i++){for(j=1;j<=N;j++)a[i][j]=aa[i-1][j-1];b[i]=bb[i-1];}printf("\n 请输入最大迭代次数(尽量取大值!)NO:");scanf("%d",&NO);printf("\n");for(i=1;i<=N;i++)x[i]=0;k=0;printf(" k",' ');for(i=1;i<=N;i++)printf("%8cx[%d]",' ',i);printf("\n 0");for(i=1;i<=N;i++)printf("%12.8g",x[i]);printf("\n");do{for(i=1;i<=N;i++){sum=0.0;for(j=1;j<=N;j++)if(j!=i) sum=sum+a[i][j]*x[j];y[i]=(-sum+b[i])/a[i][i];}max=0.0;for(i=0;i<=N;i++){d=fabs(y[i]-x[i]);if(max<d) max=d;x[i]=y[i];}printf("%6d",k+1);for(i=1;i<=N;i++)printf("%12.8g",x[i]);printf("\n");k++;}while((max>=EPS)&&(k<NO));printf("\nk=%d\n",k);if(k>=NO) printf("\nfail!\n");elsefor(i=1;i<=N;i++)printf("x[%d]=%g\t",i,x[i]);}结果拉格朗日插值多项式#include<stdio.h>#include<math.h>#define N 4doublex[N]={0.56160,0.56280,0.56401,0.56521},y[N]={0.82741,0.82659,0.82577,0.82495}; void main(){double x=0.5635;double L(double xx);double lagBasis(int k,double xx);void output();output();printf("\n近似值L(%g)=%g\n",x,L(x));}double lagBasis(int k,double xx){double lb=1;int i;for(i=0;i<N;i++)if(i!=k) lb*=(xx-x[i])/(x[k]-x[i]);return lb;}double L(double xx){double s=0;int i;for(i=0;i<=N;i++)s+=lagBasis(i,xx)*y[i];return s;}void output(){int i;printf("\n各节点信息:\nxi:");for(i=0;i<N;i++)printf("\t%g",x[i]);printf("\nyi:");for(i=0;i<N;i++)printf("\t%g",y[i]);}结果牛顿插值多项式#include <math.h>#include <stdio.h>int a;#define M 4double x[M+1]={0.4,0.55,0.65,0.8,0.9},y[M+1]={0.41075,0.57815,0.69675,0.88811,1.02652}; void main(){double x;printf("输入x=");scanf("%lf",&x);printf("次数:");scanf("%d",&a);double N(double xx,int a);void output();output();printf("\n%d次牛顿插值多项式N(%g)=%g\n",a,x,N(x,a));}double N(double xx,int a){double s=y[0],d=1;int i,j;double df[M+1][M+1];for(i=0;i<=M;i++)df[i][0]=y[i];for(j=1;j<=a;j++)for(i=j;i<=a;i++)df[i][j]=(df[i][j-1]-df[i-1][j-1])/(x[i]-x[i-j]);printf("\nx\tf(x)\t");for(j=1;j<=a;j++) printf("%5d阶",j);for(i=0;i<=a;i++){printf("\n%g\t%g",x[i],y[i]);for(j=1;j<=i;j++)printf("\t%7.5g",df[i][j]);}for(i=1;i<=a;i++){d*=(xx-x[i-1]);s+=df[i][i]*d;}return s;}void output(){int i;printf("\n各节点信息:\nxi:");for(i=0;i<=M;i++)printf("\t%7g",x[i]);printf("\nyi:");for(i=0;i<=M;i++)printf("\t%7g",y[i]);}结果复合梯形公式#include<stdio.h>#include<math.h>#define f(x) 1/(x*x+1)#define Pi 3.1415926void main(){double a=0,b=1;double T,h,x;int n,i;printf("please input n:");scanf("%d",&n);h=(b-a)/n;x=a;T=0;for(i=1;i<n;i++){x+=h;T+=f(x);}T=(f(a)+2*T+f(b))*h/2;printf("T(%d)=%g\n",n,T);printf("The exact value is %g\n",Pi/4);}复合辛普森公式#include<stdio.h>#include<math.h>#define f(x) 1/(1+x*x)#define Pi 3.1415926void main(){double a=0,b=1;double S,h,x;int n,i;printf("please input Even n:");scanf("%d",&n);h=(b-a)/n;x=a; S=0;for(i=1;i<n;i++){x+=h;if(i%2==0) S+=2*f(x);else S+=4*f(x);}S=(f(a)+S+f(b))*h/3;printf("S(%d)=%g\n",n,S);printf("The exact value is %g\n",Pi/4);}龙贝格公式加速#include<stdio.h>#include<math.h>#define f(x) sin(x)/(1+x)#define M 3void main(){double a=0,b=1;double Long(double a,double b);printf("近似值I=%g\n",Long(a,b));}double Long(double a,double b){int n=1,i=1,j=1;double T[M+1][M+1],h,x,sum;h=b-a;T[0][0]=(f(a)+f(b))/2;for(j=1;j<=3;j++){x=a;h/=2;n*=2;sum=0;for(i=1;i<=n;i+=2){x=a+i*h;sum+=f(x);}T[j][0]=T[j-1][0]/2+h*sum;}for(i=1;i<=M;i++)for(j=1;j<=i;j++){T[i][j]=(pow(4,j)*T[i][j-1]-T[i-1][j-1])/(pow(4,j)-1);}printf("k\tT0\tT1\tT2\tT3\n");for(i=0;i<=M;i++){printf("%d",i);for(j=0;j<=i;j++)printf(" %g",T[i][j]);printf("\n");}return T[M][M];}。
会计上机实验报告[修改版]
第一篇:会计上机实验报告会计模拟实验报告姓名:赵波班级:工商101班学号:101565指导教师:岳殿民实验目的会计综合模拟实验是在学生掌握了一定的专业理论知识的基础上,以某个单位在一定时期内发生的实际经济业务资料作为模拟实验对象,采用直观的、逼真的实验材料和道具,包括原始凭证、记账凭证、会计账簿、报表及其他会计实验用具等,让学生在仿真的环境中增强实际操作能力和动手能力。
通过这次实验,使得学生较系统地练习企业会计核算的基本程序和具体方法,加强学生对所学专业理论知识的理解、实际操作的动手能力,提高运用会计基本技能的水平,也是对学生所学专业知识的一个检验。
实验公司简介我们本次模拟的企业原型是广东立竣机床股份有限公司。
它是原广东省机械厅直属的生产各种机床的大型国有企业,于1995 年改制成为股份有限公司,并于1999 年在上海证券交易所挂牌交易。
她位于广州市海珠区新港西路888 号, 占地10 余公顷,注册资本为6000 万元人民币。
该公司设有铸造、加工和装配三个基本生产车间,主要从事立竣一号机床和立竣二号机床的生产。
另设有供气和机修两个辅助生产车间,主要从事蒸汽生产和机器设备维修。
实验的内容及过程一、模拟实验准备阶段在模拟实验开始前,要全面了解模拟企业的概况,如,企业名称和性质,生产工艺概况,会计政策及核算要求等。
同时要了解模拟企业会计工作组织,如,机构设置,财务人员分工,会计规范要求等。
二、模拟实习操作阶段以企业的实际经济业务为实训资料,运用会计工作中的证、账等对会计核算的各步骤进行系统操作实验,包括账薄建立和月初余额的填制、原始凭证、记账凭证的审核和填制,各种账薄的登记、对账、结账等。
实验为我们呈现了一个生产该厂可能涉及的各种基本业务,其各项凭证、账簿以及会计处理程序,按照该厂会计制度要求,具体的步骤如下:1、会计凭证的编制记账凭证的填写要注意记账凭证的名称、编号、日期、有关经济业务内容摘要、有关账户的名称(包括总账、明细分类账)方向和金额、有关原始凭证张数和其他有关资料份数、有关人员的签名或盖章。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算方法B 上机报告第1题某通信公司在一次施工中,需要在水面宽度为20米的河沟底部沿直线走向铺设一条沟底光缆。
在铺设光缆之前需要对沟底的地形进行初步探测,从而估计所需光缆的长度,为工程预算提供依据。
已探测到一组等分点位置的深度数据(单位:米)如下表所示:(1)请用合适的曲线拟合所测数据点;(2)估算所需光缆长度的近似值,并作出铺设河底光缆的曲线图; 问题分析和算法思想:本题的主要目的是对21个测量数据进行拟合,同时对拟合曲线进行线积分即可得到河底光缆长度的近似值,可以用的插值方法很多:多项式插值、Lagrange 插值、Newton 插值、三次样条插值等。
由于数值点较多时,采用高次多项式插值将产生很大的误差,用拉格朗日插值多项式会出现龙格现象。
故为了将所有的数据点都用上,且题中光缆为柔性,可光滑铺设于水底,鉴于此特性,采用三次样条插值的方法较为合适。
计算光缆长度近似值,只需将每两点之间的距离算出,然后依次相加,所得的折线长度,即为光缆长度的近似值。
光缆长度计算公式:191k kk l +===∑⎰⎰⎰算法结构:三次样条算法结构见《计算方法教程》P110。
源程序: clear;clc; x=0:20;y=[9.01 8.96 7.96 7.97 8.02 9.05 10.13 11.18 12.26 13.28 13.32 12.61 11.29 10.22 9.15 7.90 7.95 8.86 9.81 10.80 10.93];d=y;plot(x,y,'k.','markersize',15)hold on%%%计算二阶差商for k=1:2for i=21:-1:(k+1)d(i)=(d(i)-d(i-1))/(x(i)-x(i-k));endend%%%假定d的边界条件,采用自然三次样条for i=2:20d(i)=6*d(i+1);endd(1)=0;d(21)=0;%%%追赶法求解带状矩阵的m值a=0.5*ones(1,21);b=2*ones(1,21);c=0.5*ones(1,21);a(1)=0;c(21)=0;u=ones(1,21);u(1)=b(1);r=c;yy(1)=d(1);%%%追的过程for k=2:21l(k)=a(k)/u(k-1);u(k)=b(k)-l(k)*r(k-1);yy(k)=d(k)-l(k)*yy(k-1);end%%%赶的过程m(21)=yy(21)/u(21);for k=20:-1:1m(k)=(yy(k)-r(k)*m(k+1))/u(k);end%%%利用插值点画出拟合曲线k=1;nn=100;xx=linspace(0,20,nn);l=0;for j=1:nnfor i=2:20if xx(j)<=x(i)k=i;break; elsek=i+1; end end h=1;xbar=x(k)-xx(j); xmao=xx(j)-x(k-1);s(j)=(m(k-1)*xbar^3/6+m(k)*xmao^3/6+(y(k-1)-m(k-1)*h^2/6)*xbar+(y(k)-m(k)*h^2/6)*xmao)/h;sp(j)=-m(k-1)*(x(k)-xx(j))^2/(2*h)+m(k)*(xx(j)-x(k-1))^2/(2*h)+(y(k)-y(k-1))/h-(m(k)-m(k-1))*h/6;l(j+1)=(1+sp(j)^2)^0.5*(20/nn)+l(j);%利用第一类线积分求河底光缆的长度 end %%%绘图title('光缆插值曲线') xlabel('分点') ylabel('深度')plot(xx,s,'r-','linewidth',1.5) griddisp(['所需光缆长度为',num2str(l(nn+1)),'米']) 运行结果:光缆插值曲线分点深度第2题假定某天的气温变化记录如下表所示,试用数据拟合的方法找出这一天的气温变化的规律;试计算这一天的平均气温,并试估计误差。
问题分析及算法思路:由于题中所给数据点有25个,此时采用多项式插值的方法做数据近似需要用较高次的多项式,这不仅给计算带来困难,而且有余项带来的误差很大;若采用样条插值计算量虽然不大,但是参数的个数很多,而且没有一个统一的数学公式来表示,对计算带来了很大的麻烦。
所以可考虑使用最小二乘法进行拟合。
在本题中,采用最小二乘法找出这一天的气温变化的规律,依次使用二次函数、三次函数以及四次函数进行拟合,计算其相应的系数,估算误差,并作图比较三个函数之间的区别。
算法结构:最小二乘法算法结构见《计算方法教程》P123。
源程序:x=0:24;y=[15 14 14 14 14 15 16 18 20 20 23 25 28 31 34 31 29 27 25 24 22 20 18 17 16];m=length(x);n=input('请输入函数的次数 ');plot(x,y,'k.',x,y,'-')grid;hold on;n=n+1;G=zeros(m,n+1);G(:,n+1)=y';c=zeros(1,n); %建立c来存放σq=0;f=0;b=zeros(1,m); %建立b用来存放β%%%形成矩阵Gfor j=1:nfor i=1:mG(i,j)=x(1,i)^(j-1);endend%%%建立矩阵Qkfor k=1:nfor i=k:mc(k)=G(i,k)^2+c(k);endc(k)=-sign(G(k,k))*(c(k)^0.5);w(k)=G(k,k)-c(k); %建立w来存放ωfor j=k+1:mw(j)=G(j,k);endb(k)=c(k)*w(k);%%%变换矩阵Gk-1到GkG(k,k)=c(k);for j=k+1:n+1q=0;for i=k:mq=w(i)*G(i,j)+q;ends=q/b(k);for i=k:mG(i,j)=s*w(i)+G(i,j);endendend%%%求解三角方程 Rx=h1a(n)=G(n,n+1)/G(n,n);for i=n-1:(-1):1for j=i+1:nf=G(i,j)*a(j)+f;enda(i)=(G(i,n+1)-f)/G(i,i); % %%a(i)存放各级系数 f=0;end%%%拟合后的回代过程p=zeros(1,m);for j=1:mfor i=1:np(j)=p(j)+a(i)*x(j)^(i-1);endendplot(x,p,'r*',x,p,'-');E2=0;%用E2来存放误差%%%误差求解for i=n+1:mE2=G(i,n+1)^2+E2;endE2=E2^0.5;disp('误差为');disp(E2);t=0for i=1:mt=t+p(i);endt=t/m; %%%平均温度disp(['平均温度为',num2str(t),'℃'])运行结果:二次函数时,系数a0=8.3063,a1=2.6064,a2=-0.0938,误差为16.7433,平均温度为21.2℃。
函数形式为:2 ()8.3063 2.60640.0938 p x x x =+-三次函数时,系数a0=13.3880,a1=-0.2273,a2=0.2075,a3=-0.0084,误差为11.4482,平均温度为21.2℃。
函数形式:23 ()13.38800.22730.20750.0084 p x x x x =-+-四次函数时,系数a0=16.7939,a1=-3.7050,a2=0.8909,a3=-0.0532,a4=0.0009,误差为7.6838,平均温度为21.2℃。
函数形式为:234 ()16.7939 3.70500.89090.05320.0009 p x x x x x =-+-+第3题已知非线性方程)sincos(1=⎰πθθπdx在[2,3]中有根。
请设计算法,求出该根,并使求出的根的误差不超过410-。
问题分析以及算法思路:本题采用复化梯形求积公式计算方程根,可令()1()cos sinf x x dπθθπ=⎰。
算法结构:牛顿迭代法算法结构见《计算方法教程》P196。
源程序:clear;clc;x0=2; %设置求解区间x1=3;n=20; %复化梯形求积公式的步数e=0.0004;f0=T3Sub(x0,n);f1=T3Sub(x1,n);if (f0*f1)>0 %判断在区间是否有error('No answer,because f0*f1>0');endfor i=1:201x=(x0+x1)/2;if abs(x1-x)<e %判断解是否符合误差disp(['方程的解',num2str(x)]);disp(['迭代步数',num2str(i)]);disp(['误差',num2str(abs(x1-x))]); break;endf=T3Sub(x,n);if (f*f0)<0x1=x;f1=f;elsex0=x;f0=f;endendfunction [f]=T3Sub(x,n)%复化梯形求积公式h=pi/n;f=0;for i=1:nu=i*h;f=f+cos(x*sin(u-h))+cos(x*sin(u));endf=(h*f)/(2*pi);end运行结果:第4题线性方程组求解(1)编写程序实现大规模方程组的高斯消去法程序,并对所附的方程组进行求解。
所附方程组的类型为对角占优的带状方程组。
(2)针对本专业中所碰到的实际问题,提炼一个使用方程组进行求解的例子,并对求解过程进行分析、求解。
算法思想:高斯消去法是利用现行方程组初等变换中的一种变换,将一个不为零的数乘到一个方程后加到另一个方程,使方程组变成同解的上三角方程组,然后再自下而上对上三角方程组求解。
算法结构:1.读取二进制文件,存入计算矩阵2.对矩阵进行初等变换,然后求解(计算方法教程高斯消去法及列主元高斯消去法算法)源代码:clear;clc;%% 读取系数矩阵[f,p]=uigetfile('*.dat','选择数据文件'); %读取数据文件num=5; %输入系数矩阵文件头的个数name=strcat(p,f);file=fopen(name,'r');head=fread(file,num,'uint'); %读取二进制头文件id=dec2hex(head(1)); %读取标识符fprintf('文件标识符为:');idver=dec2hex(head(2)); %读取版本号fprintf('文件版本号为:');vern=head(3); %读取阶数fprintf('矩阵A的阶数:');nq=head(4); %上带宽fprintf('矩阵A的上带宽:');qp=head(5); %下带宽fprintf('矩阵A的下带宽:');pdist=4*num;fseek(file,dist,'bof'); %把句柄值转向第六个元素开头处[A,count]=fread(file,inf,'float'); %读取二进制文件,获取系数矩阵fclose(file); %关闭二进制头文件%% 对非压缩带状矩阵进行求解if ver=='102',a=zeros(n,n);for i=1:n,for j=1:n,a(i,j)=A((i-1)*n+j); %求系数矩阵a(i,j)endendb=zeros(n,1);for i=1:n,b(i)=A(n*n+i);endfor k=1:n-1, %列主元高斯消去法m=k;for i=k+1:n, %寻找主元if abs(a(m,k))<abs(a(i,k))m=i;endendif a(m,k)==0 %遇到条件终止disp('错误!')returnendfor j=1:n, %交换元素位置得主元t=a(k,j);a(k,j)=a(m,j);a(m,j)=t;t=b(k);b(k)=b(m);b(m)=t;endfor i=k+1:n, %计算l(i,k)并将其放到a(i,k)中a(i,k)=a(i,k)/a(k,k);for j=k+1:na(i,j)=a(i,j)-a(i,k)*a(k,j);endb(i)=b(i)-a(i,k)*b(k);endendx=zeros(n,1); %回代过程x(n)=b(n)/a(n,n);for k=n-1:-1:1,x(k)=(b(k)-sum(a(k,k+1:n)*x(k+1:n)))/a(k,k);endend%% 对压缩带状矩阵进行求解if ver=='202', %高斯消去法m=p+q+1;a=zeros(n,m);for i=1:1:nfor j=1:1:ma(i,j)=A((i-1)*m+j);endendb=zeros(n,1);for i=1:1:nb(i)=A(n*m+i); %求b(i)endfor k=1:1:(n-1) %开始消去if a(k,(p+1))==0disp('错误!');break;endst1=n;if (k+p)<nst1=k+p;endfor i=(k+1):1:st1a(i,(k+p-i+1))=a(i,(k+p-i+1))/a(k,(p+1)); for j=(k+1):1:(k+q)a(i,j+p-i+1)=a(i,j+p-i+1)-a(i,k+p-i+1)*a(k,j+p-k+1);endb(i)=b(i)-a(i,k+p-i+1)*b(k);endendx=zeros(n,1); %回代x(n)=b(n)/a(n,p+1);sum=0;for k=(n-1):-1:1sum=b(k);st2=n;if (k+q)<nst2=k+q;endfor j=(k+1):1:st2sum=sum-a(k,j+p-k+1)*x(j);endx(k)=sum/a(k,p+1);sum=0;endenddisp('方程组的的解为:') %输出解disp(x)运行结果:首先是对测试文件dat20171/ dat20172的求解结果,具体如下:经过测试矩阵的初步测试,利用程序对接下来的两个数据文件进行处理,由于dat20173/ dat20174解的个数较多,在这里只截取不分解作为示意,具体求解如下:本专业算例一底边绝热的形导热物体,无热源,其余三边温度如下,求解该形节点1、2、3、4的温度。