计算方法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. 提交实验报告时应按要求进行格式排版,并正确命名文件。
- 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的温度。