计算方法实验报告习题1
计算方法_实验报告
一、实验目的1. 理解并掌握计算方法的基本概念和原理;2. 学会使用计算方法解决实际问题;3. 提高编程能力和算法设计能力。
二、实验内容本次实验主要涉及以下内容:1. 线性方程组的求解;2. 多项式插值;3. 牛顿法求函数零点;4. 矩阵的特征值和特征向量求解。
三、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 科学计算库:NumPy、SciPy四、实验步骤及结果分析1. 线性方程组的求解(1)实验步骤a. 导入NumPy库;b. 定义系数矩阵A和增广矩阵b;c. 使用NumPy的linalg.solve()函数求解线性方程组。
(2)实验结果设系数矩阵A和增广矩阵b如下:A = [[2, 1], [1, 2]]b = [3, 2]解得:x = [1, 1]2. 多项式插值(1)实验步骤a. 导入NumPy库;b. 定义插值点x和对应的函数值y;c. 使用NumPy的polyfit()函数进行多项式拟合;d. 使用poly1d()函数创建多项式对象;e. 使用多项式对象计算插值点对应的函数值。
(2)实验结果设插值点x和对应的函数值y如下:x = [1, 2, 3, 4, 5]y = [1, 4, 9, 16, 25]拟合得到的二次多项式为:f(x) = x^2 + 1在x = 3时,插值得到的函数值为f(3) = 10。
3. 牛顿法求函数零点(1)实验步骤a. 导入NumPy库;b. 定义函数f(x)和导数f'(x);c. 设置初始值x0;d. 使用牛顿迭代公式进行迭代计算;e. 判断迭代结果是否满足精度要求。
(2)实验结果设函数f(x) = x^2 - 2x - 3,初始值x0 = 1。
经过6次迭代,得到函数零点x ≈ 3。
4. 矩阵的特征值和特征向量求解(1)实验步骤a. 导入NumPy库;b. 定义系数矩阵A;c. 使用NumPy的linalg.eig()函数求解特征值和特征向量。
(完整word版)计算方法A上机实验报告
计算方法A上机实验报告姓名:苏福班级:硕4020 学号:3114161019一、上机练习目的1)复习和巩固数值计算方法的基本数学模型,全面掌握运用计算机进行数值计算的具体过程及相关问题。
2)利用计算机语言独立编写、调试数值计算方法程序,培养学生利用计算机和所学理论知识分析解决实际问题的能力。
二、上机练习任务1)利用计算机语言编写并调试一系列数值方法计算通用程序,并能正确计算给定题目,掌握调试技能。
2)掌握文件使用编程技能,如文件的各类操作,数据格式设计、通用程序运行过程中文件输入输出运行方式设计等。
3)写出上机练习报告。
三、上机题目1. 共轭梯度法求解线性方程组。
(第三章)2. 三次样条插值(第四章)3. 龙贝格积分(第六章)4. 四阶龙格-库塔法求解常微分方程的初值问题四、上机报告题目1:共轭梯度法求解线性方程组1.算法原理共轭梯度法是把求解线性方程组的问题转化为求解一个与之等价的二次函数极小值的问题。
从任意给定的初始点出发,沿一组关于矩阵A共轭的方向进行线性搜索,在无舍入误差的假定下,最多迭代n 次(其中n 为矩阵A 的阶数),就可求得二次函数的极小值,也就求得了线性方程组Ax b =的解。
定理:设A 是n 阶对称正定矩阵,则x *是方程组Ax b =的解得充分必要条件是x *是二次函数1()2TT f x x Ax b x =-的极小点,即 ()()min nx R Ax b f x f x **∈=⇔=共轭梯度法的计算公式:(0)(0)(0)()()()()(1)()()(1)(1)(1)()()()(1)(1)()k T k k k T k k k k k k k k T k k k T k k k k k d r b Ax r d d Ad xx d r b Ax r Ad d Ad d r d ααββ++++++⎧==-⎪⎪=⎪⎪=+⎪⎨=-⎪⎪⎪=-⎪⎪=+⎩2. 程序框图(1)编写共轭梯度法求解对称正定矩阵的线性方程组见附录(myge.m):function x=myge(A,b)输入对称正定矩阵及对应的列向量,初始向量设为0,精度取为810 。
数学建模 -实验报告1
������������⁄������������ = ������������(1 − (������ + ������)) − ������1������∗������,
(4 − 3)
������������∗⁄������������ = −������1������∗������ + ������2������
二、 问题分析
建立肿瘤细胞增长模型时,我们可以从自由增长模型开始分析,引进 Logistic 阻滞增长模型,构成肿瘤细胞增长初步框架。再者肿瘤细胞不同于普 通细胞,其生长受到人体自身免疫系统的制约。于是综合考虑正常细胞转化,癌 细胞增殖,癌细胞死亡,癌细胞被效应细胞消除等情况,建立动力学方程。并对 模型进行适当简化求解。在放射治疗方案的设计中,我们可以引入放射生物学中 广泛接受的 LQ 模型对问题进行分析,由于放疗对人体伤害相当大,因此我们采 取分次逐次放疗的方式进行治疗。我们具体分两种情形进行讨论,一是在总剂量 一定的条件下,不同的分次剂量组合对生物效应的影响;二是在产生相同生物效 应的情况下,分析最优的分次剂量组合。
易算出癌细胞转入活动期已有 300 多天,故如何在早期发现癌症是攻克癌症的关键之一 (2)手术治疗常不能割去所有癌细胞,故有时需进行放射疗法。射线强度太小无法杀
死癌细胞,太强病人身体又吃不消且会使病人免疫功能下降。一次照射不可能杀死全部癌细 胞,请设计一个可行的治疗方案(医生认为当体内癌细胞数小于 100000 个时即可凭借体内 免疫系统杀灭)。
进一步简化,根据(4-4),(4-5)式可知,效应细胞������∗和复合物������有出有进.假 设出入保持平衡,则有
������ + ������∗ = C (C 为常数)
计算方法与计算 实验一误差分析
% 输出的量--每次迭代次数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
并行计算实验报告一
并行计算实验报告一江苏科技大学计算机科学与工程学院实验报告评定成绩指导教师实验课程:并行计算宋英磊实验名称:Java多线程编程学号: 姓名: 班级: 完成日期:2014年04月22日1.1 实验目的(1) 掌握多线程编程的特点;(2) 了解线程的调度和执行过程;(3) 掌握资源共享访问的实现方法。
1.2 知识要点1.2.1线程的概念(1) 线程是程序中的一个执行流,多线程则指多个执行流;(2) 线程是比进程更小的执行单位,一个进程包括多个线程;(3) Java语言中线程包括3部分:虚拟CPU、该CPU执行的代码及代码所操作的数据。
(4) Java代码可以为不同线程共享,数据也可以为不同线程共享; 1.2.2 线程的创建(1) 方式1:实现Runnable接口Thread类使用一个实现Runnable接口的实例对象作为其构造方法的参数,该对象提供了run方法,启动Thread将执行该run方法;(2) 方式2:继承Thread类重写Thread类的run方法;1.2.3 线程的调度(1) 线程的优先级, 取值范围1,10,在Thread类提供了3个常量,MIN_PRIORITY=1、MAX_ PRIORITY=10、NORM_PRIORITY=5;, 用setPriority()设置线程优先级,用getPriority()获取线程优先级; , 子线程继承父线程的优先级,主线程具有正常优先级。
(2) 线程的调度:采用抢占式调度策略,高优先级的线程优先执行,在Java 中,系统按照优先级的级别设置不同的等待队列。
1.2.4 线程的状态与生命周期说明:新创建的线程处于“新建状态”,必须通过执行start()方法,让其进入到“就绪状态”,处于就绪状态的线程才有机会得到调度执行。
线程在运行时也可能因资源等待或主动睡眠而放弃运行,进入“阻塞状态”,线程执行完毕,或主动执行stop方法将进入“终止状态”。
1.2.5 线程的同步--解决资源访问冲突问题(1) 对象的加锁所有被共享访问的数据及访问代码必须作为临界区,用synchronized加锁。
计算方法-习题第一、二章答案.doc
第一章 误差1 问3.142,3.141,722分别作为π的近似值各具有几位有效数字?分析 利用有效数字的概念可直接得出。
解 π=3.141 592 65…记x 1=3.142,x 2=3.141,x 3=722.由π- x 1=3.141 59…-3.142=-0.000 40…知3411110||1022x π--⨯<-≤⨯ 因而x 1具有4位有效数字。
由π- x 2=3.141 59…-3.141=-0.000 59…知2231021||1021--⨯≤-<⨯x π因而x 2具有3位有效数字。
由π-722=3.141 59 …-3.142 85…=-0.001 26…知231021|722|1021--⨯≤-<⨯π因而x 3具有3位有效数字。
2 已知近似数x*有两位有效数字,试求其相对误差限。
分析 本题显然应利用有效数字与相对误差的关系。
解 利用有效数字与相对误差的关系。
这里n=2,a 1是1到9之间的数字。
%5101211021|*||*||)(|1211*=⨯⨯≤⨯≤-=+-+-n ra x x x x ε3 已知近似数的相对误差限为0.3%,问x*至少有几位有效数字?分析 本题利用有效数字与相对误差的关系。
解 a 1是1到9间的数字。
1112*10)1(2110)19(21102110003%3.0)(--⨯+≤⨯+⨯=⨯<=a x r ε 设x*具有n 位有效数字,令-n+1=-1,则n=2,从而x*至少具有2位有效数字。
4 计算sin1.2,问要取几位有效数字才能保证相对误差限不大于0.01%。
分析 本题应利用有效数字与相对误差的关系。
解 设取n 位有效数字,由sin1.2=0.93…,故a 1=9。
411*10%01.01021|*||*||)(-+-=≤⨯≤-=n ra x x x x ε解不等式411101021-+-≤⨯n a 知取n=4即可满足要求。
计算方法实验报告
计算方法与实习实验报告目录实习题1-1 (2)实习题2-1(1) (3)实习题3-2 (4)实习题3-5(1) (6)实习题4-2 (9)实习题5-1 (10)实习题6 (13)实习题1-1用2种不同的顺序计算644834.11000012≈∑=-n n,分析其误差的变化。
算法1:从n=1开始累加,n 逐步增大,直至n=10000 算法2:从n=10000开始累加,n 逐步减小,直至n=1 算法1的Matlab 程序如下: m=0;for n=1:10000 yl=1/(n.*n); m=m+yl; endformat long m算法1的输出结果m=1.644834071848065算法2的Matlab 程序如下: m=0;for n=10000:-1:1 yl=1/(n.*n); m=m+yl; endformat long m算法2的输出结果m=1.644834071848060结论分析:由运行结果可以发现,当从n=1开始计算时,算出结果为1.644834071848065,而当从n=10000开始计算时,算出结果为1.644834071848060.与题中所给结果相比,可知从n=10000开始计算时,所得近似结果更接近真实值。
原因是从n=1开始算时,由于被累加的数是越来越小的,而且开始的几个数比后面的数大得多,而浮点数保留位数有限,因此在累加过程中出现了大数吃小数的现象,导致误差较大。
而从n=10000开始累加就很好地避免以上问题,从而能够更接近精确值。
实习题2-1(1)用牛顿法求方程02=-x e x 的根算法:给定初始值0x ,ε为根的容许误差,η为)(x f 的容许误差,N 为迭代次数的容许值。
①如果0)(0'=x f 或迭代次数大于N ,则算法失败,结束;否则执行②。
②计算)()(0'001x f x f x x -=。
③若01x x -<ε或)(1x f <η,则输出1x ,程序结束;否则执行④。
计算方法实验报告习题2(浙大版)
计算方法实验报告实验名称: 实验2 列主元素消去法解方程组 1 引言工程实际问题中,线型方程的系数矩阵一般为低阶稠密矩阵和大型稀疏矩阵。
用高斯消去法解Ax =b 时,可能出现)(k kk a 很小,用作除数会导致中间结果矩阵元素数量级严重增长和舍入误差的扩散,使结果不可靠;采用选主元素的三角分解法可以避免此类问题。
高斯消去法的消去过程,实质上是将A 分解为两个三角矩阵的乘积A =LU ,并求解Ly =b 的过程。
回带过程就是求解上三角方程组Ux =y 。
所以在实际的运算中,矩阵L 和U 可以直接计算出,而不需要任何中间步骤,从而在计算过程中将高斯消去法的步骤进行了进一步的简略,大大提高了运算速度,这就是三角分解法。
采用选主元的方式与列主元高斯消去法一样,也是为了避免除数过小,从而保证了计算的精确度。
2 实验目的和要求通过列主元素消去法求解线性方程组,实现P A =LU 。
要求计算解x ,L ,U ,整形数组IP (i ),(i =1,2,…,)(记录主行信息)。
3 算法原理与流程图(1)原理将A 分解为两个三角矩阵的乘积A =LU 。
对方程组的增广矩阵[]b A A ,=经过k-1步分解后,可变成如下形式:⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡→-------------n nnnjnkk n n n i in ij ik k i i i k kn kj kk k k k k k n k j k k k k k k k n j k k n j k k b a a a l l l b a a a l l l b a a a l l l y u u u u l l y u u u u u l y u u u u u u A1,211,211,211,1,1,11,12,11,122221,2222111,1,11,11211第k 步分解,为了避免用绝对值很小的数kku 作除数,引进量1111 (,1,,;1,2,,) ()/ (1,2,,;1,2,,)k kj kj km mj m k ik ik im mk kk m u a l u j k k n k n l a l u u i k k n k n -=-=⎧=-=+=⎪⎪⎨⎪=-=++=⎪⎩∑∑11(,1,,)k i ik im mkm s a l u i k k n -==-=+∑,于是有kk u =ks 。
《算法设计与分析》课程实验报告 (算法问题求解基础1)
}
int s2[10] = {0,9,189,2889,38889,488889,5888889,68888889,788888889};
int a;
scanf("%d",&a);
int count;
count = 0;
while(a > 0){
题目二:最大间隙
源码:
#include<iostream>
#include<cstdio>
using namespace std;
double a[10000] = {0};
int main(){
int n;
cin>>n;
for(int i = 0 ; i < n ; i++){
cin>>a[i];
样例输出:
3.2
二、实验目的
(1)理解算法的概念
(2)理解函数渐近态的概念和表示方法
(3)初步掌握算法时间复杂度的计算方法
三、实验要求
(1)对于每个题目提交实验代码。
(2)根据程序设计测试数据,并记录测试结果,要求边界情况必须测试
(3)使用我们学过的分析方法分析你的算法的时间效率,如果可能,请进行算法的优化,尽量减小算法的时间效率或空间效率。
《算法设计与分析》课程实验报告
实验序号:1 实验项目名称:算法问题求解基础
一、实验题目
题目一:统计数字问题
题目描述
一本书的页码从自然数1开始顺序编码直到自然数n。输的页码按照通常的习惯编排,每个页码都不含有多余的前导数字0.例如,第6页用数字6表示,而不是06或者006等。数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1,2...8,9。
计算方法实验报告
1. 熟悉并掌握常用的计算方法,包括数值积分、数值微分、线性方程组求解等。
2. 培养运用计算机进行数值计算的能力。
3. 增强对数值计算误差的分析和判断能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 库:NumPy、SciPy、Matplotlib三、实验内容1. 数值积分(1)函数:f(x) = x^2(2)区间:[0, 1](3)方法:梯形法、辛普森法、复合梯形法2. 数值微分(1)函数:f(x) = e^x(2)点:x = 1(3)方法:有限差分法、中点法、牛顿法3. 线性方程组求解(1)方程组:2x + 3y - z = 8-x + 2y + 2z = -3x - y + 3z = 5(2)方法:高斯消元法、LU分解法1. 数值积分(1)编写函数f(x) = x^2(2)定义积分区间[0, 1](3)实现梯形法、辛普森法、复合梯形法(4)计算积分结果2. 数值微分(1)编写函数f(x) = e^x(2)定义点x = 1(3)实现有限差分法、中点法、牛顿法(4)计算导数结果3. 线性方程组求解(1)定义方程组系数矩阵A和常数向量b(2)实现高斯消元法、LU分解法(3)求解方程组(4)输出解向量x五、实验结果与分析1. 数值积分(1)梯形法:积分结果约为1.6667(2)辛普森法:积分结果约为1.6447(3)复合梯形法:积分结果约为1.6458分析:三种方法计算结果接近,但辛普森法误差最小。
2. 数值微分(1)有限差分法:导数结果约为2.7183(2)中点法:导数结果约为2.7183(3)牛顿法:导数结果约为2.7183分析:三种方法计算结果一致,误差较小。
3. 线性方程组求解(1)高斯消元法:解向量x = [2, 1, 1](2)LU分解法:解向量x = [2, 1, 1]分析:两种方法求解结果一致,且解向量正确。
六、实验总结本次实验通过Python编程,实现了数值积分、数值微分和线性方程组求解。
计算方法实验报告(20210313193700)
实验报告一、求方程f(x)=x A3-sinx-12x+1 的全部根,€=le-61、用一般迭代法;2、用牛顿迭代法;并比较两种迭代的收敛速度。
一、首先,由题可求得:/W =3x2-cosx-12 .其次,分析得到苴根所在的区间。
①令f(x)- 0,可得到%3 -12x4-1 = sinx.②用一阶导数分析得到X3-12X+ 1和sinx两个函数的增减区间:再用二阶导数分析得到两个函数的拐点以及凹凸区间.③在直角坐标轴上描墓出X3-12X+1= 0和sinx = 0的图,在图上可以看到他们的交点, 然后估计交点所在的区间,即是所要求的根的区间。
经过估计,得到根所在的区间为[-4-3], [0,1]和[3,4].1、一般迭代法(1)算法步骤:设e为给定的允许精度,迭代法的计算步骤为:①选定初值A().|h /(A)=0确定函数g(x),得等价形式x = g(x).②计算gg).由迭代公式得X|=g(x。
).③如果|x,-x0|<^,则迭代结束,取“为解的近似值;否则,用“代替儿,重复步骤②和步骤③.(2)程丿了:代码:①在区间[-4,-3]内,代码:clcx0=-3•5; $初值心iter_max=100; $迭代的最大次数ep=le-6; $允许精度£k=0;while k<=iter_max $]<从0开始至ljiter_max循坯;xl=(sin(x0)+12*x0-l) ."(1/3); 貂弋入儿,算出旺的值if abs (xl-xO) <ep %|x, -x0\与允许精度作比较break;匕条件卜|一对5£成立,跳出循环endxO=xl; 务条件|Xj -X Q\<£不成立,用“代替兀0k=k+l; %kiniendx_star=xl, iter=k 为解的近似值,iter为迭代次数运行结果:x_star = -3.4101 : iter =14②在区间[0,1]内,代码:clcxO=O . 5; $初值旺iter_max=100; $迭代的最大次数ep=le-6; $允许精度gk=0;while k<=iter_max $1<从0开始至ljiter_max循坯;xl=(l/12) * (x0.^3-sin(x0) +1); 貂弋入心,算岀“的值if abs (xl-xO) <ep %|xj -x0|与允许精度作比较break; 务条件\x{ -x()| < s成立,跳出循环endxO=xl;匕条件|x, -X Q\<£不成立,用“代替儿k=k+l; Ek 力mendx_star=xl, iter=k 为解的近似值,iter为迭代次数结果:x_star = 0.07696 ; iter =6③在区间[3,4]内,代码:clcx0=3.5; &初值心iter_max=100; $迭代的最大次数ep=le-6; $允许精度£k=0;while k<=iter_max 靱从0开始至ljiter_max循环xl=(sin(x0)+12*x0-l) (1/3); 訂弋入心,算出“的值if abs(xl-xO)<ep 引召-对与允许精度作比较break; 匕条件-x()| <£•成立,跳岀循环endxO=xl; $条件|Xj -x0| < £不成立,用X]代替X。
《计算方法》实验报告材料
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;
计算方法实验上机报告(完整版)
简单迭代法#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];}。
计算方法习题及答案
第一章 绪论一.填空题1.*x 为精确值x 的近似值;()**x f y=为一元函数()x f y =1的近似值;()**,*y x f y =为二元函数()y x f y ,2=的近似值,请写出下面的公式:**e x x =-:***rx x e x -=()()()*'1**y f x x εε≈⋅ ()()()()'***1**r r x f x y x f x εε≈⋅ ()()()()()**,**,*2**f x y f x y y x y x yεεε∂∂≈⋅+⋅∂∂()()()()()****,***,**222r f x y e x f x y e y y x y y y ε∂∂≈⋅+⋅∂∂2、 计算方法实际计算时,对数据只能取有限位表示,这时所产生的误差叫 舍入误差 。
3、 分别用2.718281,2.718282作数e的近似值,则其有效数字分别有 6 位和 7 位;又取1.73≈(三位有效数字),则-211.73 10 2≤⨯。
4、设121.216, 3.654x x ==均具有3位有效数字,则12x x 的相对误差限为 0.0055 。
5、设121.216, 3.654x x ==均具有3位有效数字,则12x x +的误差限为 0.01 。
6、已知近似值 2.4560A x =是由真值T x 经四舍五入得到,则相对误差限为 0.000021 .7、递推公式,⎧⎪⎨⎪⎩0n n-1y =y =10y -1,n =1,2,如果取0 1.41y ≈作计算,则计算到10y 时,误差为8110 2⨯;这个计算公式数值稳定不稳定 不稳定 .8、精确值 14159265.3*=π,则近似值141.3*1=π和1415.3*2=π分别有 3 位和 4 位有效数字。
9、 若*2.71828x e x =≈=,则x 有 6 位有效数字,其绝对误差限为1/2*10-5。
10、 设x*的相对误差为2%,求(x*)n 的相对误差0.02n 二、计算题1. 有一个长方形水池,由测量知长为(50±0.01)米,宽为(25±0.01)米,深为(20±0.01)米,试按所给数据求出该水池的容积,并分析所得近似值的绝对误差和相对误差公式,并求出绝对误差限和相对误差限. 解:设长方形水池的长为L ,宽为W,深为H ,则该水池的面积为V=LWH当L=50,W=25,H=20时,有 V=50*25*20=25000(米3) 此时,该近似值的绝对误差可估计为()()()()()()()=V V VV L W H L W HWH L HL W LW H ∂∂∂∆≈∆+∆+∆∂∂∂∆+∆+∆ 相对误差可估计为:()()r V V V∆∆=而已知该水池的长、宽和高的数据的绝对误差满足()()()0.01,0.01,0.01L W H ∆≤∆≤∆≤故求得该水池容积的绝对误差限和相对误差限分别为()()()()()()325*20*0.0150*20*0.0150*25*0.0127.5027.501.1*1025000r V WH L HL W LW H V V V -∆≤∆+∆+∆≤++=∆∆=≤=2.已知测量某长方形场地的长a=110米,宽b=80米.若()()**0.1 0.1a a b b -≤-≤米,米试求其面积的绝对误差限和相对误差限. 解:设长方形的面积为s=ab当a=110,b=80时,有 s==110*80=8800(米2) 此时,该近似值的绝对误差可估计为()()()()()=b s ss a b a ba ab ∂∂∆≈∆+∆∂∂∆+∆ 相对误差可估计为:()()r s s s∆∆=而已知长方形长、宽的数据的绝对误差满足()()0.1,0.1a b ∆≤∆≤故求得该长方形的绝对误差限和相对误差限分别为()()()()() 80*0.1110*0.119.019.00.0021598800r s b a a b s s s ∆≤∆+∆≤+=∆∆=≤= 绝对误差限为19.0;相对误差限为0.002159。
计算方法例题分析报告
例题分析一例1设准确值x*=π =3.1415926,当分别取近似值x=3.14和x=3.1416和x=3.1415时,求绝对误差、绝对误差限及有效数字位数。
解:近似值x=3.14=0.314×101,即m=1,它的绝对误差是-0.0015926…,有│x-x*│=0.0015926…≤0.5×101-3即n=3,故x=3.14有3位有效数字。
x=3.14准确到小数点后第2位,又近似值x=3.1416,它的绝对误差是0.0000074…,有│x-x*│=0.0000074…≤0.5×101-5即m=1,n=5,x=3.1416有5位有效数字。
而近似值x=3.1415,它的绝对误差是0.0000926…,有│x-x*│=0.0000926…≤0.5×101-4即m=1,n=4,x=3.1415有4位有效数字。
这就是说某数有s位数,若末位数字是四舍五入得到的,那么该数有s位有效数字;例2指出下列各数具有几位有效数字,及其绝对误差限和相对误差限:2.0004-0.0020090009000.00解:因为x1=2.0004=0.20004×101,它的绝对误差限0.00005=0.5×101-5,即m=1,n=5,故x=2.0004有5位有效数字。
a1=2,相对误差限;x2=-0.00200,绝对误差限0.000005,因为m=-2,n=3,x2=-0.00200有3位有效数字。
a1=2,相对误差限x3=9000,绝对误差限为0.5×100,因为m=4, n=4,x3=9000有4位有效数字,a=9,相对误差限x4=9000.00,绝对误差限0.005,因为m=4,n=6,x4=9000.00有6位有效数字,相对误差限为由x3与x4可以看到小数点之后的0,不是可有可无的,它是有实际意义的。
例3ln2=0.69314718…,精确到10-3的近似值是多少?解:精确到10-3=0.001,意旨两个近似值x1,x2满足│x1-x2│≤0.001,由于近似值都是四舍五入得到的,要求满足│x1-x2│≤0.001,近似值的绝对误差限应是ε=0.0005,故至少要保留小数点后三位才可以。
大学计算机基础实验报告参考答案1
习题及实验(一)第一部分习题一、简答题(略)第二部分选择题答案(p3)1.C2. A3. B4. C , C5. B , B6. A7. A, B, B8. B, D9. D 10. C注: 7.(1) 应为: 1010011.001习题及实验(二)Windows XP第一部分习题一、简答题1. 简述Windows“资源管理器”窗口的组成。
答:Windows资源管理器”窗口上部是菜单栏和工具栏。
工具栏包括标准按钮栏、地址栏和链接栏。
窗口中分为两个区域:左窗口和右窗口。
左窗口中有一棵文件夹树,显示计算机资源的结构组织,称为“文件夹树型结构框”或“文件夹框”。
右窗口中显示左窗口中选定的对象所包含的内容,称为“当前文件夹内容框”,或简称为“文件夹内容框”。
左窗口和右窗口之间是一个分隔条。
窗口底部是状态栏。
2. 什么是“快捷菜单”?如何打开Windows XP的快捷菜单?不同对象的快捷菜单的内容是否相同?答:当用鼠标右击一个对象(项目)时,会出现一个快捷菜单。
不同对象的快捷菜单的内容是不相同的。
3. 简述文件和文件夹的概念以及它们的命名规则。
①在文件名或文件夹名中,名字总长度最多可以有255个字符。
其中,包含驱动器和完整路径信息,②命名必须遵循唯一性原则,即在同一目录下的文件名必须惟一。
文件名或文件夹名中出现的合法字符包括:26个英文字母(大、小写)、0~9十个数字和一些特殊字符。
特殊字符包括:$、&、@、!、^、~、_、−、(、)、{、}等。
不能出现以下字符:\、│、/、:、*、?、“、<、>等9个字符。
③不区分英文字母大小写。
4. 回收站的功能是什么?怎样利用回收站恢复被删除的文件及彻底删除回收站中的文件?答:回收站”就相当于一个垃圾箱,用于暂时存放从硬盘文件夹或桌面上被删除的文件及其他对象。
双击桌面上的回收站图标,在打开的窗口中选中要恢复文件,单击“文件”菜单下的“还原”。
双击桌面上的回收站图标,在打开的窗口中选中要恢复文件,单击“文件”菜单下的“还原”。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算方法实验报告
实验名称: 实验1 从函数表出发进行插值 1 引言
某个实际问题中,函数f (x)在区间[a,b]上存在且连续,但难以找到其表达式,只能通过实验和观测得到有限点上的函数表。
有些情况虽然可以写出表达式,但结构复杂,使用不方便。
所以希望构造简单函数P (x)作为f (x)的近似值。
插值法是解决此类问题的一种方法。
设函数y=在插值区间[a,b]上连续,且在n+1个不同的插值节点a≤x 0,x 1,…,x n ≤b 上分别取值y 0,y 1,…,y n 。
目的是要在一个性质优良、便于计算的插值函数类Φ中,求一简单函数P (x),满足插值条件P (x i )=y i (i=0,1,…,n),而在其他点x≠x i 上,作为f (x)近似值。
求插值函数P (x)的方法称为插值法[1]。
2 实验目的和要求
运用Matlab 编写m 文件,定义三种插值函数,要求一次性输入整张函数表,并利用计算机选择在插值计算中所需的节点。
分别通过分段线性插值、分段二次插值和全区间上拉格朗日插值计算f ,f ,f 的近似值。
3 算法原理与流程图
(1)原理 1.线性插值
当给定了n+1个点x 0<x 1<…<x n 上的函数值y 0,y 1,…,y n 后,若要计算x≠x i 处函数值f (x)的近似值,可先选取两个节点x i-1与x i 使x ∈[x i-1,x i ],然后在小区间[x i-1,x i ]上作线性插值,即得
1
1
11
1)()(------+--=≈i i i i i i i i x x x x y x x x x y x P x f
这种分段低次插值叫分段线性插值。
2.分段二次插值
当给定了n+1个点x 0<x 1<…<x n 上的函数值y 0,y 1,…,y n 后,若要计算x≠x i 处函数值f (x)的近似值,可先选取距离x 最近的三个节点x i-1,x i 与x i+1,然后进行二次插值,即得
专业:电气工程及其自动化 姓名: 李X
∑∏+-=+≠-
=⎥⎥⎥⎦
⎤
⎢⎢⎢⎣
⎡
⎪⎪⎭⎫
⎝⎛
--=≈11
112)()(i i k i k j i j j k j k x x x x y x P x f 这种分段低次插值叫分段二次插值。
3.全区间上拉格朗日插
对节点x i (i=0,1,…,n)中任一点x k (0≤k≤n),作一n 次多项式l k (x),使它在该点上的取值为1,在其余点x i (i=0,1,…,k -1,k+1,…,n)上取值为零。
对应于每一节点x k (k=0,1,…,n),都能写出一个满足此条件的多项式,这样写出n+1个多项式l 0(x),l 1(x),…,l n (x)。
)()()()(1100x l y x l y x l y x P n n n ++=
拉格朗日n 次插值多项式(对于全区间上的插值,n 取函数表的长度)
∑=+-+---------=n
k n k k k k k k n k k k
n x x x x x x x x x x x x x x x x y x L 0110110)
())(()()
())(()()(
(2)流程图
分段线性插值法
分段二次插值法
拉格朗日全区间上的插值法
4 程序代码及注释
1.
注:若要在Matlab中直接调用插值函数,需要事先将习题1函数表输入2.
3.
5算例分析
%首先在
%确保Current Directory 中存放分别含有上述代码的三个m文件(1)分段线性插值
(2)分段二次插值
(3)全区间上拉格朗日插值
(4
6讨论与结论
1.对程序运行的时间加以比较使用
从三次实验结果可知,interp1函数所用时间比编写的fdxx函数长(interp1函数为matlab求分段线性插值的函数);而fdxx和另外两个函数时间比较接近
2.程序优化
由分段线性插值和分段二次插值的原理,x取值在函数表范围内时,插值结果有意义,而当x 取值在函数表范围以外,利用分段线性插值公式仍可以进行运算并得到一个值,但其结果不准确;分段二次插值则无法找到三个合适的点以求插值,不予以输出结果;若输入的函数表x 与y的长度不相等,则无法插值。
所以加入判断
p=length(y0);n=length(x0);
if p~=n error('数据输入有误,请重新输入');
if z<x0(1)|z>x0(n)
fprintf('x(%d)超出范围;\n',t);
break;
end
从而避免了因输入错误导致的结果错误。
由上述(4)测试示例可看到效果。
3.结果比较
(下方的图为放大图)图中data1为原函数表的数据,data2-data4分别为分段线性插值、分
段二次插值和拉格朗日插值的结果,其x取步长为的52个数据,可知插值结果与原数据变化规律接近,在给定范围内均可以作其近似函数。
参考文献
[1] 易大义,沈云宝,李有法. 计算方法(第2版),浙江大学出版社. .
[2] 廖波. 数值计算与最优化原理——MATLAB实现,北京邮电大学出版社. .。