西安交通大学计算方法B大作业
- 格式:doc
- 大小:246.00 KB
- 文档页数:27
并行计算与程序设计作业班级:姓名:学号:1.1至1.3节作业1.调试课件中的所有程序,并完成作业,同时在程序结果中需要输出个人信息;代码:Program mainwrite(*,*)'班级:', 'write(*,*)'姓名:',' 'print *,'学号:',''end2.编写一个数值求解方程的程序,方程为4.1x3 −5.3x=11.8,求解区间为(1,5),误差小于1e-6。
代码:a=1b=5if(f(a)*f(b).LT.0) thenwrite(*,*)'inter:(',a,',',b,')'Loop1: do while((abs(f(a)-f(b)).gt.10e-6).and.$ (abs(a-b).gt.10e-6))c=(a+b)/2if(f(a)*f(c).le.0)thenb=celsea=cend ifend do Loop1write(*,*)'x=',celsewrite(*,*)'Please input real interval'end ifendreal function f(x)f=4.1*x**3-5.3*x-11.8end结果:1.4节作业1.采样简单离散求和法求下面积分值:∫x2sin(x)+1dx 1代码:read(*,*) a,b,nh=(b-a)/(2.0*n)s=0.0x=a+hf2=0.0f4=0.0loop1: do i=1,n-1x=x+hf2=f2+f(x)x=x+hf4=f4+f(x)end do loop1s=h/3.0*(f(a)+f(b)+4.0*f4+2.0*f2)write(*,150) s100 format(1x,'a=',f8.2,2x,'b=',f8.2,$ 2x,'n=',i4)150 format(1x,'s=',f16.7)endreal function f(x)f=x**2/(sin(x)+1)endd ouble precision i,ai,ydouble precision sum=0i=1do 10 while(1/sum=1/i+sumi=i+110 continuewrite(*,*) 'sum=',sumend结果:1.6节作业1.调试课本中的所有程序;(结果略)2.用双精度型数据计算:∑1i=11+12+13+⋯+1nni=1直到1n≤10−5代码:double precision sum=0i=1do 10 while(1/sum=1/i+sumi=i+110 continuewrite(*,*) 'sum=',sumend结果:3.已知三角形三个顶点的坐标分别为A(1.5,2.5),B(-2.5,1), C(1,-1),采用复型数据类型求三角形的面积和重心。
课程设计课程名称:数值计算B设计题目:数值计算B大作业学号:姓名:完成时间:题目一:多项式插值某气象观测站在8:00(AM )开始每隔10分钟对天气作如下观测,用三次多项式插值函数(Newton)逼近如下曲线,插值节点数据如上表,并求出9点30分该地区的温度(x=10).二、数学原理假设有n+1个不同的节点及函数在节点上的值(x 0,y 0),……(x n ,y n ),插值多项式有如下形式:)())(()()()(n 10n 102010n x -x )(x -x x -x x P x x x x x x -⋯⋯-+⋯⋯+-++=αααα (1) 其中系数i α(i=0,1,2……n )为特定系数,可由插值样条i i n y x P =)((i=0,1,2……n)确定. 根据均差的定义,把x 看成[a ,b ]上的一点,可得f(x)= f (0x )+f[10x x ,](0x -x )f[x, 0x ]= f[10x x ,]+f [x ,10x x ,] (1x -x )……f [x, 0x ,…x 1-n ]= f[x , 0x ,…x n ]+ f [x, 0x ,…x n ](x —x n )综合以上式子,把后一式代入前一式,可得到:f(x )= f [0x ]+f[10x x ,](0x -x )+ f [210x x x ,,](0x -x )(1x -x )+…+ f [x, 0x ,…x n ](0x -x )…(x —x 1-n )+ f [x, 0x ,…x n ,x ])(x 1n +ω= N n (x )+)(x n R 其中N n (x )= f[0x ]+f[10x x ,](0x -x )+ f[210x x x ,,](0x -x )(1x -x )+…+ f[x , 0x ,…x n ](0x -x )…(x —x 1-n ) (2))(x n R = f(x )— N n (x )= f [x , 0x ,…x n ,x ])(x 1n +ω (3) )(x 1n +ω=(0x -x )…(x —x n ) Newton 插值的系数i α(i=0,1,2……n )可以用差商表示。
习题参考答案习题一1.第一代计算机的主要部件是由(电子管和继电器)构成的。
2.未来全新的计算机技术主要指(光子计算机),(生物计算机)和(量子计算机)。
3.按照Flynn分类法,计算机可以分为(单指令流单数据流),(单指令流多数据),(多指令流单数据流)和(多指令流多数据流)4种类型。
4.计算机系统主要由(硬件系统)和(软件系统)组成。
5.说明以下计算机中的部件是属于主机系统、软件系统、还是属于外部设备。
(1)CPU (主机系统)(2)内存条(主机系统)(3)网卡(主机系统)(4)键盘和鼠标(外设)(5)显示器(外设)(6)Windows操作系统(软件系统)6.控制芯片组是主板的的核心部件,它由(北桥芯片)部分和(南桥芯片)部分组成。
7.在计算机系统中设计Cache的主要目的是(提高存去速度)。
8.计算机各部件传输信息的公共通路称为总线,一次传输信息的位数称为总线的(宽度)。
9.PCIE属于(系统)总线标准,而SATA则属于(硬盘接口或外设)标准。
10.在微机输入输出控制系统中,若控制的外部设备是发光二极管,最好选用的输入输出方法是(程序控制)方式;若控制的对象是高速设备,则应选则(DMA)控制方式。
11.操作系统的基本功能包括(处理器管理或进程管理)、(文件管理)、(存储器管理)、(设备管理)和用户接口。
12.虚拟存储器由(主内存)和(磁盘)构成,由操作系统进行管理。
13.CPU从外部设备输入数据需要通过(输入接口),向外设输出数据则需要通过(输出接口)。
14.简述CPU从外部设备输入数据和向外设输出数据的过程。
请参见教材第18页关于输入输出过程的描述。
15.普适计算的主要特点是(是一种无处不在的计算模式)。
习题二1.在计算机内,一切信息的存取、传输和处理都是以(二进制码)形式进行的。
2.在微机中,信息的最小单位是(bit)。
3.在计算机中,1K字节表示的二进制位数是(1024×8bit)。
计算方法(B )上机作业一、三次样条拟合某通信公司在一次施工中,需要在水面宽度为20米的河沟底部沿直线走向铺设一条沟底光缆。
在铺设光缆之前需要对沟底的地形进行初步探测,从而估计所需光缆的长度,为工程预算提供依据。
已探测到一组等分点位置的深度数据(单位:米)如下表所示:(1)(2)估算所需光缆长度的近似值,并作出铺设河底光缆的曲线图; 解:1、算法实现的思想及依据题目(1)为曲线拟合问题多项式插值、分段插值和最小二乘法。
多项式插值,随着插值数据点的数目增多,误差也会随之增大,因此不选用。
最小二乘法适于数据点较多的场合,在此也不适用。
故选用分段插值。
分段插值又分为分段线性插值、分段二次插值、三次样条插值及更高阶的多项式插值。
由本题的物理背景知,光缆正常工作时各点应该是平滑过渡,因此至少选用三次样条插值法。
对于更高阶的多项式插值,由于“龙格现象”而不选用。
题目(2)求光缆长度,即求拟合曲线在0到20的长度,对弧长进行积分即可。
光缆长度的第一型线积分表达式为190k kk l +==∑⎰。
2、算法实现的结构参考教材给出的SPLINEM 算法和TTS 算法,在选定边界条件和选定插值点等距分布后,可以先将数据点的二阶差商求出来并赋值给右端向量d ,再根据TSS 解法求解M 。
光缆长度的第一型线积分表达式为190k kk l +==∑⎰。
3、程序运行结果及分析图1.1三种边界条件下三次样条插值图1.2光缆长度4、MATLAB代码:1)自己编程实现代码clear;clc;I=input('你想使用第几种边界条件?请输入1、2、3之一: ');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.8 10.93];plot(x,-y,'k.','markersize',15)%y为深度,取负号hold on%% 计算一阶差商y1=ones(1,21);for i=2:1:21y1(i)=(y(i)-y(i-1))/(x(i)-x(i-1));end%% 计算二阶差商y2=ones(1,21);for i=3:1:21y2(i)=(y1(i)-y1(i-1))/(x(i)-x(i-2));end%% 计算三阶差商y3=ones(1,21);for i=4:1:21y3(i)=(y2(i)-y2(i-1))/(x(i)-x(i-3));end%% 选择边界条件(I)if I==1d(1)=0;d(21)=0;a(21)=0;c(1)=0;% 第一个点和最后一个点的二阶差商为0 endif I==2d(1)=6*y1(1);d(21)=-6*y1(21);a(1)=1;c(1)=1;endif I==3d(1)=-12*y3(1);d(21)=-12*y3(21);a(21)=-2;c(1)=-2;%endfor i=2:20d(i)=6*y2(i+1);end%% 构造带状矩阵求解(追赶法)b=2*ones(1,21);a=0.5*ones(1,21);%a(21)=-2;c=0.5*ones(1,21);%c(1)=-2;u(1)=b(1);r(1)=c(1);%% 追yz(1)=d(1);for i=2:21l(i)=a(i)/u(i-1);u(i)=b(i)-l(i)*r(i-1);r(i)=c(i);yz(i)=d(i)-l(i)*yz(i-1);end%% 赶xg(21)=yz(21)/u(21);for i=20:-1:1xg(i)=(yz(i)-r(i)*xg(i+1))/u(i);endM=xg;%%所有点的二阶导数值%% 求函数表达式并积分t=1;h=1;N=1000x1=0:20/(N-1):20;length=0;for i=1:Nfor j=2:20if x1(i)<=x(j)t=j;break;elset=j+1;endendf1=x(t)-x1(i);f2=x1(i)-x(t-1);S(i)=(M(t-1)*f1^3/6/h+M(t)*f2^3/6/h+(y(t-1)-M(t-1)*h^2/6)*f1+(y(t)-M(t)*h^2/6)* f2)/h;Sp(i)=-M(t-1)*f1^2/2/h+M(t)*f2^2/2/h+(y(t)-y(t-1))/h-(M(t)-M(t-1))*h/6;length(i+1)=sqrt(1+Sp(i)^2)*(20/(N-1))+length(i);%第一类线积分endfigure(1);plot(x1,-S,'r-')%深度曲线griddisp(['第',num2str(I),'种边界条件下长度',num2str(length(N+1)),'米'])axis fill;xlabel('测点/米');ylabel('深度/米');title('三次样条曲线拟合');legend('数据点','拟合曲线',3);二、最小二乘近似假定某天的气温变化记录如下表所示,试用数据拟合的方法找出这一天的气温变化的规律;试计算这一天的平均气温,并试估计误差。
计算方法B上机报告姓名:学号:班级:学院:任课教师:2017年12月29日题目一:1.1题目内容某通信公司在一次施工中,需要在水面宽度为20米的河沟底部沿直线走向铺设一条沟底光缆。
在铺设光缆之前需要对沟底的地形进行初步探测,从而估计所需光缆的长度,为工程预算提供依据。
已探测到一组等分点位置的深度数据(单位:米)如下表所示:(1)请用合适的曲线拟合所测数据点;(2)估算所需光缆长度的近似值,并作出铺设河底光缆的曲线图;1.2实现题目的思想及算法依据首先在题目(1)中要实现的是数据的拟合,显然用到的是我们在第三章中数据近似的知识内容。
多项式插值时,这里有21个数据点,则是一个20次的多项式,但是多项式插值随着数据点的增多,会导致误差也会随之增大,插值结果会出现龙格现象,所以不适用于该题目中点数较多的情况。
为了避免结果出现大的误差,同时又希望尽可能多地使用所提供的数据点,提高数据点的有效使用率,这里选择分段插值方法进行数据拟合。
分段插值又可分为分段线性插值、分段二次插值和三次样条插值。
由于题目中所求光缆的现实意义,而前两者在节点处的光滑性较差,因此在这里选择使用三次样条插值。
根据课本SPLINEM算法和TSS算法,采用第三种真正的自然边界条件,在选定边界条件和选定插值点等距分布后,可以先将数据点的二阶差商求出并赋值给右端向量d,再根据TSS解法求解三对角线线性方程组从而解得M值。
求出M后,对区间进行加密,计算200个点以便于绘图以及光缆长度计算。
对于问题(2),使用以下的公式20f (x)2dxf'(x)2dx(x )ds1.3算法结构1. For i 0,1,2, , n12. x kelse i 1 kxx k1〜一〜h; x< x x; x x<13 x xh2h" 〜[M k 1 _ M k (y k 1 M k 1 )x (y k M k —)xVh y6 6 6 61.4 matlab 源程序n=20;x=O:n;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.229.15 7.90 7.95 8.86 9.81 10.80 10.93];M=y; %用于存放差商,此时为零阶差商h=zeros(1, n+1);c=zeros(1, n+1);d=zeros(1, n+1);a=zeros(1, n+1);b=2*o nes(1, n+1);h(2)=x(2)-x(1);for i=2:n %书本110 页算法SPLINEMh(i+1)=x(i+1)-x(i);c(i)=h(i+1)/(h(i)+h(i+1));a(i)=1-c(i);enda(n +1)=-2; %计算边界条件c(0),a(n+1),采用的是第三类边界条件c(1)=-2;for k=1:3 %计算k阶差商for i=n+1:-1:k+1M(i)=(M(i)-M(i-1))/(x(i)-x(i-k));endif(k==2) %计算2阶差商d(2:n)=6*M(3:n+1); %给 d 赋值endif(k==3)d(1)=(-12)*h(2)*M(4); %计算边界条件d(0),d(n),采用的是第三类边界条件d( n+1)=12*h( n+1)*M( n+1);endendl=zeros(1, n+1);r=zeros(1, n+1);u=zeros(1, n+1);q=zeros(1, n+1);u(1)=b(1);r(1)=c(1);q(1)=d(1);for k=2:n+1 %利用书本49页算法TSS求解三对角线性方程组r(k)=c(k);l(k)=a(k)/u(k-1);u(k)=b(k)-l(k)*r(k-1);q(k)=d(k)-l(k)*q(k-1);endp( n+1)=q( n+1)/u( n+1);for k=n :-1:1p(k)=(q(k)-r(k)*p(k+1))/u(k);endfprintf('三对角线性方程组的解为:');disp(p);%求拟合曲线x1=0:0.1:20; %首先对区间进行加密,增加插值点n1=10* n;x2=zeros(1, n1+1);x3=zeros(1, n1+1);s=zeros(1, n1+1);for i=1: n1+1for j=1: nif x1(i)>=x(j)&&x1(i)<=x(j+1) %利用书本111 页算法EVASPLINE 求解拟合曲线s(x)h(j+1)=x(j+1)-x(j);x2(i)=x(j+1)-x1(i);x3(i)=x1(i)-x(j);s(i)=(p(j).*(x2(i))A3/6+p( j+1).*(x3(i))A3/6+(y(j)-p(j).*((h(j+1))A2/6)).*x2(i)+…(y(j+1)-p(j+1).*(h(j+1))A2/6).*x3(i))/h(j+1);endendendplot(x,-y,'x') %画出插值点hold onplot(x1,-s) %画出三次样条插值拟合曲线hold ontitle('三次样条插值法拟合电缆曲线');xlabel('河流宽度/m');ylabel('河流深度/m');Len gth=0;for i=1: n1L=sqrt((x1(i+1)-x1(i))A2+(s(i+1)-s(i))A2); % 计算电缆长度Len gth=Le ngth+L;endfprintf('电缆长度(m)=');disp(Le ngth);图1. 1三次样条插值法拟合海底光缆曲线山舅 10 -0.70091,922& 0.8703 -山 24斫 0.3520 -0.9224 -1,8224电缆长 l(n)= 26.6656图1.2海底光缆长度结果铺设海底光缆的曲线如图1.1所示由上图可以看出,所得到的曲线光滑,能够较好得反映实际的河沟底部地势 形貌。
算法设计大作业寻找多数元素班级:021151学号:02115037姓名:隋伟哲(1)问题提出:令A[1,2,…n]是一个整数序列,A中的整数a如果在A中出现的次数多余⎣n/2⎦,那么a称为多数元素。
例如在序列1,3,2,3,3,4,3中,3是多数元素,因为在7个元素中它出现了四次。
有几个方法可以解决这个问题。
蛮力方法是把每个元素和其他各个元素比较,并且对每个元素计数,如果某个元素的计数大于⎣n/2⎦,就可以断定它是多数元素,否则在序列中就没有多数元素。
但这样比较的次数是n(n-1)/2=Θ(错误!未找到引用源。
),这种方法的代价太昂贵了。
比较有效的算法是对这些元素进行排序,并且计算每个元素在序列中出现了多少次。
这在最坏情况下的代价是Θ(n 错误!未找到引用源。
).因为在最坏情况下,排序这一步需要Ω(n 错误!未找到引用源。
)。
另外一种方法是寻找中间元素,就是第⎡n/2⎤元素,因为多数元素在排序的序列中一定是中间元素。
可以扫描这个序列来测试中间元素是否是多数元素。
由于中间元素可以在Θ(n)时间内找到,这个方法要花费Θ(n)时间。
有一个漂亮的求解方法,它比较的次数要少得多,我们用归纳法导出这个算法,这个算法的实质是基于下面的观察结论。
观察结论:在原序列中去除两个不同的元素后,原序列的多数元素在新序列中还是多数元素。
这个结论支持下述寻找多数元素候选者的过程。
将计数器置1,并令c=A[1]。
从A[2]开始逐个扫描元素,如果被扫描的元素和c相等。
则计数器加1,否则计数器减1.如果所有的元素都扫描完并且计数器的值大于0,那么返回c作为多数元素的候选者。
如果在c和A[j](1<j<n)比较式计数器为0,那么对A[j+1,…n]上的过程调用candidate过程。
算法的伪代码描述如下。
(2)算法Input: An array A[1…n] of n elements;Output: The majority element if it exists; otherwise none;1. c←candidate(1);2. count←0;3. for j←1 to n4. if A[j]=c then count←count+1;5. end for;6. if count>⎣n/2⎦ then return c;7. else return none;candidate(m)1. j←m; c←A[m]; count←1;2. while j<n and count>03. j←j+1;4. if A[j]=c then count←count+1;5. else count←count-1;6. end while;7. if j=n then return c;8. else return candidate(j+1);(3)代码//Majority.cpp#include<iostream>using namespace std;int Candidate(int *A, int n, int m);int Majority(int *A, int n);int main(){int n;cout << "please input the number of the array: ";cin >> n;int *A;A = (int *) malloc(n*sizeof(int) );cout << "please input the array: ";for (int i = 0; i < n; i++)cin >> A[i];if (Majority(A, n) != 'N')cout << "the majority is: " << Majority(A, n);elsecout << "the majority element do not exist! ";free(A);cin.get();cin.get();return 0;}int Majority(int *A, int n){int c = Candidate(A, n, 0), count = 0;for (int j = 0; j < n; j++)if (A[j] == c)count += 1;if (count > n / 2)return c;else return'N';}int Candidate(int *A, int n, int m){int j = m, c = A[m], count = 1;while (j < n && count>0){j += 1;if (A[j] == c)count += 1;else count -= 1;}if (j == n)return c;else return Candidate(A, n, j + 1); }(4)运行结果(5)设计实例首先输入数据的个数n=7,然后依次读入n个数(1,3,2,3,3,4,3)。
计算方法B上机报告姓名:学号:班级:学院:任课教师:2017年12月29日题目一:1.1题目内容某通信公司在一次施工中,需要在水面宽度为20米的河沟底部沿直线走向铺设一条沟底光缆。
在铺设光缆之前需要对沟底的地形进行初步探测,从而估计所需光缆的长度,为工程预算提供依据。
已探测到一组等分点位置的深度数据(单位:(1)(2)估算所需光缆长度的近似值,并作出铺设河底光缆的曲线图;1.2 实现题目的思想及算法依据首先在题目(1)中要实现的是数据的拟合,显然用到的是我们在第三章中数据近似的知识内容。
多项式插值时,这里有21个数据点,则是一个20次的多项式,但是多项式插值随着数据点的增多,会导致误差也会随之增大,插值结果会出现龙格现象,所以不适用于该题目中点数较多的情况。
为了避免结果出现大的误差,同时又希望尽可能多地使用所提供的数据点,提高数据点的有效使用率,这里选择分段插值方法进行数据拟合。
分段插值又可分为分段线性插值、分段二次插值和三次样条插值。
由于题目中所求光缆的现实意义,而前两者在节点处的光滑性较差,因此在这里选择使用三次样条插值。
根据课本SPLINEM 算法和TSS 算法,采用第三种真正的自然边界条件,在选定边界条件和选定插值点等距分布后,可以先将数据点的二阶差商求出并赋值给右端向量d ,再根据TSS 解法求解三对角线线性方程组从而解得M 值。
求出M 后,对区间进行加密,计算200个点以便于绘图以及光缆长度计算。
对于问题(2),使用以下的公式:20=()L f x ds ⎰20(f x =⎰191(k kk f x +==∑⎰1.3 算法结构1. For n i ,,2,1,0⋅⋅⋅=1.1 i i M y ⇒2. For 2,1=k2.1 For k n n i ,,1, -=2.1.1 i k i i i i M x x M M ⇒----)/()(13. 101h x x ⇒-4. For 1-,,2,1n i =4.1 11++⇒-i i i h x x4.2 b a c c h h h i i i i i i ⇒⇒-⇒+++2;1;)/(11 4.3 i i d M ⇒+165. 0000;;c M d M d n n ⇒⇒⇒λn n n b a b ⇒⇒⇒2;;20μ6. 1111,γμ⇒⇒d b7. For m k ,,3,2 = ! 获取M 的矩阵元素个数,存入m7.1 k k k l a ⇒-1/μ 7.2 k k k k c l b μ⇒⋅-1- 7.3 k k k k l d γγ⇒⋅-1- 8. m m m M ⇒μγ/9. For 1,,2,1 --=m m k9.1 k k k k k M M c ⇒⋅-+μγ/)(110. k ⇒1 ! 获取x 的元素个数存入s 11. For 1,,2,1-=s i11.1 if i x x ≤~then k i ⇒;break else k i ⇒+112. xx x x x x h x x k k k k ˆ~;~;11⇒-⇒-⇒--- y h x h M y x h M y x M x M k k k k k k ~/]ˆ)6()6(6ˆ6[2211331⇒-+-++---1.4 matlab 源程序n=20; x=0:n;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];M=y; %用于存放差商,此时为零阶差商 h=zeros(1,n+1); c=zeros(1,n+1); d=zeros(1,n+1); a=zeros(1,n+1); b=2*ones(1,n+1); h(2)=x(2)-x(1);for i=2:n %书本110页算法SPLINEM h(i+1)=x(i+1)-x(i);c(i)=h(i+1)/(h(i)+h(i+1)); a(i)=1-c(i); enda(n+1)=-2; %计算边界条件c(0),a(n+1),采用的是第三类边界条件 c(1)=-2;for k=1:3 %计算k 阶差商 for i=n+1:-1:k+1M(i)=(M(i)-M(i-1))/(x(i)-x(i-k)); endif(k==2) %计算2阶差商 d(2:n)=6*M(3:n+1); %给d 赋值 endif(k==3)d(1)=(-12)*h(2)*M(4); %计算边界条件d(0),d(n),采用的是第三类边界条件 d(n+1)=12*h(n+1)*M(n+1); end endl=zeros(1,n+1); r=zeros(1,n+1); u=zeros(1,n+1); q=zeros(1,n+1); u(1)=b(1); r(1)=c(1); q(1)=d(1);for k=2:n+1 %利用书本49页算法TSS求解三对角线性方程组r(k)=c(k);l(k)=a(k)/u(k-1);u(k)=b(k)-l(k)*r(k-1);q(k)=d(k)-l(k)*q(k-1);endp(n+1)=q(n+1)/u(n+1);for k=n:-1:1p(k)=(q(k)-r(k)*p(k+1))/u(k);endfprintf('三对角线性方程组的解为:');disp(p);%求拟合曲线x1=0:0.1:20; %首先对区间进行加密,增加插值点n1=10*n;x2=zeros(1,n1+1);x3=zeros(1,n1+1);s=zeros(1,n1+1);for i=1:n1+1for j=1:nif x1(i)>=x(j)&&x1(i)<=x(j+1) %利用书本111页算法EVASPLINE求解拟合曲线s(x)h(j+1)=x(j+1)-x(j);x2(i)=x(j+1)-x1(i);x3(i)=x1(i)-x(j);s(i)=(p(j).*(x2(i)).^3/6+p(j+1).*(x3(i)).^3/6+(y(j)-p(j).*((h(j+1)).^2/6)).*x2( i)+...(y(j+1)-p(j+1).*(h(j+1)).^2/6).*x3(i))/h(j+1);endendendplot(x,-y,'x') %画出插值点hold onplot(x1,-s) %画出三次样条插值拟合曲线hold ontitle('三次样条插值法拟合电缆曲线');xlabel('河流宽度/m');ylabel('河流深度/m');Length=0;for i=1:n1L=sqrt((x1(i+1)-x1(i))^2+(s(i+1)-s(i))^2); %计算电缆长度Length=Length+L;endfprintf('电缆长度(m)=');disp(Length);1.5 结果与说明铺设海底光缆的曲线如图1.1所示图1. 1三次样条插值法拟合海底光缆曲线由上图可以看出,所得到的曲线光滑,能够较好得反映实际的河沟底部地势形貌。
计算方法上机报告姓名:学号:班级:目录题目一------------------------------------------------------------------------------------------ - 4 -1.1题目内容 ---------------------------------------------------------------------------- - 4 -1.2算法思想 ---------------------------------------------------------------------------- - 4 -1.3Matlab源程序----------------------------------------------------------------------- - 5 -1.4计算结果及总结 ------------------------------------------------------------------- - 5 - 题目二------------------------------------------------------------------------------------------ - 7 -2.1题目内容 ---------------------------------------------------------------------------- - 7 -2.2算法思想 ---------------------------------------------------------------------------- - 7 -2.3 Matlab源程序---------------------------------------------------------------------- - 8 -2.4计算结果及总结 ------------------------------------------------------------------- - 9 - 题目三----------------------------------------------------------------------------------------- - 11 -3.1题目内容 --------------------------------------------------------------------------- - 11 -3.2算法思想 --------------------------------------------------------------------------- - 11 -3.3Matlab源程序---------------------------------------------------------------------- - 13 -3.4计算结果及总结 ------------------------------------------------------------------ - 14 - 题目四----------------------------------------------------------------------------------------- - 15 -4.1题目内容 --------------------------------------------------------------------------- - 15 -4.2算法思想 --------------------------------------------------------------------------- - 15 -4.3Matlab源程序---------------------------------------------------------------------- - 15 -4.4计算结果及总结 ------------------------------------------------------------------ - 16 - 题目五----------------------------------------------------------------------------------------- - 18 -5.1题目内容 --------------------------------------------------------------------------- - 18 -5.2算法思想 --------------------------------------------------------------------------- - 18 -5.3 Matlab源程序--------------------------------------------------------------------- - 18 -5.3.1非压缩带状对角方程组------------------------------------------------- - 18 -5.3.2压缩带状对角方程组---------------------------------------------------- - 20 -5.4实验结果及分析 ------------------------------------------------------------------ - 22 -5.4.1Matlab运行结果 ---------------------------------------------------------- - 22 -5.4.2总结分析------------------------------------------------------------------- - 24 -5.5本专业算例 ------------------------------------------------------------------------ - 24 - 学习感悟-------------------------------------------------------------------------------------- - 27 -题目一1.1题目内容计算以下和式:0142111681848586n n S n n n n ∞=⎛⎫=--- ⎪++++⎝⎭∑,要求: (1)若保留11个有效数字,给出计算结果,并评价计算的算法; (2)若要保留30个有效数字,则又将如何进行计算。
1.2算法思想在程序编写中需要把握以下几点:①随着n 值的增加,和式的项递减速度很快,因此我们可以认为,在确定为某一精度的前提下,n 达到一定的值,加下一项将不会对最终的加和产生影响,首先我们应找到n 值。
②根据精度要求估计所加的项数,可以使用后验误差估计,通项为:142111416818485861681n n na n n n n n ε⎛⎫=---<< ⎪+++++⎝⎭ ③为减小舍入误差,在计算s 时所采用的方法是逆序相加,其依据是:两个数量级相差较大的数字相加减时,较小数的有效数字会被丧失,从而导致最后的运算结果失真。
为避免“大数吃小数”现象的发生,采用逆序相加。
④对于实现30位有效数字,则调用从工具箱中 digits(位数)或vpa (变量,精度位数)即可实现。
1.3Matlab源程序>>clear;>>clc;>> m=input('输入需要求的有效数字位数m=');s=0for n=0:200 %寻找满足条件的最小ns=(1/16^n)*(4/(8*n+1)-2/(8*n+4)-1/(8*n+5)-1/(8*n+6));if s<=10^(-m) %当项小于10^-m时,停止循环breakendend;fprintf('n值加至n%d\n',n-1); %需要将n值加到的数值for i=n-1:-1:0 %逐项逆序相加求和s=(1/16^i)*(4/(8*i+1)-2/(8*i+4)-1/(8*i+5)-1/(8*i+6));t=t+s;ends=vpa(t,m)1.4计算结果及总结①输入需要求的有效数字位数m=11t = 0n值加至n7s =3.1415926536②t =0n值加至n22s =3.14159265358979311599796346854从上述的算法思想中可以看出,运算中不仅要满足误差要求,还要尽可能地减少计算量,此外还要考虑舍入误差的影响,这时就要对所运算数据的性质进行分析,设置合适的算法,从而提高运算的精度。
而逆序算法能够很好的满足上述要求。
题目二2.1题目内容某通信公司在一次施工中,需要在水面宽度为20米的河沟底部沿直线走向铺设一条沟底光缆。
在铺设光缆之前需要对沟底的地形进行初步探测,从而估计所需光缆的长度,为工程预算提供依据。
已探测到一组等分点位置的深度数据(单位:米)如下表所示:(1)请用合适的曲线拟合所测数据点;(2)估算所需光缆长度的近似值,并作出铺设河底光缆的曲线图;2.2算法思想利用曲线拟合数据点,即利用数据点拟合差值多项式,我们可以利用Newton 法进行拟合,也可以用复化Simpson求积公式、三次样条插值来拟合,但三次样条插值使用方程组计算增大了计算量,同时还要附加边界条件,分段三次样条插值对图形的控制能力还不够灵活。
因此这里用Newton形式的差值多项式进行拟合。
首先计算出各差商,然后计算出Newton差值多项式的每一项,最后将所有项相加,即可计算出Newton差值多项式,然后利用所得的差值多项式一次算出多个点的函数值。
MATLAB的plot函数进行绘图。
计算长度近似值,只需将每隔两点之间的距离算出,然后一次相加,所得的折线长度,即为长度的近似值。
2.3 Matlab源程序Untitled2clearclcx=0:1: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];%输入给定的数据点xi=0:20;[Nx,Ni]=Newton(x,y,xi); %调用函数,建立Newton差值多项式plot(xi,Ni); %绘制拟合的曲线图long=0; %为长度赋初值for i=1:20 %将每一段折线相加算出长度的近似值long=long+sqrt(1+((y(i)-y(i+1))^2));enddisp ('需要的光缆长度为') %显示需要的光缆长度disp(long)Newton插值法function [Nx,N0]=Newton(X,Y,x0)n=size(X); %插值点个数y=Y;Nx=Y(1);N=1;for i=1:n-1 %计算Newton插值多项式for j=i+1:nyi(j)=(y(j)-y(i))/(X(j)-X(i));endm(i)=yi(i+1);N=N*(x-X(i));Nx=Nx+N*m(i);y=yi;endN0=subs(Nx,'x',x0);2.4计算结果及总结针对上述Matlab程序,铺设海底光缆的曲线图如下图所示:结果如下:Nl=26.4844,即为所求近似计算光缆长度。