数值计算方法实验指导(Matlab版)
实验6 Matlab数值计算
实验6 Matlab数值计算实验目的:1、掌握数据统计与分析的方法;2、掌握数据插值和曲线拟合的方法及其应用;3、掌握多项式的常用运算。
实验内容:1.利用randn函数生成符合正态分布的10×5随机矩阵A,进行如下操作:(1)求A的最大元素和最小元素;(2)求A的每行元素的和以及全部元素的和;(3)分别对A的每列元素按升序、每行元素按降序排列。
a=randn(10,5);am=max(max(a));ai=min(min(a));ah=sum(a,2);az=sum(ah);al=sort(a);ahj=-sort(-a,2); disp('随机矩阵为:');adisp('最大值:');amdisp('最小值:');aidisp('每行和:');ahdisp('总和:');azdisp('列升序:');aldisp('行降序:');ahj随机矩阵为:a =-0.4326 -0.1867 0.2944 -0.3999 -1. 6041-1.6656 0.7258 -1.3362 0.6900 0. 25730.1253 -0.5883 0.7143 0.8156 -1. 05650.2877 2.1832 1.6236 0.7119 1.4 151-1.1465 -0.1364 -0.6918 1.2902 -0. 80511.1909 0.1139 0.8580 0.6686 0.5 2871.1892 1.0668 1.2540 1.1908 0.2 193-0.0376 0.0593 -1.5937 -1.2025 -0.92190.3273 -0.0956 -1.4410 -0.0198 -2. 17070.1746 -0.8323 0.5711 -0.1567 -0. 0592最大值:am =2.1832最小值:ai =-2.1707每行和:ah =-2.3288-1.32870.01056.2215-1.48953.36024.9201-3.6964-3.3998-0.3025总和:az =1.9666列升序:al =-1.6656 -0.8323 -1.5937 -1.2025 -2. 1707-1.1465 -0.5883 -1.4410 -0.3999 -1.6041-0.4326 -0.1867 -1.3362 -0.1567 -1. 0565-0.0376 -0.1364 -0.6918 -0.0198 -0. 92190.1253 -0.0956 0.2944 0.6686 -0. 80510.1746 0.0593 0.5711 0.6900 -0.0 5920.2877 0.1139 0.7143 0.7119 0.2 1930.3273 0.7258 0.8580 0.8156 0.2 5731.1892 1.0668 1.2540 1.1908 0.5 2871.19092.1832 1.6236 1.2902 1.4 151行降序:ahj =0.2944 -0.1867 -0.3999 -0.4326 -1. 60410.7258 0.6900 0.2573 -1.3362 -1. 66560.8156 0.7143 0.1253 -0.5883 -1. 05652.1832 1.6236 1.4151 0.7119 0.2 8771.2902 -0.1364 -0.6918 -0.8051 -1. 14651.1909 0.8580 0.6686 0.5287 0.1 1391.2540 1.1908 1.1892 1.0668 0.2 1930.0593 -0.0376 -0.9219 -1.2025 -1. 59370.3273 -0.0198 -0.0956 -1.4410 -2. 17070.5711 0.1746 -0.0592 -0.1567 -0. 8323>>2.用3次多项式方法插值计算1-100之间整数的平方根。
MATLAB实验指导书(共5篇)
MATLAB实验指导书(共5篇)第一篇:MATLAB实验指导书MATLAB 实验指导书皖西学院信息工程学院实验一 MATLAB编程环境及简单命令的执行一、实验目的1.熟悉MATLAB编程环境二、实验环境1.计算机2.MATLAB7.0集成环境三、实验说明1.首先应熟悉MATLAB7.0运行环境,正确操作2.实验学时:2学时四、实验内容和步骤1.实验内容(1)命令窗口的使用。
(2)工作空间窗口的使用。
(3)工作目录、搜索路径的设置。
(4)命令历史记录窗口的使用。
(5)帮助系统的使用。
(6)了解各菜单的功能。
2.实验步骤(1)启动MATLAB,熟悉MATLAB的桌面。
(2)进入MATLAB7.0集成环境。
(3)在命令窗口执行命令完成以下运算,观察workspace的变化,记录运算结果。
1)(365-52⨯2-70)÷3 2)>>area=pi*2.5^2 3)已知x=3,y=4,在MATLAB中求z:x2y3 z=2(x-y)4)将下面的矩阵赋值给变量m1,在workspace中察看m1在内存中占用的字节数。
⎡162313⎤⎢511108⎥⎥m1=⎢⎢97612⎥⎢⎥414151⎣⎦执行以下命令>>m1(2 , 3)>>m1(11)>>m1(: , 3)>>m1(2 : 3 , 1 : 3)>>m1(1 ,4)+ m1(2 ,3)+ m1(3 ,2)+ m1(4 ,1)5)执行命令>>helpabs 查看函数abs的用法及用途,计算abs(3 + 4i)6)执行命令>>x=0:0.1:6*pi;>>y=5*sin(x);>>plot(x,y)7)运行MATLAB的演示程序,>>demo,以便对MATLAB有一个总体了解。
五、思考题1、以下变量名是否合法?为什么?(1)x2(2)3col(3)_row (4)for2、求以下变量的值,并在MATLAB中验证。
数值计算方法matlab 第二章 求根
1第二章作业问题描述:不同温度的两种流体进入混合器混合,流出时具有相同的温度。
流体A 和B 的热容(单位:cal/(mol ·K))分别为:2623.381 1.80410 4.30010pA c T T --=+⨯-⨯ 1528.592 1.29010 4.07810pB c T T --=+⨯-⨯焓变(单位:cal/mol )为21T p T H c dT ∆=⎰。
A 进入混合器的温度为400℃,B 进入混合器的温度为700℃,A 的量(mol )是B 的量(mol )的两倍,试确定流体离开混合器的温度。
问题分析: 初始情况下,气体A 的温度比气体B 的温度低,故在混合过程中,气体A 温度升高,气体B 温度降低。
由于没有外界加热或者做功,混合气体整体的焓变应该为零。
设A 有2mol ,B 有1mol ,根据焓变公式计算得到:21-262400-22632= 6.762+3.608108.60010)6.762 1.80410 2.867105407.712T TA pA T H c dT T T dTT T T --∆=⨯-⨯=+⨯-⨯-⎰⎰(21-152700-1253=+1.29010 4.07810)0.64510 1.3591032958.030T TB pB T H c dT T T dTT T T --∆=⨯-⨯=+⨯-⨯-⎰⎰(8.5928.592而0A B H H ∆+∆=,故该问题最后变成求解方程2263()15.3548.2541016.4571038365.742f T T T T --=+⨯-⨯-的根的问题。
接下来将采用二分法、试位法以及牛顿法进行改方程的求解。
方程保存为f.m ,可在压缩文件中找到。
一、 二分法二分法的基本思想为,确定有根区间,然后不断将区间二等分,通过判断f(x)的符号,逐步将区间缩小,直到有根区间足够小,便可满足精度要求的近似根。
本例中,可以清楚的得到有根区间为(400,700)。
计算方法matlab实验指导
计算方法上机实验指导一、非线性方程求解(一)问题的指出 二分法 1.方法概要假定()f x 在[,]a b 上连续,()()0f a f b <且()f x 在(,)a b 内仅有一实根*x 取区间中点c ,若()0f c =,则c 恰为其根,否则,根据()()0f a f c <是否成立,可判断出根所属的新的有根子区间(,)a c 或(,)c b ,为节省内存,仍称其为(,)a b 。
运算重复进行,直到满足精度要求为止,即*||c x b a ε-<-<。
式中,a b 为新的有根子区间的端点。
2.计算框图Nowton 迭代法 1.方法概要0x 为初始猜测,则由递推关系1()()k k k k f x x x f x +=-' 产生逼近解*x 的迭代序列{}k x ,这个递推公式就是Newton 法。
当0x 距*x 较近时,{}k x 很快收敛于*x 。
但当0x 选择不当时,会导致{}k x 发散。
故我们事先规定迭代的最多次数。
若超过这个次数,还不收敛,则停止迭代另选初值。
2.计算框图(二)目的掌握二分法与牛顿法的基本原理及应用 (三)要求1.用二分法计算方程2sin 02x x -=在(1,2)内的根的近似值 2.用二分法计算方程310x x --=在(1,1.5)内的根的近似值5(0.510)ε-=⨯。
3.用牛顿法求下列非线性方程的近似根。
① 10x xe -= 00.5x = ② 310x x --= 01x =③ 2(1)(21)0x x --= 00.45x = 00.65x = 4.用改进的牛顿法12()()k k k k f x x x f x +=-'计算方程20(1)(21)00.55x x x --==的近似根,并与要求3.中的③的结果进行比较。
二、Gauuss 列主元消去法(一)问题的提出由地一般线性方程组在使用Gauss 消去法求解时,从求解过程中可以清楚地看到,若(1)0k kk a -=,必须施以行交换的手续,才能使消去过程继续下去。
实验五+MATLAB数值计算(含实验报告)
实验五 MATLAB 数值计算一、实验目的1.掌握求数值导数和数值积分的方法。
2.掌握代数方程数值求解的方法。
3.掌握常微分方程数值求解的方法。
二、实验的设备及条件计算机一台(带有MATLAB7.0以上的软件环境)。
设计提示1.参考本节主要内容,学习并理解相关函数的含义及调用方法。
三、实验内容1.线性系统方程:分别使用左除(\)和求逆(inv )求解下面系统方程的解:⎪⎩⎪⎨⎧=+=+=++377251463c b b a c b a2. 数值积分:使用quad 和trapz 求解⎰-503/dx xe x 的数值积分,并与其解析解9243/5+--e 相比较;3. 请完成教材P154页中实验指导环节的实验内容第2题4. 请完成教材P155页中思考练习的第3题(1),并绘制解在该求解区间(即[0,5])上的图像;。
5、请完成教材P164页实验指导环节的实验内容第5题。
(提示:该函数的符号导数,可以通过函数diff 求得。
首先定义符号变表达式,如求sin(x)的一阶符号导数,可以先定义f=’sin(x)’;df=diff(f);可求得df=cos(x)。
其中df 即为函数f 的一阶符号导数)。
四、实验报告要求(包含预习报告要求和最终报告要求)1.实验名称2.实验目的3.实验设备及条件4.实验内容及要求5.实验程序设计指程序代码。
6.实验结果及结果分析实验结果要求必须客观,现象。
结果分析是对实验结果的理论评判。
7.实验中出现的问题及解决方法8. 思考题的回答五、实验报告的提交方式Word文档,命名方式:实验号_你的学号_姓名例如本次实验:实验一_000000001_张三.doc(信息101提交报告邮箱):E_mail: *******************(网络工程101提交作业邮箱):E_mail: *******************(注意网络班的M是大写的)下一次课前提交,过期不收!六、参考文献参考教材和Matlab帮助文件。
数值计算方法实验指导书
3) 特殊的三维图形函数 * [x,y,z]=sphere(n) % 画球,n 默认值 20 例: >> [a,b,c]=sphere(40); >> surf(a,b,c) >> axis('equal'); >> axis('square'); * [x,y,z]=cylinder(R,N) 格数 例: >> >> >> >> x=0:pi/20:pi*3; r=5+cos(x); [a,b,c]=cylinder(r,30); mesh(a,b,c) %R 母线向量,N 分
-1-
数值计算方法实验指导书
电子与信息工程系
-2-
数值分析实验< 数值分析实验<一> ---- Matlab 绪论 一\ 实验目的 1) 熟悉 Matlab 的运行环境及各种窗口 2) 掌握 Matlab 的矩阵变量类型,矩阵输入和矩阵的基本运算 3) 掌握命令及函数文件的作用及区别,并编写简单的 M 文件 4) 能熟练的向查寻目录中添加新目录,掌握常用的 Matlab 系统命令 二\ 实验内容 一> Matlab 启动与环境设置 1)启动 双击桌面图标 开始>程序>Matlab 安装目录>bin>matlab 2)环境设置 命令窗口(Command Window) 执行命令行,Matlab 主窗口; 窗口颜色及字体 File>Preferences.. 当前目录(Current Directory) File>Set Path 用于将新文件夹加入搜索路径,设置当前文件默 认目录; 3)Matlab 常用命令 上下箭头 调出最新用过的命令,重新执行 cd+目录名 改变当前目录 help 显示当前搜索路径中所有目录名称 help+函数(类)名 查找函数(类),给出函数用法及参数 lookfor+函数关键字 查询根据关键字搜索到的相关函数 exist+变量名 变量检验函数 what 目录中文件列表 who 内存变量列表 whos 内存变量详细信息 which 确定文件位置 clc 清屏 ! 调用 Dos 命令 4)联机演示系统 Help>Demos.. 输入命令:intro 二>Matlab 基本运算操作 1)数据类型 变量 区分大小写,长度不超过 31,字母开头 常量 i,j 虚单位,定义 sqrt(-1) pi 圆周率 eps 浮点运算的相对精度 exp(-52) NaN Not-a-Number,表示不定值
《数学建模》实验指导4_matlab数值计算
《数学建模》实验指导4_matlab数值计算实验:matlab 数值计算实验目的:1. 掌握用matlab 进行插值、拟合、方程求解等数值计算的方法。
实验内容:1. 某气象观测站测得某日6:00-18:00之间每隔2小时的温度如下:时间 6 8 10 12 14 16 18 温度 18 20 22 25 30 28 24 试用三次样条插值求出该日6:30,8:30,10:30,12:30,14:30,16:30的温度。
2. 已知lg(x)在[1,101]区间11个整数采样点x=1:10:101的函数值lg(x),试求lg(x)的5次拟合多项式p(x),并分别绘制出lg(x)和p(x)在[1,101]区间的函数曲线。
提示: 对数表示: 以e 为底的是log() 以10为底的是log10() 以2为底的是log2()3. 求以下非线性方程组的解:1212122x x x x e x x e --?-=?-+=? 4. 求以下有约束最值:22min (,)120f x y x yx y x y =+?+≤?-≥?5.求0.6220.611/0.60.6y dy --?的值,画出被积函数在[-0.6,0.6]内的函数图形。
提示:绘制已经定义的函数的命令为:ezplot('fun',[a,b]).提示:● 一维插值:Y1=interp1(X,Y,X1,'method')1. 函数根据X 、Y 的值,计算函数在X1处的值。
X 、Y 是两个等长的已知向量,分别描述采样点和样本值,X1是一个向量或标量,描述欲插值的点,Y1是一个与X1等长的插值结果。
method 是插值方法,允许的取值有'linear'(线性插值)、'nearest'(最近插值)、'spline'(三次样条插值)、'cubic'(三次多项式插值),缺省值是'linear'。
数值计算方法-实验指导书-8学时
本科生实验报告实验课程数值计算方法学院名称机电工程学院专业名称机械工程学生姓名学生学号指导教师实验地点实验成绩二〇二三年十一月二〇二三年十二月目录实验1 MATLAB的基本运算 (1)实验2 MALTAB多项式运算 (14)实验3 图形的可视化及修饰处理 (16)实验4 SIMULINK仿真实验 (19)实验1 MATLAB的基本运算一、实验目的基本掌握MATLAB向量、矩阵、数组的生成及其基本运算(区分数组运算和矩阵运算)、常用的数学函数、以及字符串的操作。
二、实验内容1向量的生成和运算;2矩阵的创建、引用和运算;3多维数组的创建及运算;4字符串的操作。
三、实验步骤1.向量的生成和运算(1) 向量的生成①直接输入法:>> A=[1;2;3;4;5]②冒号生成发:>> A=1:2:10 ,B=1:10 ,C=10:-1:1函数生成法:linspace( )是线性等分函数,logspace( )是对数等分函数。
>> A=linspace(1,10)B=linspace(1,30,10)>> A=logspace(0,4,5)(2) 向量的运算维数相同的行向量只可以相加减,维数相同的列向量也可以相加减,标量可以与向量直接相乘除。
>> A=[1 2 3 4 5], B=3:7,>> AT=A', BT=B',>> E1=A+B, E2=A-B>> F=AT-BT,>> G1=3*A, G2=B/3,②向量的点积与叉积运算。
>> A=ones(1,10);B=1:10; BT=B';>> E1=A*BT2.矩阵的创建、引用和运算(1)矩阵的创建和引用m 元素构成的矩阵结构,行向量和列向量是矩阵的特殊形式。
矩阵是由n①直接输入法:>> A=[1 2 3;4 5 6]>> B=[ 1 4 72 5 83 6 9 ]>> A(1)>> A(4:end)>> B(:,1)>> B(:)>> B(5)抽取法>> clear>> A=[1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16] >> B=A(1:3,2:3)>> C=A([1 3],[2 4])>> A([1 3;2 4])③函数法:>> A=ones(3,4)>> B=zeros(3)>> C=eye(3,2)>> D=magic(3)(2) 矩阵的运算①矩阵的加减、数乘与乘法已知矩阵:>> A=[1 23 -1],>> B=[-1 01 2]>> A+B >> 2*A >> 2*A-3*B >> A*B②矩阵的逆矩阵>> format rat;A=[1 0 1;2 1 2;0 4 6] >> A1=inv(A)>> A*A1③矩阵的除法>> a=[1 2 1;3 1 4;2 2 1],b=[1 1 2],d=b'>> c1=b*inv(a),c2=b/a>> c3=inv(a)*d, c4=a\d3.多维数组的创建及运算数组运算用小圆点加在运算符的前面表示,以区分矩阵的运算。
数值计算方法matlab 第一章 误差分析
1 第一章作业1.对一个数求和100000次。
对数1以单精度方式求和,对数0.00001分别以单精度和双精度方式求和。
问题分析:单精度方式使用函数single(),双精度求和为matlab自动调整,不需要特别说明。
程序编写如下:运行结果:实验结果分析:不难看出,对于1进行单精度求和得到的结果和期望值一致,但是对0.00001进行单精度求和的结果却存在误差,对0.00001进行双进度求和,误差得到减小。
这是由于量化误差造成的,0.00001在计算机中并不能准确表示,只能对其进行量化处理,得到一个和真值有一点区别的量化值,小量计算中可以忽略,但在计算了100000后误差积累,导致了最后的结果误差较大。
双精度的情况下,该误差小得多。
当x=0.1时,从1x -开始,然后每次加入一项来分别计算。
在每加入一个新项后,计算近似百分比相对误差,直到近似误差估计值的绝对值小于与五位有效数字一致的误差准则时停止计算。
问题分析:本例中,要保证5位有效数字,因此容限误差为:256s (0.510)%510--ε=⨯=⨯近似百分比误差为: -100%a ε=⨯当前近似值前一近似值当前近似值真误差为:-100%ε=⨯真值近似值真值跳出循环的标准为:a |s |ε<ε程序编写如下:运行结果如下:3实验结果分析:实验结果表明,当计算到第6次时,近似误差就已经小于了容限值,循环结束。
随着添加多的项数,实际误差和近似误差都减小了,说明了计算精度在逐步提高。
我们可以通过改的值来调节所需要的计算精度。
变s。
《数值计算方法》(第二版) 数值计算实验 matlab 有截图
数值计算方法(第二版)数值实验学院信息学院专业计算机应用技术姓名张书涵学号12077503005任课老师孙云平使用软件MATLAB 7.02012 年12 月15日一、实验目的和意义1、通过上机学会matlab数学软件的使用,根据算法2.2的思想和步骤,实现解三对角方程组的追赶法。
2、运用所学的三种迭代法即Jacobi迭代法、Gauss-Seidel迭代法、共轭梯度法算法的思想和步骤,解各类线性方程组,编出算法程序。
3、根据插值法的思想,掌握样条插值的步骤和思想,并根据样本值用matlab软件绘制图形,熟悉了matlab的绘图函数。
4、只有通过动手编程,才能意识到自己对课本上知识的欠缺。
通过本次实验,复习本学期所学知识,查漏补缺。
二、实验环境matlab7.0三、实验结果第一章误差1.利用循环语句,计算数列√5,√√5,√√√5,……的极限,要求误差小于10^-8。
程序设计如下:x =sqrt(5);m=0;while abs(x-m)>1e-8m=result;x=sqrt(x);endx运行结果:第二章 解线性方程组的直接解法14. 考虑梯形电阻电路的设计,电路如下:电路中的各个电流{1i ,2i ,…,8i }须满足下列线性方程组:R V i i =- 22 210 252321=-+-i i i 0 252 432=-+-i i i 0 252 543=-+-i i i 0 252 654=-+-i i i 0 252 765=-+-i i i 0 252 876=-+-i i i 052 87=+-i i这是一个三对角方程组。
设V 220=V ,Ω=27R ,运用追赶法,求各段电路的电流量。
程序设计如下:a=[0 -2 -2 -2 -2 -2 -2 -2]; b=[2 5 5 5 5 5 5 5]; c=[-2 -2 -2 -2 -2 -2 -2]; d=[8.1481 0 0 0 0 0 0 0]; for i=2:8 a(i)=a(i)/b(i-1); b(i)=b(i)-c(i-1)*a(i); d(i)=d(i)-a(i)*d(i-1); end;d(8)=d(8)/b(8); for i=7:-1:1d(i)=(d(i)-c(i)*d(i+1))/b(i); end;x=d; x运行结果:第三章 解线性方程组的迭代法14. 试分别用(1)Jacobi 迭代法;(2)Gauss-Seidel 迭代法;(3)共轭梯度法解线性方程组⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡--=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡--------1217142712151534112323537123219143211054321x x x x x迭代初始向量取)0(x =(0,0,0,0,0T)。
实验二MATLAB数值计算
实验二 MATLAB 数值计算
1.实验目的
(1)掌握MATLAB 变量的使用
(2)掌握MATLAB 数组的创建,
(3)掌握MA TLAB 数组和矩阵的运算。
(4)熟悉MATLAB 多项式的运用
2.实验仪器
(1)Matlab6.5应用软件安装版 一套
(3)PC 机 一台
3. 实验原理
矩阵运算和数组运算在MA TLAB 中属于两种不同类型的运算,数组的运算是从数组元素出发,针对每个元素进行运算,矩阵的运算是从矩阵的整体出发,依照线性代数的运算规则进行。
4. 实验步骤
(1)使用冒号生成法和定数线性采样法生成一维数组。
(2)使用MA TLAB 提供的库函数reshape ,将一维数组转换为二维和三维数组。
(3)使用逐个元素输入法生成给定变量,并对变量进行指定的算术运算、关系运算、逻辑运算。
(4)使用MA TLAB 绘制指定函数的曲线图,将所有输入的指令保存为M 文件。
5. 实验报告内容
(1)在[0,2*pi]上产生50个等距采样数据的一维数组,用两种不同的指令实现。
(2)将一维数组A=1:18,转换为2×9数组和2×3×3数组。
(3)A=[0 2 3 4 ;1 3 5 0],B=[1 0 5 3;1 5 0 5],计算矩阵A 转置与B 乘积,数组A 、B 乘积,计算A&B,A|B,~A,A= =B,A>B 。
(4)绘制y= 0.53t e -t*t*sin(t),t=[0,pi]并标注峰值和峰值时间,添加标题y= 0.53t e -t*t*sint ,将所有输入的指令保存为M 文件\。
实验三MATLAB数值运算
实验三MATLAB数值运算实验三 MATLAB 数值运算一、实验目的掌握MA TLAB 的数值运算及其运算中所用到的函数,掌握结构数组和细胞数组的操作。
二、实验内容(1)多项式运算(2)多项式插值和拟合(3)数值微积分(4)结构数组和细胞数组三、实验步骤1、多项式运算(1)多项式表示。
在MATLAB 中,多项式表示成向量的形式。
如:953234+-+s s s 在MATLAB 中表示为>> s=[1 3 -5 0 9] s =1 3 -5 0 9(2)多项式的加减法相当于向量的加减法,但须注意阶次要相同。
如不同,低阶的要补0.如多项式9322++s s 与多项式74532 34++-+s s s s 相加。
>> S1=[ 0 0 2 3 11] >> S2=[ 1 3 -5 4 7 ] >> S3=S1+S2 S1 =0 0 2 3 11 S2 =1 3 -5 4 7 S3 =1 3 -3 7 18(3)多项式的乘、除法分别用函数conv 和deconv 实现 >> S1=[ 2 3 11] >> S2=[1 3 -5 4 7] >> S3=conv(S1,S2) >>S4=deconv(S3,S1) >> S1=[ 2 3 11] S1 =2 3 11 >> S2=[1 3 -5 4 7] S2 =1 3 -5 4 7 >> S3=conv(S1,S2) S3 =2 9 10 26 -29 65 77 >> S4=deconv(S3,S1)S4 =1 3 -5 4 7(4)多项式求根用函数roots>> S1=[ 2 4 2]>> roots(S1)>> S1=[ 2 4 2]S1 =2 4 2>> roots(S1)ans =-1-1(5) 多项式求值用函数polyval>> S1=[ 2 4 1 -3]>> polyval(S1,3)>> x=1:10>> y=polyval(S1,x)>> S1=[ 2 4 1 -3]S1 =2 4 1 -3>> polyval(S1,3)ans =90>> x=1:10x =1 2 3 4 5 6 7 8 9 10>> y=polyval(S1,x)y =Columns 1 through 74 31 90 193 352 579886Columns 8 through 101285 1788 2407练习:求 )12()1)(3)(1(32+++++s s s s s 的“商”及“余”多项式答案:>> S1=[2 0 1] >> S2=[1 3] >> S3=[1 1] >> S4=[3 0 2 1] >> S1=[2 0 1] S1 =2 0 1>> S2=[1 3] S2 =1 3>> S3=[1 1] S3 =1 1>> S4=[3 0 2 1] S4 =3 0 2 1>> S5=conv(S1,S2,S3) Error using ==> conv Too many input arguments.>> S5=conv(S1,S2) S5 =2 6 1 3>> S6=conv(S5,S3)S6 =2 8 7 4 3>> [q,r]=deconv(S6,S4)q =0.6667 2.6667r =0 0 5.6667 -2.0000 0.33332. 多项式插值和拟合有一组实验数据如附表1—1所示x 1 2 3 4 5 6 7 8 9 10y 16 32 70 142 260 436 682 1010 1432 1960 \请分别用拟合(二阶和三阶)和插值(线性和三次样条)的方法估测X=9.5时Y的值。
最新实验四 MATLAB数值计算
精品资料实验四M A T L A B数值计算........................................实验四 MATLAB数值计算一、实验目的1.掌握数据统计和分析的方法2.掌握数据插值和曲线拟合的方法3.掌握求数值导数和数值积分的方法4.掌握代数方程数值求解的方法5.掌握常微分方程数值求解的方法二、实验内容1.利用matlab提供的rand函数生成30,000个符合均匀分布的随机数,然后检验随机数的性质:(1)均值和标准方差;(2)最大元素与最小元素;(3)大于0.5的随机数个数占总数额百分比。
>> x=rand(1,30000);Mean=mean(x) %均值Std=std(x,0,2)%标准方差MAX=max(x) %最大值MIN=min(x) %最小值n=sum(x>0.5);percentage=n/30000 %大于0.5的随机数个数占总数额百分比Mean =0.5023Std =0.2886MAX =1.0000MIN =2.4530e-005percentage =0.50632.按下表用3次样条方法插值计算0~900范围内整数点的正弦值和0~750范围内整数点的正切值,然后用5次多项式拟合方法计算相同的函数值,并将两种计算结果进行比较。
t1=0:15*pi/180:0.5*pi;t2=0:15*pi/180:75*pi/180;Sina=[0,0.2588,0.5,0.7071,0.866,0.9659,1];Tana=[0,0.2679,0.5774,1,1.732,3.732];x1=0:pi/180:0.5*pi; %3次样条插值x2=0:pi/180:5/12*pi;T1=interp1(t1,Sina,x1,'spline');T2=interp1(t2,Tana,x2,'spline');p1=polyfit(t1,Sina,5); %多项式拟合disp(p1)L1=polyval(p1,t1);p2=polyfit(t2,Tana,5);disp(p2)L2=polyval(p2,t2);x=linspace(0,2*pi,100);subplot(2,1,1);plot(t1,L1,':o',x1,T1,'-+',x,sin(x));title('sin(x)');axis([0,0.5*pi,0,1]);subplot(2,1,2);plot(t2,L2,'-*',x2,T2,':.',x,tan(x));title('tan(x)')axis([0,5/12*pi,0,4]);sin(x)、tan(x)的5次多项式拟合的系数为:0.0054 0.0075 -0.1745 0.0036 0.9994 0.0000 4.3197 -10.2021 9.2877 -3.2591 1.4027 0.00003.(1)求函数22()sin cos f x x x =+在点,,,6432x ππππ=的数值导数。
matlab数值计算实验报告
matlab数值计算实验报告Matlab数值计算实验报告一、实验目的本次实验的目的是通过使用Matlab软件进行数值计算,掌握Matlab的基本操作和数值计算方法,了解数值计算的基本原理和方法,提高数学建模和计算能力。
二、实验内容本次实验主要包括以下内容:1. Matlab基本操作:包括Matlab软件的安装、启动、界面介绍、基本命令和语法等。
2. 数值计算方法:包括数值积分、数值微分、线性方程组的求解、非线性方程的求解、插值和拟合等。
3. 数学建模:通过实际问题的建模,运用Matlab进行数值计算,得到问题的解答。
三、实验步骤1. Matlab基本操作(1)安装Matlab软件:根据官方网站提供的下载链接,下载并安装Matlab软件。
(2)启动Matlab软件:双击Matlab图标,启动Matlab软件。
(3)界面介绍:Matlab软件界面分为命令窗口、编辑器窗口、工作区窗口、命令历史窗口、变量编辑器窗口等。
(4)基本命令和语法:Matlab软件的基本命令和语法包括数学运算、矩阵运算、逻辑运算、控制语句等。
2. 数值计算方法(1)数值积分:使用Matlab中的quad函数进行数值积分,求解定积分。
(2)数值微分:使用Matlab中的diff函数进行数值微分,求解函数的导数。
(3)线性方程组的求解:使用Matlab中的inv函数和\运算符进行线性方程组的求解。
(4)非线性方程的求解:使用Matlab中的fsolve函数进行非线性方程的求解。
(5)插值和拟合:使用Matlab中的interp1函数进行插值和拟合。
3. 数学建模(1)实际问题的建模:选择一个实际问题,将其转化为数学模型。
(2)运用Matlab进行数值计算:使用Matlab进行数值计算,得到问题的解答。
四、实验结果通过本次实验,我掌握了Matlab的基本操作和数值计算方法,了解了数值计算的基本原理和方法,提高了数学建模和计算能力。
在实际问题的建模和运用Matlab进行数值计算的过程中,我深刻体会到了数学建模和计算的重要性,也发现了Matlab在数学建模和计算中的重要作用。
数学实验指导书matlab
数学实验指导书matlab【数学实验指导书】MATLAB一、实验背景和目的数学实验是数学教学中重要的一环,它能够帮助学生巩固和应用所学的数学知识,培养学生的实际问题解决能力。
MATLAB作为一种强大的数学计算软件,被广泛应用于数学实验中。
本实验旨在通过使用MATLAB软件,帮助学生掌握基本的MATLAB操作和数学实验方法,进一步提高数学建模和问题求解的能力。
二、实验内容1. MATLAB基本操作a) 启动MATLAB软件并了解主界面的组成部分。
b) 学习MATLAB的基本命令行操作,如变量定义、数学运算、矩阵操作等。
c) 掌握MATLAB的图形绘制功能,包括绘制函数图像、散点图等。
2. 数学建模实验a) 选择一个数学问题作为研究对象,例如:求解一元二次方程的根。
b) 使用MATLAB进行数学建模,包括问题分析、模型构建和求解过程。
c) 分析和解释模型的结果,对实际问题进行合理的解释和预测。
三、实验步骤1. MATLAB基本操作a) 启动MATLAB软件后,观察主界面的组成部分,包括命令窗口、工作空间、编辑器等。
b) 在命令窗口中练习基本的MATLAB命令,如定义变量、进行数学运算、创建矩阵等。
c) 使用plot函数绘制函数图像,并尝试修改线型、颜色等参数。
2. 数学建模实验a) 选择一个数学问题,例如求解一元二次方程ax^2 + bx + c = 0的根。
b) 在MATLAB中定义方程的系数a、b、c,并使用根据求根公式计算方程的根。
c) 绘制方程的图像,并标注根的位置。
四、实验结果与分析1. MATLAB基本操作a) 在命令窗口中成功定义了多个变量,并进行了数学运算,验证了MATLAB的基本功能。
b) 使用plot函数绘制了函数y = sin(x)的图像,并成功修改了线型和颜色。
2. 数学建模实验a) 成功求解了一元二次方程ax^2 + bx + c = 0的根,并将结果输出到命令窗口。
b) 绘制了方程的图像,并通过图像验证了求解结果的准确性。
(实验2)MATLAB的数值计算一
实验二MATLAB的数值计算(一)一、实验目的1、学会如何创建、使用和保存MATLAB的矩阵和数组。
2、学会矩阵和数组的基本操作二、实验准备知识1、MATLAB用于产生常用特殊矩阵的函数见教材。
实验中用到的产生单位阵的函数为eye(m,n),ones(m,n),rand(m,n), m, n 为矩阵的行和列。
用函数diag(v)可建立以向量v为主对角线元素的对角阵。
2、程序生成向量:生成有规律元素的向量,可用冒号运算符;线性等分向量,可用函数y=linespace(x1,x2,n);对数等分向量,可用函数y=logspace(x1,x2,n)。
3、MATLAB通过确认矩阵下标,可以对矩阵进行插入子块、提取子块和重排子块的操作。
A(m,n):提取第m行,第n列元素;A(:,n):提取第n列元素;A(m,:):提取第m行元素;A(m1:m2,n1:n2):提取第m1行到第m2行和第n1列到第n2列的所有元素(提取子块)。
4、矩阵扩展:如果在原矩阵中一个不存在的地址位置上设定一个数(赋值),则该矩阵会自动扩展行列数,并在该位置上添加这个数,而且在其他没有指定的位置补零。
三、实验内容和步骤1、输入元素为从0到20,步距为2的一个向量P。
2、生成一个元素从1到100,线性等分的(1*10)维的行向量。
3、输入矩阵12343210M⎡⎤=⎢⎥⎣⎦,并将矩阵的2行3列元素改为10。
4、产生一个对角阵,主对角线元素分别为1、2、3、4。
5、产生一个4阶随机矩阵R,令矩阵R1等于矩阵R的第3行,令矩阵R2等于矩阵R的第1、3列。
四、问题和讨论1、两个矩阵相乘以及求一个矩阵的逆分别有何前提条件?2、矩阵运算与数组运算有哪些区别,请举例说明。
数值计算方法实验指导(Matlab版)
《数值计算方法》实验指导(Matlab版)学院数学与统计学学院计算方法课程组《数值计算方法》实验1报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验1 算法设计原则验证(之相近数相减、大数吃小数和简化计算步骤) 2. 实验题目(1) 取1610=z ,计算z z -+1和)1/(1z z ++,验证两个相近的数相减会造成有效数字的损失.(2) 按不同顺序求一个较大的数(123)与1000个较小的数(15310-⨯)的和,验证大数吃小数的现象.(3) 分别用直接法和九韶算法计算多项式n n n n a x a x a x a x P ++++=--1110)(在x =1.00037处的值.验证简化计算步骤能减少运算时间.对于第(3)题中的多项式P (x ),直接逐项计算需要2112)1(+=+++-+n n n 次乘法和n 次加法,使用九韶算法n n a x a x a x a x a x P ++++=-)))((()(1210则只需要n 次乘法和n 次加法. 3. 实验目的验证数值算法需遵循的若干规则. 4. 基础理论设计数值算法时,应避免两个相近的数相减、防止大数吃小数、简化计算步骤减少运算次数以减少运算时间并降低舍入误差的积累.两相近的数相减会损失有效数字的个数,用一个大数依次加小数,小数会被大数吃掉,乘法运算次数太多会增加运算时间. 5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab6. 实验过程(1) 直接计算并比较;(2) 法1:大数逐个加1000个小数,法2:先把1000个小数相加再与大数加; (3) 将由高次项到低次项的系数保存到数组A[n]中,其中n 为多项式次数.7. 结果与分析 (1) 计算的z z -+1= ,)1/(1z z ++.分析:(2) 123逐次加1000个6310-⨯的和是 ,先将1000个6310-⨯相加,再用这个和与123相加得.分析:(3) 计算次的多项式:直接计算的结果是,用时;用九韶算法计算的结果是,用时.分析:8. 附录:程序清单(1) 两个相近的数相减.%*************************************************************%* 程序名:ex1_1.m *%* 程序功能:验证两个相近的数相减会损失有效数字个数 *%*************************************************************z=1e16;x,y======================================================================(2) 大数吃小数%*************************************************************%* 程序名:ex1_2.m *%* 程序功能:验证大数吃小数的现象. *%*************************************************************clc; % 清屏clear all; % 释放所有存变量format long; % 按双精度显示浮点数z=123; % 大数t=3e-15; % 小数x=z; % 大数依次加小数% 重复1000次给x中加上ty=0; % 先累加小数% 重复1000次给y中加上ty=z + y; % 再加到大数x,y======================================================================(3) 九韶算法%*************************************************************%* 程序名:ex1_3.m *%* 程序功能:验证九韶算法可节省运行时间. *%*************************************************************clc; % 清屏clear all; % 释放所有存变量format long; % 按双精度显示浮点数A=[8,4,-1,-3,6,5,3,2,1,3,2,-1,4,3,1,-2,4,6,8,9,50,-80,12,35,7,-6,42,5,6,23,74,6 5,55,80,78,77,98,56];A(10001)=0; % 扩展到10001项,后面的都是分量0% A为多项式系数,从高次项到低次项x=1.00037;n=9000; % n为多项式次数% 直接计算begintime=clock; % 开始执行的时间 % 求x的i次幂% 累加多项式的i次项endtime=clock; % 完毕执行的时间time1=etime(endtime,begintime); % 运行时间disp('直接计算');disp(['p(',num2str(x),')=',num2str(p)]);disp([' 运行时间: ',num2str(time1),'秒']);% 九韶算法计算begintime=clock; % 开始执行的时间% 累加九韶算法中的一项endtime=clock; % 完毕执行的时间time2=etime(endtime,begintime); % 运行时间disp(' ');disp('九韶算法计算');disp(['p(',num2str(x),')=',num2str(p)]);disp([' 运行时间: ',num2str(time2),'秒']);《数值计算方法》实验1报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验1 算法设计原则验证(之数值稳定性) 2. 实验题目 计算定积分⎰==-1110,1,0,d n x e xI x nn ,分别用教材例1-7推导出的算法A 和B ,其中:算法A :⎩⎨⎧≈-=-6321.0101I nI I n n 算法B :⎪⎩⎪⎨⎧≈-=-0)1(1101I I nI n n 验证算法不稳定时误差会扩大.3. 实验目的验证数值算法需遵循的若干规则. 4. 基础理论设计数值算法时,应采用数值稳定性好的算法.数值稳定的算法,误差不会放大,甚至会缩小;而数值不稳定的算法会放大误差. 5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab6. 实验过程分别用数组IA[ ]和IB[ ]保存两种算法计算的结果. 7. 结果与分析 运行结果:(或拷屏)8. 附录:程序清单%*************************************************************%* 程序名:ex1_4.m *%* 程序功能:验证数值稳定性算法可控制误差. *%*************************************************************clc; % 清屏clear all; % 释放所有存变量format long; % 按双精度显示浮点数I=[0.856, 0.144, 0.712, 0.865, ...0.538, 0.308, 0.154, 0.938, ...0.492, 0.662, 0.843];% 保留14位小数的精确值, …是Matlab中的续行符% 算法AIA(1) = 0.6321; % Matlab下标从1开始,所以要用IA(n+1)表示原问题中的I(n)% 算法Bdisp('n 算法A 算法B 精确值');for n=1:11fprintf('%2d %14.6f %14.6f %14.6f\n',n-1,IA(n),IB(n),I(n));end% n显示为2位整数, 其它显示为14位其中小数点后显示6位的小数《数值计算方法》实验1报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验1 算法设计原则(除数绝对值不能太小) 2. 实验题目将线性方程组增广矩阵利用初等行变换可化为⎪⎪⎭⎫⎝⎛→-⎪⎪⎭⎫ ⎝⎛→-⎪⎪⎭⎫ ⎝⎛''0'0''02221112'12221121112222211121122121121b a b a r r b a b a a r r b a a b a a a a a a由此可解得'/',/'22221111a b x a b x ==.分别解增广矩阵为161011212-⎛⎫ ⎪⎝⎭和162121011-⎛⎫⎪⎝⎭的方程组,验证除数绝对值远小于被除数绝对值的除法会导致结果失真. 3. 实验目的验证数值算法需遵循的若干规则. 4. 基础理论设计数值算法时,应避免除数绝对值远小于被除数绝对值的除法,否则绝对误差会被放大,使结果失真. 5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab6. 实验过程用二维数组A 和B 存放方程组的增广矩阵,利用题目所给初等行变换求解方程组. 7. 结果与分析第1种顺序的方程组的解为x =,y =;第2种顺序的方程组的解为x =,y =. 分析:8. 附录:程序清单%************************************************************* %* 程 序 名:ex1_5.m * %* 程序功能:验证除数的绝对值太小可能会放大误差. * %*************************************************************clc;A=[1e-16, 1, 1; 2, 1, 2];B=[2, 1, 2; 1e-16, 1, 1]; % 增广矩阵% 方程组A% m = - a_{21}/a_{11} 是第2行加第1行的倍数% 消去a_{21}% m = - a_{12}/a_{22} 是第1行加第2行的倍数% 消去a_{12}, 系数矩阵成对角线% 未知数x1的值% 未知数x2的值disp(['方程组A的解: x1=',num2str(A(1,3)),', x2=',num2str(A(2,3))]); disp(' ');% 方程组B% m = - b_{21}/b_{11} 是第2行加第1行的倍数% 消去b_{21}% m = - b_{12}/b_{22} 是第1行加第2行的倍数% 消去b_{12}, 系数矩阵成对角线% 未知数x1的值% 未知数x2的值disp(['方程组B的解: x1=',num2str(B(1,3)),', x2=',num2str(B(2,3))]);《数值计算方法》实验2报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验2 非线性方程的迭代解法(之简单迭代法) 2. 实验题目用简单迭代法求方程010423=-+x x 在区间[1,2]的一个实根,取绝对误差限为410-.3. 实验目的掌握非线性方程的简单迭代法. 4. 基础理论简单迭代法:将方程0)(=x f 改写成等价形式)(x x ϕ=,从初值0x 开始,使用迭代公式)(1k k x x ϕ=+可以得到一个数列,若该数列收敛,则其极限即为原方程的解.取数列中适当的项可作为近似解. 5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab 6. 实验过程7. 结果与分析8. 附录:程序清单《数值计算方法》实验2报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验2 非线性方程的迭代解法(之Newton 迭代法) 2. 实验题目用Newton 迭代法求方程010423=-+x x 在区间[1,2]的一个实根,取绝对误差限为410-.3. 实验目的掌握求解非线性方程的Newton 迭代法. 4. 基础理论Newton 迭代法:解方程0)(=x f 的Newton 迭代公式为)(')(1k k k k x f x f x x -=+.5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab 6. 实验过程7. 结果与分析8. 附录:程序清单《数值计算方法》实验2报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验2 非线性方程的迭代解法(之对分区间法) 2. 实验题目用对分区间法求方程310x x --=在区间[1, 1.5]的一个实根,取绝对误差限为410-. 3. 实验目的掌握求解非线性方程的对分区间法. 4. 基础理论对分区间法:取[a ,b ]的中点p ,若f (p ) ≈ 0或b – a < ε,则p 为方程0)(=x f 的近似解;若f (a ) f (p ) < 0,则说明根在区间取[a ,p ]中;否则,根在区间取[p ,b ]中.将新的有根区间记为 [a 1,b 1],对该区间不断重复上述步骤,即可得到方程的近似根. 5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab 6. 实验过程用宏定义函数f (x );为了循环方便,得到的新的有根区间始终用[a ,b ]表示;由于新的有根区间可能仍以a 为左端点,这样会反复使用函数值f (a ),为减少运算次数,将这个函数值保存在一个变量fa 中;同样在判断新的有根区间时用到函数值f (p ),若新的有根区间以p 为左端点,则下一次用到的f (a )实际上就是现在的f (p ),为减少运算次数,将这个函数值保存在一个变量fp 中.算法的伪代码描述:Input :区间端点a ,b ;精度要求(即误差限)ε;函数f (x );最大对分次数N Output :近似解或失败信息7. 结果与分析8. 附录:程序清单说明: 源程序中带有数字的空行,对应着算法描述中的行号%**********************************************************%* 程序名:Bisection.m *%* 程序功能:使用二分法求解非线性方程. *%**********************************************************f=inline('x^3-x-1'); % 定义函数f(x)a=input('有根区间左端点: a=');b=input('右端点:b=');epsilon=input('误差限:epsilona=');N=input('最大对分次数: N=');1 % 对分次数计数器n置12 % 左端点的函数值给变量fafprintf('\n k p f(p) a(k) f(a(k))'); fprintf(' b(k) b-a\n');% 显示表头fprintf('%2d%36.6f%12.6f%12.6f%12.6f\n',0,a,fa,b,b-a);% 占2位其中0位小数显示步数0, 共12位其中小数6位显示各值3% while n≤ N 4 % 取区间中点p5% 求p 点函数值给变量fpfprintf('%2d%12.6f%12.6f',n,p,fp); % 输出迭代过程中的中点信息p 和f(p)6 % 如果f(p)=0或b-a 的一半小于误差限εfprintf('\n\n 近似解为:%f\n',p);% 则输出近似根p (7)return;% 并完毕程序 (7)89 % 计数器加110% 若f(a)与f(p)同号11% 则取右半区间为新的求根区间, 即a 取作p 12 % 保存新区间左端点的函数值 13% 否则14 % 左半区间为新的求根区间, 即b 取作p 15fprintf('%12.6f%12.6f%12.6f%12.6f\n',a,fa,b,b-a); %显示新区间端点与左端函数值、区间长度 16fprintf('\n\n 经过%d 次迭代后未达到精度要求.\n',N); % 输出错误信息(行17)《数值计算方法》实验2报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验2 非线性方程的迭代解法(之Aitken-Steffensen 加速法) 2. 实验题目用Aitken-Steffensen 加速法求方程010423=-+x x 在区间[1,2]的一个实根,取绝对误差限为410-.3. 实验目的熟悉求解非线性方程的Aitken-Steffensen 加速法. 4. 基础理论将方程0)(=x f 改写成等价形式)(x x ϕ=,得到从初值0x 开始的迭代公式)(1k k x x ϕ=+后,基于迭代公式)(1k k x x ϕ=+的Aitken-Steffensen 加速法是通过“迭代-再迭代-加速”完成迭代的,具体过程为kk k k k k k k k k k x y z z y x x y z x y +---===+2)(),(),(21ϕϕ. 5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab 6. 实验过程为了验证Aitken-Steffensen 加速法可以把一些不收敛的迭代加速成迭代收敛,我们使用将方程组变形为31021x x -=,取迭代函数31021)(x x -=ϕ,并利用宏定义出迭代函数.由于不用保存迭代过程,所以用x0表示初值同时也存放前一步迭代的值,y 和z 是迭代过程中产生的y k 和z k ,x 存放新迭代的结果.算法的伪代码描述:Input :初值x 0;精度要求(即误差限)ε;迭代函数φ(x );最大迭代次数N7. 结果与分析8. 附录:程序清单%************************************************************* %* 程 序 名:Aitken_Steffensen.m * %* 程序功能:用Aitken-Steffensen 加速法求方程. * %************************************************************* clc;clear all;phi=inline('0.5 * sqrt( 10 - x^3)'); % 迭代函数x0=input('初值: x0 = ');epsilon=input('误差限: epsilon='); N=input('最大迭代次数: N=');disp(' n 迭代中间值y(n-1) 再迭代结构z(n-1) 加速后的近似值x(n)'); fprintf('%2d%54.6f\n',0,x0);% 占2位整数显示步数0, 为了对齐, 占54位小数6位显示x01 % n 是计数器2 % while n<=Ny= 3 ; % 迭代 z= 3 ; % 再迭代 x= 3 ; % 加速% x0初值与前一步的近似值, y 和z 是中间变量, x 是下一步的近似值fprintf('%2d%18.6f%18.6f%18.6f\n',n,y,z,x);%显示中间值和迭代近似值6 % 如果与上一步近似解差的绝对值不超过误差限 fprintf('\n\n 近似解 x≈x(%d)≈%f \n',n,x);% 则输出近似根 (7), 可简略为: fprintf('\n\n 近似解 x=%f',x); return; % 并完毕程序(7) 8 % 相当于endif9 % 计数器加110 % 新近似值x 作为下一次迭代的初值 11fprintf('\n 迭代%d 次还不满足误差要求.\n\n',N); %输出错误信息(12)《数值计算方法》实验2报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验2 非线性方程的迭代解法(之Newton 下山法) 2. 实验题目用Newton 下山法求方程010423=-+x x 在区间[1,2]的一个实根,取绝对误差限为410-.3. 实验目的熟悉非线性方程的Newton 下山法. 4. 基础理论Newton 下山法:Newton 下山法公式为)(')(1k k kk k x f x f x x λ-=+,使|)(||)(|1k k x f x f <+,其中10≤<k λ.5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab 6. 实验过程定义函数f(x)和df(x),其中df(x)是f(x)的导函数.每步迭代时先取下山因子为1,尝试迭代,判断尝试结果是否满足下山因子,若满足则作为这步的迭代结果;否则将下山因子减半,然后再尝试.为防止当前的x k 是极小值点,附近不会有满足下述条件的其它点,使尝试陷入死循环,同时计算机中能表示出的浮点数也有下界,因此我们设置了最大尝试次数.当超过最大尝试次数时,不再进行下山尝试.由于反复尝试迭代且要判断下山条件,所以f (x 0)和f ‘(x 0)会反复使用,为避免重复计算浪费运行时间,将这两个值分别保存在变量fx0和dfx0.而尝试产生的节点,判断下山条件时要用到它的函数值,若尝试成功,这个点会作为下一步的初值再使用,所以把该点的函数值也保存在变量fx 中.算法的伪代码描述:Input :初值x 0;精度要求(即误差限)ε;函数与其导函数f (x )和f’(x);最大迭代次数N ;K 下山尝试最大次数Output :近似解或失败信息7. 结果与分析8. 附录:程序清单%*************************************************************%* 程序名:NewtonDownhill.m *%* 程序功能:用Newton下山法求解非线性方程. *%*************************************************************clc;clear all;f=inline('x^3-x-1'); % 函数f(x)df=inline('3*x^2-1'); % 函数f(x)的导函数x0=input('初值: x0 = ');epsilon=input('误差限: epsilon=');N=input('最大迭代次数: N=');K=input('最大下山尝试次数: K=');1 % 迭代次数计数器2 % 存x0点函数值fprintf('\n\n n x(n) f(x(n))\n'); % 显示表头fprintf('%2d%14.6f%14.6f\n',0,x0,fx0); % 2位整数显示0, 共14位小数6位显示x0和fx03 % while n≤ Ndisp(''); % 换行显示下山尝试过程的表头disp(' 下山因子尝试x(n) 对应f(x(n)) 满足下山条件');disp('');4 % 存x0点导数值, 每次下山尝试不用重新计算ifdfx0==0 % 导数为0不能迭代disp(‘无法进行Newton迭代’);return;endlambda=1.0; % 下山因子从1开始尝试k=1; % k下山尝试次数计数器while k<=K % 下山最多尝试K次% 下山公式fx=f(x); % 函数值fprintf('%22.6f%14.6f%14.6f',lambda,x,fx); % 显示尝试结果if (abs(fx)<abs(fx0)) % 判断是否满足下山条件fprintf(' 满足\n');break; % 是, 则退出下山尝试的循环elsefprintf(' 不满足\n');endlambda=lambda/2; % 不是, 则下山因子减半k=k+1; % 计数器加1endif k>Kfprintf('\n 下山条件无法满足, 迭代失败.\n\n');return;endfprintf('%2d%14.6f%14.6f\n',n,x,fx);% 2位整数显示步数n, 共14位小数6位显示下步迭代结果22 % 达到精度要求否fprintf('\n\n 方程的近似解为: x≈%f\n\n',x); % (23)return; % 达到, 则显示结果并完毕程序(23) end % (24)% 用x0,fx0存放前一步的近似值和它的函数值, 进行循环迭代25262728fprintf('\n 迭代%d次还不满足误差要求.\n\n',N);《数值计算方法》实验2报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验2 非线性方程的迭代解法(之弦截法) 2. 实验题目用弦截法求方程010423=-+x x 在区间[1,2]的一个实根,取绝对误差限为410-. 3. 实验目的熟悉非线性方程的弦截法. 4. 基础理论将Newton 迭代法中的导数用差商代替,得到弦截法(或叫正割法)公式)()()(111k k k k k k k x f x f x f x x x x --+---=.5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab 6. 实验过程不保存迭代过程,所以始终以x 0和x 1分别存放x k -1和x k ,而x 存放新产生的迭代值x k +1,这样,下一次迭代时需要把上一步的x 1(即x k )赋值于x 0(做新的x k -1).这些点的函数值会重复用到,在迭代公式中也要用到,上一步的x 1作为下一步的x 0也会再一次用它的函数值,为减少重新计算该点函数值的运行时间,将x 1点的函数值保存在变量fx1中.算法的伪代码描述:Input :初值x 0,x 1;精度要求(即误差限)ε;函数f (x );最大迭代次数N7. 结果与分析8. 附录:程序清单%*************************************************************%* 程序名:SecantMethod.m *%* 程序功能:用弦截法求解非线性方程. *%*************************************************************clc;clear all;f=inline('2*x^3-5*x-1'); % 函数f(x)x0=input('第一初值: x0 = ');x1=input('第二初值: x1 = ');epsilon=input('误差限: epsilon=');N=input('最大迭代次数: N=');fprintf('\n n x(n)\n'); % 显示表头fprintf('%2d%14.6f\n', 0, x0); % 占2位显示步数0, 共14位其中小数6位显示x0fprintf('%2d%14.6f\n', 1, x1); % 占2位显示步数1, 共14位其中小数6位显示x11 % 存x0点函数值2 % 存x1点函数值3 % 迭代计数器4 % while n≤ N% 弦截法公式fprintf('%2d%14.6f\n', n, x); %显示迭代过程6 % 达到精度要求否fprintf('\n\n 方程的近似解为: x≈%f\n\n', x);return; % 达到, 则显示结果并完毕程序89 % 原x1做x0为前两步的近似值10 % 现x做x1为一两步的近似值11 % x0点函数值12 % 计算x1点函数值, 为下一次循环13 % 计数器加1 14fprintf('\n 迭代%d 次还不满足误差要求.\n\n',N);《数值计算方法》实验3报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验3 解线性方程组的直接法(之Gauss 消去法) 2. 实验题目用Gauss 消去法求解线性方程组⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛--000.3000.2000.1643.5072.1000.2623.4712.3000.1000.3000.2001.0321x x x . 3. 实验目的掌握解线性方程组的Gauss 消去法. 4. 基础理论Gauss 消去法是通过对增广矩阵的初等行变换,将方程组变成上三角方程组,然后通过回代,从后到前依次求出各未知数.Gauss 消去法的第k 步(1≤k≤n -1)消元:若0≠kk a ,则依次将增广矩阵第k 行的kk ik a a /-倍加到第i 行(k+1≤i≤n),将第k 列对角线下的元素都化成0.5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab 6. 实验过程7. 结果与分析8. 附录:程序清单《数值计算方法》实验3报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验3 解线性方程组的直接法(之Gauss 列主元消去法) 2. 实验题目用Gauss 列主元消去法求解线性方程组⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛--000.3000.2000.1643.5072.1000.2623.4712.3000.1000.3000.2001.0321x x x . 3. 实验目的掌握解线性方程组的Gauss 列主元消去法. 4. 基础理论Gauss 列主元消去法也是通过对增广矩阵的初等行变换,将方程组变成上三角方程组,然后通过回代,从后到前依次求出各未知数.Gauss 列主元消去法的第k 步(1≤k≤n -1)消元:先在nk k k kk a a a ,,,,1 +中找绝对值最大的,将它所在的行与第k 行交换,然后将第k 行的kk ik a a /-倍加到第i 行(k+1≤i≤n),将第k 列对角线下的元素都化成0. 5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab 6. 实验过程7. 结果与分析8. 附录:程序清单《数值计算方法》实验3报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验3 解线性方程组的直接法(之Doolittle 分解) 2. 实验题目对矩阵A 进行Doolittle 分解,其中⎪⎪⎪⎪⎪⎭⎫⎝⎛----=3101141101421126A .3. 实验目的掌握矩阵的Doolittle 分解. 4. 基础理论矩阵的Doolittle 分解是指将矩阵n n ij a A ⨯=)(可以分解为一个单位下三角矩阵和一个上三角矩阵的乘积.若设⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=nn n n n n n n u u u u u u u u u u U l l ll l l L000000,1010010001333223221131211321323121则可依如下顺序公式计算⎪⎪⎩⎪⎪⎨⎧++=-=+=-=∑∑-=-=1111,,2,1,/)(,,1,,k t kk tk it ik ik k r rj kr kj kj nk k i u u l a l nk k j u l a u其中k = 1,2,…,n .5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab 6. 实验过程(1)按计算公式依次计算一行u 同时计算一列l ;(2)因为计算完u ij (或l ij )后,a ij 就不再使用,为节省存储空间,将计算的u ij (和l ij )仍存放在矩阵A 中的相应位置;(3)使用L 矩阵和U 矩阵时需要根据元素所在位置取固定值或A 中相应位置的值.L 对角线上的元素为1,上三角部分为0,下三角部分为A 中对应的元素;U 的下三角部分为0,上三角部分为A 中对应的元素.算法的伪代码描述: Input :阶数n ;矩阵A7. 结果与分析8. 附录:程序清单%****************************************************% 程序名: Doolittle.m *% 程序功能: 矩阵LU分解中的Doolittle分解. *%****************************************************clc;clear all;n=4; % 矩阵阶数A=[6 2 1 -1;2 4 1 0; 1 1 4 -1; -1 0 -1 3]disp('A=');disp(A);% LU分解(Doolittle分解)for k=1:n% 计算矩阵U的元素u_{kj}% (可参照下面l_{ik}的公式填写)% 计算矩阵L的元素l_{ik}% L 在A 下三角, U 在上三角(对角线为1) enddisp('分解结果:'); disp('L='); for i=1:n for j=1:nif i>j % 在下三角部分, 则取A 对于的元素显示 fprintf(' %8.4f',A(i,j));elseif i==j % 在对角线上, 则显示1 fprintf(' %8d',1);else % 在上三角部分, 则显示0 fprintf(' %8d',0); end endfprintf('\n'); % 换行 enddisp('U='); for i=1:n for j=1:nif i<=j % 在上三角部分或对角线上, 则取A 对于的元素显示 fprintf(' %8.4f',A(i,j));else % 在下三角部分, 则显示0 fprintf(' %8d',0); end endfprintf('\n'); % 换行 end《数值计算方法》实验3报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验3 解线性方程组的直接法(之LU 分解法) 2. 实验题目用LU 分解(Doolittle 分解)法求解线性方程组⎪⎩⎪⎨⎧=++=++=++104615631552162321321321x x x x x x x x x 3. 实验目的熟悉解线性方程组LU 分解法.4. 基础理论若将矩阵A 进行了Doolittle 分解,A = LU ,则解方程组b x A=可以分解求解两个三角方程组b y L=和y x U =.它们都可直接代入求解,其中b y L=的代入公式为∑-==-=11,,2,1,k j j kj k k n k y l b y而y x U=的代入公式为∑+=-=-=nk j kk j kjk k n n k u x uy x 11,,1,,/)( .5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab 6. 实验过程(1)Doolittle 分解过程依次计算一行u 同时计算一列l 完成,并将计算的u ij (和l ij )仍存放在矩阵A 中的相应位置;(2)求解方程组的代入公式中用到的u ij 和l ij 都直接在A 的相应位置取值即可. 算法的伪代码描述:Input :阶数n ;矩阵A ;常数项向量b7. 结果与分析8. 附录:程序清单%**************************************************** % 程序名: LinearSystemByLU.m *% 程序功能: 利用LU分解(Doolittle分解)解方程组. *%****************************************************clc;clear all;n=3; % 矩阵阶数A=[1 2 6; 2 5 15; 6 15 46];b=[1;3;10];% LU分解(Doolittle分解)for k=1:n% 计算矩阵U的元素u_{kj}% (可参照下面l_{ik}的公式填写)% 计算矩阵L的元素l_{ik}% L在A下三角, U在上三角(对角线为1) endfor k=1:n % 用代入法求解下三角方程组Ly=by(k)=b(k);3 %∑-==-=11,,2,1,kjj kjk knkylby33enddisp('方程组Ly=b的解:y=');disp(y');for k=n:-1:1 % 回代求解上三角方程组Ux=y x(k)=y(k);6 %∑+=-=-=nkjj kjk knnkxuyx11,,1,,666 enddisp('原方程组的解:x='); disp(x');《数值计算方法》实验3报告班级: 20##级####x 班 学号: 20##2409#### : ##X成绩:1. 实验名称实验3 解线性方程组的直接法(之Cholesky 分解) 2. 实验题目对矩阵A 进行Cholesky 分解,其中⎪⎪⎪⎪⎪⎭⎫⎝⎛----=3101141101421126A . 3. 实验目的理解矩阵的Cholesky 分解. 4. 基础理论矩阵的Cholesky 分解是指将矩阵n n ij a A ⨯=)(可以分解为一个下三角矩阵L 和L 转置的乘积,即A =LL T,其中L 各元素可依如下顺序公式计算⎪⎪⎩⎪⎪⎨⎧++=-=-=∑∑-=-=11112,,2,1,/)(k t kktk it ik ik k r kr kk kk nk k i l l l a l l a l其中k = 1,2,…,n .5. 实验环境操作系统:Windows xp ; 程序设计语言:VC++ 6. 实验过程(1)按计算公式依次先计算一列对角线上的元素l kk ,再计算这列其他元素l ik ,且对称位置的元素也取同一个值;(2)因为计算完l ij 后,a ij 就不再使用,为节省存储空间,将计算的l ij 仍存放在矩阵A 中的相应位置;(3)使用L 矩阵时需要根据元素所在位置取固定值或A 中相应位置的值.L 上三角部分为0,对角线和下三角部分为A 中对应的元素.算法的伪代码描述:Input :阶数n ;矩阵AOutput :矩阵L (合并存储在数组A 中)行号 伪代码注释1 for k ← 1 to n2∑-=-=112k r krkk kk l a l3 for i ← k to n4 ∑-=-=11/)(k t kk tk it ik ik l l l a l计算结果存放在a ij5 endfor6 endfor7return L输出L7. 结果与分析8. 附录:程序清单%************************************************************* %* 程 序 名:Cholesky.m * %* 程序功能:对称正定矩阵的Cholesky 分解. * %*************************************************************n=4; % 矩阵阶数 A=[6,2,1,-1; 2,4,1,0; 1,1,4,-1; -1,0,-1,3];disp('A ='); for i=1:n for j=1:nfprintf('%10.4f',A(i,j)); % 共占14位endfprintf('\n');% 一行完毕换行end% Cholesky 分解 for k=1:n % 计算对角线上的l _{kk}% 计算其他的l _{ik} % 和l _{ki}end % L 在A 下三角, L^T 在上三角disp('分解结果:'); disp('L='); for i=1:n for j=1:n if i>=j % 在下三角部分或对角线上, 则取A 对于的元素显示fprintf('%10.4f',A(i,j));else % 在上三角部分, 则显示0 fprintf('%10d',0); end endfprintf('\n'); % 换行 end《数值计算方法》实验3报告班级: 20##级####x 班 学号: 20##2409#### : ##X成绩:1. 实验名称实验3 解线性方程组的直接法(之改进的Cholesky 分解) 2. 实验题目对矩阵A 进行改进的Cholesky 分解,其中⎪⎪⎪⎪⎪⎭⎫⎝⎛----=3101141101421126A .3. 实验目的理解矩阵改进的Cholesky 分解. 4. 基础理论矩阵的改进的Cholesky 分解是指将矩阵n n ij a A ⨯=)(可以分解为一个单位下三角矩阵L 和对角矩阵D 与L 转置的乘积,即A =LDL T,其中L 和D 各元素可依如下顺序公式计算⎪⎪⎩⎪⎪⎨⎧++=-=-=∑∑-=-=11112,,2,1,/)(k t k kt it t ik ik k r kr r kk k nk k i d l l d a l l d a d其中k = 1,2,…,n .5. 实验环境操作系统:Windows xp ; 程序设计语言:VC++ 6. 实验过程(1)按计算公式依次先计算D 的一个元素d k ,再计算L 中这列的元素l ik ,且对称位置的元素也取同一个值;(2)因为计算完d k 和l ij 后,a kk 或a ij 就不再使用,为节省存储空间,将计算的a kk 或l ij 仍存放在矩阵A 中的相应位置;(3)使用L 矩阵时需要根据元素所在位置取固定值或A 中相应位置的值.L 对角线和上三角部分为0,下三角部分为A 中对应的元素;D 对角线为A 中对应的元素,其余都是0.算法的伪代码描述: Input :阶数n ;矩阵AOutput :矩阵L (合并存储在数组A 中)7. 结果与分析8. 附录:程序清单%************************************************************* %* 程 序 名:ImprovedCholesky.m * %* 程序功能:对称正定矩阵的改进的Cholesky 分解. * %*************************************************************n=4; % 矩阵阶数A=[6,2,1,-1; 2,4,1,0; 1,1,4,-1; -1,0,-1,3];disp('A =');for i=1:nfor j=1:nfprintf('%10.4f',A(i,j)); % 共占14位endfprintf('\n'); % 一行完毕换行end% Cholesky分解for k=1:n% 计算D对角线上的u_{kk}% 计算L的元素l_{ik}% 和L转置的元素l_{ki} end % L在A下三角, D在对角线disp('分解结果:');disp('L=');for i=1:nfor j=1:nif i>j % 在下三角部分, 则取A对于的元素显示fprintf('%10.4f',A(i,j));elseif i==j % 在对角线上, 则显示1fprintf('%10d',1);else % 在上三角部分, 则显示0fprintf('%10d',0);endendfprintf('\n'); % 换行enddisp('D='); for i=1:n for j=1:n if i==j % 在对角线上, 则取A 对于的元素显示fprintf('%10.4f',A(i,j));else % 其余显示0fprintf('%10d',0); end endfprintf('\n'); % 换行 end《数值计算方法》实验3报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验3 解线性方程组的直接法(之追赶法) 2. 实验题目用追赶法求解线性方程组⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛-----101053001210023100124321x x x x 3. 实验目的熟悉解线性方程组的追赶法. 4. 基础理论对于系数矩阵为三对角矩阵的方程组,其Crout 分解可分解为⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=------11111211122111122211n n nn n n nn n n t t t s a s a s a s b a c b a c b a c b A这样,解方程组可以由如下2步完成:“追”:,,,3,2,/)(,,/,/,1111111111n i s y a f y t a b s s c t s f y b s i i i i i i i i i i i i =-=-====-----其中:Tn f f ),,(1 为方程组的常数项,n t 没用;“赶”:.1,,2,1,,1 --=-==+n n i x t y x y x i i i i n n5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab 6. 实验过程在“追”的过程中,向量s 和y 都有n 个元素,t 只有n -1个元素,又1s 和1y 的计算公式与其它i s 和i y 不同,所以先单独计算1s 和1y ,然后在一个n -1次循环中,求其它i s 和i y 以与i t .由于在“追”的过程中,i b ,i c 和i f 在分别计算完对应的i s ,i t 和i y 后就不再使用,所以借用数组b ,c 和f 存储向量s ,t 和y ;同样在“赶”的过程中,i y 在计算完对应的i x 后就不再使用,所以再一次借用数组f 存储向量x .追赶法算法的伪代码描述:Input :阶数n ;三对角矩阵的三条对角线向量a ,b ,c ,常数项向量f Output :方程组的解x改进的追赶法算法的伪代码描述:Input :阶数n ;三对角矩阵的三条对角线向量a ,b ,c ,常数项向量f Output :方程组的解x7. 结果与分析8. 附录:程序清单%*************************************************************%* 程序名:ChaseAfter.m *%* 程序功能:用追赶法求解三对角线性方程组. *%*************************************************************clc;clear all;n=4;a=[0,-1,-1,-3];b=[2, 3, 2, 5];c=[-1, -2, -1, 0];f=[0, 1, 0, 1];% "追"s(1) = b(1);y(1) = f(1); % 先单独求s_1和y_1 for k = 1 : n-1% 再求t_i(i=1,2,…,n-1)% s_i(i=2,3,…,n)% y_i(i=2,3,…,n)end% "赶"x(n) = y(n); % 先单独求x_nfor k = n-1 : -1 : 1% 再求x_i(i=n-1,n-2, (1)endx=x' % 输出解向量-------------------------------------------------------------------------------------------------------------------改进的程序:%*************************************************************%* 程序名:ChaseAfter.m *%* 程序功能:用追赶法求解三对角线性方程组. *%*************************************************************clc;clear all;n=4;a=[0,-1,-1,-3];b=[2, 3, 2, 5];c=[-1, -2, -1, 0];f=[0, 1, 0, 1];% "追"% b(1)=b(1); % s_1仍在b_1中,不用重新计算y(1)=f(1)/b(1); % 先单独y_1for k=1:n-1% 再求t_i(i=1,2,…,n-1)% s_i(i=2,3,…,n)% y_i(i=2,3,…,n)end% "赶"% f(n)=f(n); % x_n等于y_n仍在f_n中for k=n-1:-1:1% 再求x_i(i=n-1,n-2, (1)endx=f' % 输出解向量《数值计算方法》实验4报告班级:20##级####x班学号:20##2409####:##X 成绩:1. 实验名称实验4 解线性方程组的迭代法(之Jacobi迭代)2. 实验题目用Jacobi迭代法求解线性方程组1231231232251223x x x x x x x x x +-=⎧⎪++=⎪⎨++=⎪⎪⎩任取3. 实验目的掌握解线性方程组的Jacobi 迭代法. 4. 基础理论将第i (n i ≤≤1)个方程i n in i i b x a x a x a =+++ 2211移项后得到等价方程ii n in i i i i i i i i i a x a x a x a x a b x /)(11,11,11------=++--便可构造出Jacobi 迭代公式,1,0,/)()()(11,)(11,)(11)1(=------=++--+k a x a x a x a x a b x ii k n in k i i i k i i i k i i k i . 5. 实验环境操作系统:Windows xp ; 程序设计语言:Matlab 6. 实验过程7. 结果与分析8. 附录:程序清单《数值计算方法》实验4报告班级: 20##级####x 班 学号: 20##2409#### : ##X 成绩:1. 实验名称实验4 解线性方程组的迭代法(之Gauss-Seidel 迭代) 2. 实验题目用Gauss-Seidel 迭代法求解线性方程组。
数值方法matlab实验
数值方法matlab实验数值方法在Matlab中可以用来解决各种数学问题,包括求解方程、插值、微分、积分等。
下面是几个常见的数值方法在Matlab中的实验例子。
1. 求解方程:a. 使用二分法求解方程 f(x) = x^2 - 4 = 0。
```matlabf = @(x) x^2 - 4;[x, iter] = bisection_method(f, -5, 5, 1e-6);disp(['Root: ', num2str(x)]);disp(['Number of iterations: ', num2str(iter)]);```b. 使用牛顿法求解方程 f(x) = x^2 - 4 = 0。
```matlabf = @(x) x^2 - 4;df = @(x) 2*x;[x, iter] = newton_method(f, df, 3, 1e-6, 100);disp(['Root: ', num2str(x)]);disp(['Number of iterations: ', num2str(iter)]);```2. 插值:a. 使用拉格朗日插值多项式对给定数据点进行插值。
```matlabx = [0, 1, 2, 3];y = [1, 0, 1, 0];xx = 0:0.1:3;yy = lagrange_interpolation(x, y, xx);plot(x, y, 'o', xx, yy);```b. 使用样条插值对给定数据点进行插值。
```matlabx = [0, 1, 2, 3];y = [1, 0, 1, 0];xx = 0:0.1:3;yy = spline_interpolation(x, y, xx);plot(x, y, 'o', xx, yy);```3. 微分:a. 使用中心差分公式计算函数 f(x) = sin(x) 在某一点 x0 处的导数。
“数值计算方法”MATLAB实验指导
“数值计算方法”上机实验指导书重庆交通大学计算机与信息学院邹昌文编实验一 误差分析实验1.1(病态问题)实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。
对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。
通过本实验可获得一个初步体会。
数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。
病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。
问题提出:考虑一个高次的代数多项式)1.1()()20()2)(1()(201∏=-=---=k k x x x x x p显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。
现考虑该多项式的一个扰动)2.1(0)(19=+xx p ε其中ε是一个非常小的数。
这相当于是对(1.1)中19x 的系数作一个小的扰动。
我们希望比较(1.1)和(1.2)根的差别,从而分析方程(1.1)的解对扰动的敏感性。
实验内容:为了实现方便,我们先介绍两个MA TLAB 函数:“roots ”和“poly ”。
roots(a)u =其中若变量a 存储n+1维的向量,则该函数的输出u 为一个n 维的向量。
设a 的元素依次为121,,,+n a a a ,则输出u 的各分量是多项式方程01121=+++++-n n n na x a xa x a的全部根;而函数 p o l y (v )b = 的输出b 是一个n+1维向量,它是以n 维向量v 的各分量为根的多项式的系数。
可见“roots ”和“poly ”是两个互逆的运算函数。
))20:1((;)2();21,1(;000000001.0ve poly roots ess ve zeros ve ess +===上述简单的MATLAB 程序便得到(1.2)的全部根,程序中的“ess ”即是(1.2)中的ε。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数值计算方法》实验指导(Matlab 版)肇庆学院数学与统计学学院计算方法课程组1. 实验名称实验1 算法设计原则验证(之相近数相减、大数吃小数和简化计算步骤) 2.实验题目有效数字的损失.123 )与1000个较小的数(3 1015)的和,验证大数吃小数的现象.(3)分别用直接法和秦九韶算法计算多项式P(x) a 0x n a 1x n 1在x =1.00037 处的值•验证简化计算步骤能减少运算时间.n 1 对于第(3)题中的多项式P (x ),直接逐项计算需要n (n 1) 2 1次乘法和n 次加法,使用秦九韶算法P(x) (((a °x ajx a 2)xa .则只需要n 次乘法和n 次加法.3.实验目的验证数值算法需遵循的若干规则. 4.基础理论设计数值算法时,应避免两个相近的数相减、防止大数吃小数、简化计算步骤减少运算 次数以减少运算时间并降低舍入误差的积累.两相近的数相减会损失有效数字的个数,用一《数值计算方法》实验 1报告班级: 20xx 级 XXXXx 班学号: 20xx2409xxxx姓名: XXX 成绩:⑴取 z 1016,计算z 1 Z 和 1/(、z 1Z),验证两个相近的数相减会造成(2)按不同顺序求一个较大的数(an 1X a n个大数依次加小数,小数会被大数吃掉,乘法运算次数太多会增加运算时间.5.实验环境操作系统:Win dows xp ;程序设计语言:Matlab6.实验过程(1)直接计算并比较;(2)法1 :大数逐个加1000个小数,法2 :先把1000个小数相加再与大数加;(3)将由高次项到低次项的系数保存到数组A[n]中,其中n为多项式次数.7.结果与分析(1)计算的~1V Z = _______________________________ ,1/( ~1 < z) ____________________ . 分析:(2)123逐次加1000个3 10 6的和是_________________________ ,先将1000个3 10 6相加,再用这个和与123相加得_______________________ .分析:(3)计算__________ 次的多项式:直接计算的结果是___________________ ,用时___________________ ;用秦九韶算法计算的结果是____________________ ,用时 ___________________分析:8.附录:程序清单(1)两个相近的数相减.°%*************************************************************%* 程序名:ex1_1.m°%*程序功能:验证两个相近的数相减会损失有效数字个数Q%************************************************************* z=1e16;x,y(2)大数吃小数Q%*************************************************************%程序名:ex1_2.m%*程序功能:验证大数吃小数的现象• °%************************************************************* 0clc; %清屏clear all; %释放所有内存变量format Io ng; %按双精度显示浮点数z=123; %大数t=3e-15; %小数大数依次加小数x=z; %% 重复1000次给x中加上ty=0; %先累加小数% 重复1000次给y中加上t y=z + y; %再加到大数x,y(3)秦九韶算法 °%*************************************************************%* 程序名:ex1_3.m°%* 程序功能:验证秦九韶算法可节省运行时间•Q%*************************************************************clc;%清屏clear all;%释放所有内存变量A=[8,4,-1,-3,6,5,3,2,1,3,2,-1,4,3,1,-2,4,6,8,9,50,-80,12,35,7,-6,42,5,6,23,74,65,55,80,78 ,77,98,56];A(10001)=0;%扩展到10001项,后面的都是分量 0% A 为多项式系数,从高次项到低次项x=1.00037;n=9000;% n 为多项式次数%直接计算begi ntime=clock;format Io ng;%按双精度显示浮点数%开始执行的时间%累加多项式的i 次项 en dtime=clock; time 仁etime(e ndtime,begi ntime); disp('直接计算'); disp(['p(', nu m2str(x),')=' ,n um2str(p)]); disp([' 运行时间:’,num2str(time1),' 秒']); %结束执行的时间%运行时间%秦九韶算法计算 begi ntime=clock; %开始执行的时间累加秦九韶算法中的一项en dtime=clock; time2=etime(e ndtime,begi ntime); disp(''); disp('秦九韶算法计算'); disp(['p(', nu m2str(x),')=' ,n um2str(p)]);%结束执行的时间%运行时间运行时间:',num2str(time2),'秒']); disp(['1.实验名称实验1 算法设计原则验证(之数值稳定性)2. 实验题目计算定积分I n;x n e x1dx,n 0,1, 10 ,分别用教材例1-7推导出的算法 A 和B ,其中:I n 1 nl n 1I _ 算法A :nn 1算法B : ln 1I o 0.6321l110验证算法不稳定时误差会扩大.3.实验目的验证数值算法需遵循的若干规则. 4.基础理论设计数值算法时,应采用数值稳定性好的算法•数值稳定的算法, 误差不会放大,甚至会缩小;而数值不稳定的算法会放大误差.5.实验环境操作系统:Win dows xp ; 程序设计语言:Matlab6.实验过程分别用数组IA[]和IB[]保存两种算法计算的结果.《数值计算方法》实验 1报告班级: 20xx 级 XXXXx 班学号: 20xx2409xxxx姓名: XXX 成绩:1-(1 I n ) n 07.结果与分析运行结果:(或拷屏)分析:8.附录:程序清单°%************************************************************* %*程序名:ex1_4.m °%*程序功能:验证数值稳定性算法可控制误差°%*************************************************************%清屏%释放所有内存变量%按双精度显示浮点数I=[0.63212055882856, 0.36787944117144, 0.26424111765712,0.20727664702865, ...0.17089341188538, 0.14553294057308, 0.12680235656154,0.11238350406938, ...0.10093196744492, 0.09161229300662, 0.08387707010843];%保留14位小数的精确值,…是Matlab 中的续行符%算法AIA(1) = 0.6321;% Matlab 下标从1开始,所以要用IA(n+1)表示原问题中的l(n )for n — 1 : 10lA(n -1) - 1 - n*IA(n.);%算法Bclc;clear all;format Io ng;disp('n 算法A 算法B 精确值');for n=1:11fprintf('%2d %14.6f %14.6f %14.6f\n',n-1,IA(n),IB(n),l(n));end% n显示为2位整数,其它显示为14位其中小数点后显示6位的小数《数值计算方法》实验 1报告班级: 20xx 级 XXXXx 班学号: 20xx2409xxxx姓名:XXX成绩:1.实验名称实验i 算法设计原则(除数绝对值不能太小) 2.实验题目将线性方程组增广矩阵利用初等行变换可化为1 2 i 2 和2 和 i0 i6i i的方程组,验证除数绝对值远小于被除数绝对值的除法会导致结果失真. 3.实验目的验证数值算法需遵循的若干规则. 4.基础理论设计数值算法时,应避免除数绝对值远小于被除数绝对值的除法, 大,使结果失真. 5.实验环境操作系Win dows xp ; 程序设计语言:Matlab6.实验过程a iia2ia 2ipi aii0 3i2b i a 22' b 2'r i9i2 07 r2aii0 b ;a 22'b 2'由此可解得X ib i / an, X 2分别解增广矩阵为i0i6 i否则绝对误差会被放用二维数组A和B存放方程组的增广矩阵,利用题目所给初等行变换求解方程组.7.结果与分析第1种顺序的方程组的解为x= ____________________________ ,y= ___________________________ 第2种顺序的方程组的解为x= ____________________________ ,y= ___________________________ 分析:8.附录:程序清单°%************************************************************* %*程序名:ex1_5.m%* 程序功能:验证除数的绝对值太小可能会放大误差Q%*************************************************************clc;A=[1e-16, 1, 1; 2, 1,2];B=[2, 1,2; 1e-16, 1, 1]; %增广矩阵%方程组A%消去a_{12},系数矩阵成对角线%未知数x1的值%未知数x2的值disp(['方程组 A 的解:x 仁',num2str(A(1,3)),',x2=',num2str(A(2,3))]);disp('');%方程组Bdisp(['方程组 B 的解:x 仁',num2str(B(1,3)),',% m = - a_{21}/a_{11}是第2行加第1行的倍数丄2)/A(Z 蹑A(l :1Q = A(l J ;) + m *A(2>:); A(1:3)=A^13) A(L1); 沁 3) 'AC1 2);% 消去 a_{21}% m = - a_{12}/a_{22}是第1行加第2行的倍数% m = - b_{21}/b_{11}是第2行加第1行的倍数2) B(2 2):BC1,% 消去 b_{21}BCL 3)-B(l 33) 8(1,1);B(2I 3) = B(Z 3) B(2,2X% m = - b_{12}/b_{22}是第1行加第2行的倍数%消去b_{12},系数矩阵成对角线%未知数x1的值%未知数x2的值x2=', nu m2str(B(2,3))]);《数值计算方法》实验2报告班级:20xx 级XXXXx 班学号:20xx2409xxxx成绩:1.实验名称姓名:XXX实验2 非线性方程的迭代解法(之简单迭代法)2.实验题目用简单迭代法求方程X3 4x2 10 0在区间[1,2]内的一个实根,取绝对误差限为10 4.3.实验目的掌握非线性方程的简单迭代法.4.基础理论简单迭代法:将方程f (x) 0改写成等价形式X (x),从初值X o开始,使用迭代公式X k 1 (X k )可以得到一个数列,若该数列收敛,则其极限即为原方程的解. 取数列中适当的项可作为近似解.5.实验环境操作系统:Win dows xp ; 程序设计语言:Matlab6.实验过程7.结果与分析8.附录:程序清单1.实验名称实验2 非线性方程的迭代解法(之Newton 迭代法)2. 实验题目用Newton 迭代法求方程x 34x 210 0在区间[1,2]内的一个实根,取绝对误差限为 10 4.3.实验目的掌握求解非线性方程的 Newto n 迭代法.4.基础理论Newt on 迭代法:解方程 f(x) 0的Newton 迭代公式为x k 1 x k5.实验环境操作系Win dows xp ; 程序设计语言:Matlab6.实验过程7.结果与分析8.附录:程序清单《数值计算方法》实验 2报告班级: 20xx 级 XXXXx 班学号: 20xx2409xxxx姓名: XXX 成绩:f (X k )f'(X k )《数值计算方法》实验2报告班级:20xx 级XXXXx 班学号:20xx2409xxxx姓名:XXX 成绩:1.实验名称实验2 非线性方程的迭代解法(之对分区间法)2.实验题目用对分区间法求方程X3 x 1 0在区间[1, 1.5]内的一个实根,取绝对误差限为10 4.3.实验目的掌握求解非线性方程的对分区间法.4.基础理论对分区间法:取[a, b]的中点p,若f(p) ~ 0或b - a < 则p为方程f (x) 0的近似解;若f(a) f(p) < 0,则说明根在区间取[a, p]中;否则,根在区间取[p, b]中•将新的有根区间记为[a1, b1],对该区间不断重复上述步骤,即可得到方程的近似根.5.实验环境操作系统:Win dows xp ; 程序设计语言:Matlab6.实验过程用宏定义函数f(x);为了循环方便,得到的新的有根区间始终用[a, b]表示;由于新的有根区间可能仍以a为左端点,这样会反复使用函数值f(a),为减少运算次数,将这个函数值保存在一个变量fa中;同样在判断新的有根区间时用到函数值f(p),若新的有根区间以p为左端点,则下一次用到的f(a)实际上就是现在的f(p),为减少运算次数,将这个函数值保存在一个变量fp 中.算法的伪代码描述:In put :区间端点a, b ;精度要求(即误差限)「函数 f (x);最大对分次数NOutput :近似解或失败信息7.结果与分析8.附录:程序清单说明:源程序中带有数字的空行,对应着算法描述中的行号°%**********************************************************%*程序名:Bisection.m%* 程序功能:使用二分法求解非线性方程.°%**********************************************************f=inline(W3-x-1'); %定义函数f(x)a=i nput('有根区间左端点:a='); b=in put ('右端点:b=');epsilon=input(' 误差限:epsilona=');N=i nput(' 最大对分次数:N=');1 %对分次数计数器n置12 %左端点的函数值给变量fafprin tf('\nk p f(p) a(k) f(a(k))');fprintf(' b(k) b-a\n');%显示表头fprin tf('%2d%36.6f%12.6f%12.6f%12.6f\n',O,a,fa,b,b-a);%占2位其中0位小数显示步数0,共12位其中小数6位显示各值3 % while n < N4 %取区间中点p5 %求p点函数值给变量fpfprin tf('%2d%12.6f%12.6f, n,p,fp);%输出迭代过程中的中点信息p和f(p)6 % 如果f(p)=0 或b-a的一半小于误差fprintf('\n\n 近似解为:%f\n',p); %则输出近似根p (7)return; %并结束程序(7)89 %计数器加115fprin tf('%12.6f%12.6f%12.6f%12.6f\n',a,fa,b,b-a);%显示新区间端点及左端函数值、区间长度16fprintf('\n\n经过%d 次迭代后未达到精度要求.\n',N); %输出错误信息(行17)1011取作p12 1314% 若f(a)与f(p)同号%则取右半区间为新的求根区间,即a%保存新区间左端点的函数值 %否则%左半区间为新的求根区间,即b 取作p1.实验名称 实验2非线性方程的迭代解法(之Aitken-Steffensen加速法)2. 实验题目32用Aitken-Steffensen 加速法求方程 x 4x 10 0在区间[1,2]内的一个实根,取绝对误差限为10 4•3.实验目的熟悉求解非线性方程的 Aitke n-Steffe nsen加速法.4.基础理论将方程f (x) 0改写成等价形式 x (x),得到从初值 X 。