MATLAB实验上机所用word(数值计算篇)
(完整word版)含答案《MATLAB实用教程》
第二章 MATLAB 语言及应用实验项目实验一 MATLAB 数值计算三、实验内容与步骤1.创建矩阵⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=987654321a(1(2)用(3)用(42.矩阵的运算(1)利用矩阵除法解线性方程组。
⎪⎪⎩⎪⎪⎨⎧=+++=-+-=+++=+-12224732258232432143214321421x x x x x x x x x x x x x x x 将方程表示为AX=B ,计算X=A\B 。
(2)利用矩阵的基本运算求解矩阵方程。
已知矩阵A 和B 满足关系式A -1BA=6A+BA ,计算矩阵B 。
其中⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=7/10004/10003/1A ,Ps: format rata=[1/3 0 0;0 1/4 0;0 0 1/7];b=inv(a)*inv(inv(a)-eye(3))*6*a(3)计算矩阵的特征值和特征向量。
已知矩阵⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--=1104152021X ,计算其特征值和特征向量。
(4)Page:322利用数学函数进行矩阵运算。
已知传递函数G(s)=1/(2s+1),计算幅频特性Lw=-20lg(1)2(2w )和相频特性Fw=-arctan(2w),w 的范围为[0.01,10],按对数均匀分布。
3.多项式的运算(1)多项式的运算。
已知表达式G(x)=(x-4)(x+5)(x 2-6x+9),展开多项式形式,并计算当x 在[0,20]内变化时G(x)的值,计算出G(x)=0的根。
Page 324(2)多项式的拟合与插值。
将多项式G(x)=x 4-5x 3-17x 2+129x-180,当x 在[0,20]多项式的值上下加上随机数的偏差构成y1,对y1进行拟合。
对G(x)和y1分别进行插值,计算在5.5处的值。
Page 325 四、思考练习题1.使用logspace 函数创建0~4π的行向量,有20个元素,查看其元素分布情况。
Ps: logspace(log10(0),log10(4*pi),20) (2) sort(c,2) %顺序排列 3.1多项式1)f(x)=2x 2+3x+5x+8用向量表示该多项式,并计算f(10)值. 2)根据多项式的根[-0.5 -3+4i -3-4i]创建多项式。
matlab数值计算实验报告
matlab数值计算实验报告Matlab数值计算实验报告引言:Matlab是一种广泛应用于科学与工程领域的高级计算机语言和环境,它提供了丰富的函数库和工具箱,方便用户进行数值计算、数据分析和可视化等任务。
本实验报告将介绍我在使用Matlab进行数值计算实验中的一些经验和心得体会。
一、数值计算方法数值计算方法是一种利用数值近似来解决实际问题的方法,它在科学和工程领域具有广泛的应用。
在Matlab中,我们可以利用内置的函数和工具箱来实现各种数值计算方法,例如插值、数值积分、数值微分等。
二、插值方法插值是一种通过已知数据点来推测未知数据点的方法。
在Matlab中,我们可以使用interp1函数来进行插值计算。
例如,我们可以通过已知的一些离散数据点,利用interp1函数来估计其他位置的数值。
这在信号处理、图像处理等领域具有重要的应用。
三、数值积分数值积分是一种通过分割曲线或曲面来近似计算其面积或体积的方法。
在Matlab中,我们可以使用quad函数来进行数值积分计算。
例如,我们可以通过quad函数来计算某个函数在给定区间上的积分值。
这在概率统计、物理学等领域具有广泛的应用。
四、数值微分数值微分是一种通过数值逼近来计算函数导数的方法。
在Matlab中,我们可以使用diff函数来进行数值微分计算。
例如,我们可以通过diff函数来计算某个函数在给定点上的导数值。
这在优化算法、控制系统等领域具有重要的应用。
五、数值求解数值求解是一种通过数值近似来计算方程或方程组的根的方法。
在Matlab中,我们可以使用fsolve函数来进行数值求解计算。
例如,我们可以通过fsolve函数来求解某个非线性方程的根。
这在工程计算、金融分析等领域具有广泛的应用。
六、实验应用在本次实验中,我使用Matlab进行了一些数值计算的应用实验。
例如,我利用插值方法来估计某个信号在给定位置的数值,利用数值积分方法来计算某个曲线下的面积,利用数值微分方法来计算某个函数在给定点的导数值,以及利用数值求解方法来求解某个方程的根。
MATLAB上机实验实验报告
MATLAB上机实验一一、实验目的初步熟悉MATLAB 工作环境,熟悉命令窗口,学会使用帮助窗口查找帮助信息。
命令窗口二、实验内容(1) 熟悉MATLAB 平台的工作环境。
(2) 熟悉MATLAB 的5 个工作窗口。
(3) MATLAB 的优先搜索顺序。
三、实验步骤1. 熟悉MATLAB 的5 个基本窗口①Command Window (命令窗口)②Workspace (工作空间窗口)—③Command History (命令历史记录窗口)④Current Directory (当前目录窗口)⑤Help Window (帮助窗口)(1) 命令窗口(Command Window)。
在命令窗口中依次输入以下命令:>>x=1>> y=[1 2 34 5 67 8 9];>> z1=[1:10],z2=[1:2:5];>> w=linspace(1,10,10);>> t1=ones(3),t2=ones(1,3),t3=ones(3,1)>> t4=ones(3),t4=eye(4)x =1z1 =1 2 3 4 5 6 7 8 9 10 t1 =1 1 11 1 11 1t2 =1 1 1t3 =111t4 =1 1 11 1 11 1 1t4 =1 0 0 00 1 0 00 0 1 00 0 0 1思考题:①变量如何声明,变量名须遵守什么规则、是否区分大小写。
答:(1)变量声明1.局部变量每个函数都有自己的局部变量,这些变量只能在定义它的函数内部使用。
当函数运行时,局部变量保存在函数的工作空间中,一旦函数退出,这些局部变量将不复存在。
脚本(没有输入输出参数,由一系列MATLAB命令组成的M文件)没有单独的工作空间,只能共享调用者的工作空间。
当从命令行调用,脚本变量存在基本工作空间中;当从函数调用,脚本变量存在函数空间中。
2.全局变量在函数或基本工作空间内,用global声明的变量为全局变量。
MATLAB数值计算.doc
MATLAB数值计算第5章 MATLAB数值计算 MATLAB的数学计算,数值计算,符号计算其中符号计算是指使用未定义的符号变量进行运算,而数值计算不允许使用未定义的变量。
注:数值计算有误差。
数值计算受到计算机所保留的有效位数的限制,因此每一次运算都会有一定的误差,重复的多次数值计算就可能会造成很大的累积误差。
5.1 矩阵和数组MATLAB最基本也是最重要的功能就是进行实数或复数矩阵的运算。
矩阵和数组的概念在MATLAB的运算中,经常要使用标量、向量、矩阵和数组,这几个名称的定义如下: , 标量:是指1×1的矩阵,即为只含一个数的矩阵。
, 向量:是指1×n或n×1的矩阵,即只有一行或者一列的矩阵。
, 矩阵:是一个矩形的数组,即二维数组,其中向量和标量都是矩阵的特例,0×0矩阵为空矩阵([])。
, 数组:是指n维的数组,为矩阵的延伸,其中矩阵和向量都是数组的特例。
5.1.1矩阵输入(前已讲“向量的输入”,相同~) (1) 矩阵元素应用方括号([])括住;(2) 每行内的元素间用逗号或空格隔开;(3) 行与行之间用分号或回车键隔开;(4) 元素可以是数值或表达式。
1. 通过显式元素列表输入矩阵c=[1 2;3 4;5 3*2] % [ ]表示构成矩阵,分号分隔行,空格分隔元素c =1 23 45 6用回车键代替分号分隔行:c=[1 23 45 6]1 23 45 612. 通过语句生成矩阵(1) 使用from:step:to方式生成向量(2) 使用linspace和logspace函数生成向量3. 由矩阵生成函数产生特殊矩阵MATLAB提供了很多能够产生特殊矩阵的函数,各函数的功能如表5.2所示。
表5.2 矩阵生成函数例子函数名功能输入结果zeros(2,3) zeros(m,n) 产生m×nans = 的全0矩 0 0 0 阵 0 0 0ones(2,3) ones(m,n) 产生m×nans = 的全1矩1 1 1 阵 1 1 1rand(2,3) rand(m,n) 产生均匀ans = 分布的随 0.9501 0.6068 0.8913 机矩阵,元 0.2311 0.4860 0.7621 素取值范围0.0,1.0。
实验五+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帮助文件。
MATLAB实验上机所用word(字符串及其运算篇)
第四章字符串、元胞和构架数组与符号计算MATLAB 6.x版的内建数据类型(Built-in data type)就有5种以上,此外还有许多其他专门设计的类(Class),如符号类、内联函数类、控制工具包中的线性时不变模型类、神经网络类等。
就程序设计而言,MATLAB 6.x版采用了面向对象编程技术。
数据和编程的改变使用户能更简捷而自然地解决复杂的计算问题(如符号计算问题、多变量控制系统问题、神经网络问题)。
本章内容根据MATLAB6.5编写,但绝大部分内容适用于其他MATLAB6.x版本。
4.1字符串数组4.1.1字符串入门字符变量的创建方式是:在指令窗中,先把待建的字符方在“单引号对中,再按’Enter‘。
注意单引号对必须在英文状态输入。
【例3.1.1-1】先请读者实际操作本例,以体会数值量与字符串的区别。
cleara=12345.6789class(a)a_s=size(a)b='S'class(b)b_s=size(b)4.1.2串数组的属性和标识【例3.1.2-1】本例演示:串的基本属性、标识和简单操作。
(1)创建一个由19个字符组成的串,这19个字符必须被放在但引号对内。
a='This is an example.'(2)串数组的大小在以上赋值后,变量就是一个串数组。
该串的每个字符(英文字母、空格和标点都是平等的)占据一个元素位。
串数组的大小可以通过下面指令获得。
size(a)(3)串数组的元素标识在一维串数组中,matlab按自左至右的次序用自然数数码标识字符的位置。
a14=a(1:4) %提出一个字数串ra=a(end:-1:1) %字符串的倒排(4)串数组的ASCII码字符串的存储是用ASCII码实现的,指令double、abs都可以用来获取串数组对应的ASCII码数值数组,指令char可以把ASCII数组变为串数组。
ca=double(a)char(ca)note: 1、在char把数字转换为字符时,负数将导致“警告”;非整数部分将被截尾。
matlab上机实验报告
《MATLAB 语言及其应用实验》上机实验报告1姓名: 学号:请各位同学将命令和结果由MATLAB 中复制(或截屏)后保存至word 文档中。
1. 计算矩阵 与 的和、乘积、各元素的乘积以及Kronecker 积。
2.对于B AX =,如果⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=753467294A ,⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=282637B ,求解X 。
3.对矩阵912563827⎡⎤⎢⎥⎢⎥⎢⎥⎣⎦进行特征值分解,给出特征值与特征向量。
4.已知向量[4+5i, 6, 7-1.5j, 5+9j],以其为对角线元素生成对角矩阵。
5. 生成含有8个元素的高斯向量a,要求元素的均值、方差分别为5、4,再生成含有7个元素的随机向量,要求元素服从上的均匀分布。
求两者的卷积。
6. 求解多项式x3-7x2+2x+40的根。
7. 计算多项式乘法(x2+2x+2)(x2+5x+4)。
8. 对下式进行部分分式展开:9. 已知y=sin(x),x从0到2 ,间隔 x=0.02 ,求y的最大值、最小值、均值和标准差。
10. 用符号函数法求解方程at2+b*t+c=0。
11. 用符号计算验证三角等式:sin( 1)cos( 2)-cos( 1)sin( 2) =sin( 1- 2)12. 因式分解:13. ⎥⎥⎦⎤⎢⎢⎣⎡=)sin()log(12x x e x x a f ax ,用符号微分求df/dx ,并用符号定积分来验证。
14. 求解非线性方程组1211223sin 2cos x x x x x x -=⎧⎨+=⎩。
>> syms x1 x2>> [x1,x2]=solve(x1-3*x2-sin(x1),2*x1+x2-cos(x2))x1 =0.49662797440907460178544085171994x2 =0.0067214622395756734146654770697884。
《MATLAB与数值分析》第一次上机实验报告
电子科技大学电子工程学院标准实验报告(实验)课程名称MATLAB与数值分析学生姓名:李培睿学号:2013020904026指导教师:程建一、实验名称《MATLAB与数值分析》第一次上机实验二、实验目的1. 熟练掌握矩阵的生成、加、减、乘、除、转置、行列式、逆、范数等运算操作。
(用.m文件和Matlab函数编写一个对给定矩阵进行运算操作的程序)2. 熟练掌握算术符号操作和基本运算操作,包括矩阵合并、向量合并、符号转换、展开符号表达式、符号因式分解、符号表达式的化简、代数方程的符号解析解、特征多项式、函数的反函数、函数计算器、微积分、常微分方程的符号解、符号函数的画图等。
(用.m文件编写进行符号因式分解和函数求反的程序)3. 掌握Matlab函数的编写规范。
4、掌握Matlab常用的绘图处理操作,包括:基本平面图、图形注释命令、三维曲线和面的填充、三维等高线等。
(用.m文件编写在一个图形窗口上绘制正弦和余弦函数的图形,并给出充分的图形注释)5. 熟练操作MATLAB软件平台,能利用M文件完成MATLAB的程序设计。
三、实验内容1. 编程实现以下数列的图像,用户能输入不同的初始值以及系数。
并以x,y为坐标显示图像x(n+1) = a*x(n)-b*(y(n)-x(n)^2);y(n+1) = b*x(n)+a*(y(n)-x(n)^2)2. 编程实现奥运5环图,允许用户输入环的直径。
3. 实现对输入任意长度向量元素的冒泡排序的升序排列。
不允许使用sort 函数。
四、实验数据及结果分析题目一:①在Editor窗口编写函数代码如下:并将编写的函数文件用“draw.m”储存在指定地址;②在Command窗口输入如下命令:③得到图形结果如下:题目二:①在Editor窗口编写函数代码如下:并将编写的函数文件用“circle.m”储存在指定地址;②再次在Editor窗口编写代码:并将编写的函数文件用“Olympic.m”储存在指定地址;③在Command窗口输入如下指令(半径可任意输入):④按回车执行,将在图形窗口获得五环旗:题目三:①在Editor窗口编写函数代码如下:并用.将编写的函数文件用“qipaofa.m”储存在指定地址;②在Command窗口输入一组乱序数值,则可以得到升序排序结果如下:五、总结及心得体会1.要熟悉MATLAB编译软件的使用方法,明白有关语法,语句的基本用法,才可以在编写程序的时候游刃有余,不至于寸步难行。
(完整word)Matlab实验报告
实验一:Matlab操作环境熟悉一、实验目的1.初步了解Matlab操作环境.2.学习使用图形函数计算器命令funtool及其环境。
二、实验内容熟悉Matlab操作环境,认识命令窗口、内存工作区窗口、历史命令窗口;学会使用format 命令调整命令窗口的数据显示格式;学会使用变量和矩阵的输入,并进行简单的计算;学会使用who和whos命令查看内存变量信息;学会使用图形函数计算器funtool,并进行下列计算:1.单函数运算操作。
求下列函数的符号导数(1)y=sin(x);(2) y=(1+x)^3*(2-x);求下列函数的符号积分(1)y=cos(x);(2)y=1/(1+x^2);(3)y=1/sqrt(1—x^2);(4)y=(x1)/(x+1)/(x+2)求反函数(1)y=(x-1)/(2*x+3); (2) y=exp(x);(3) y=log(x+sqrt(1+x^2));代数式的化简(1)(x+1)*(x-1)*(x-2)/(x-3)/(x—4);(2)sin(x)^2+cos(x)^2;(3)x+sin(x)+2*x—3*cos(x)+4*x*sin(x);2.函数与参数的运算操作。
从y=x^2通过参数的选择去观察下列函数的图形变化(1)y1=(x+1)^2(2)y2=(x+2)^2(3) y3=2*x^2 (4) y4=x^2+2 (5) y5=x^4 (6) y6=x^2/2 3.两个函数之间的操作求和(1)sin(x)+cos(x) (2) 1+x+x^2+x^3+x^4+x^5乘积(1)exp(—x)*sin(x) (2) sin(x)*x商(1)sin(x)/cos(x); (2) x/(1+x^2); (3) 1/(x—1)/(x—2); 求复合函数(1)y=exp(u) u=sin(x) (2) y=sqrt(u) u=1+exp(x^2)(3) y=sin(u) u=asin(x) (4) y=sinh(u) u=-x实验二:MATLAB基本操作与用法一、实验目的1.掌握用MATLAB命令窗口进行简单数学运算。
《MATLAB及应用》实验报告1 MATLAB数值计算
电气工程学院实验报告实验项目名称MATLAB数值计算所属课程名称MATLAB及应用实验类型上机实验实验日期2014-03- 5指导教师XXXXXX班级XXXXXXXXX学号XXXXXXXXXX 姓名XXXXXXXX成绩一、实验名称MATLAB数值计算二、实验目的(1)掌握MATLAB变量的使用(2)掌握MATLAB数组的创建(3)掌握MATLAB数组和矩阵的运算(4)熟悉MATLAB多项式的运用三、实验原理1. 矩阵分析矩阵转置:单引号(’)矩阵的旋转:rot90(A,k),功能是将矩阵A旋转90度的k倍,缺省值是1 矩阵的左右翻转:fliplr(A)矩阵的上下翻转:flipud(A)矩阵的逆:inv(A),与A^(-1)等价矩阵的行列式:det(A)矩阵的秩:rank(A)矩阵的迹:trace(A)将矩阵化为最简式:rref(A)矩阵的特征值与特征向量:(1) E = eig(A);矩阵A的所有特征值构成向量E;(2) [V,D]=eig(A);A的所有特征值构成对角阵D,A的特征向量构成V的列向量;2. 多项式多项式的建立:若多的项的全部根构成的向量为X,则以X为根的多项式为poly(X)多项式的根:roots(p)计算以向量p为系数的多项式的根,包括重根,复根多项式求值:polyval(p,x),p是多项式的系数,x可以是一个数也可以是一个矩阵多项式求拟合次数:polyfit(x,y,n),x可以是一个数也可以是一个矩阵,y 是x对应的数或矩阵多项式的四则运算:(1)P1+P2;(2)P1-P2;(3)conv(P1,P2), (4)deconv(P1,P2)四、实验内容1. 已知矩阵11 12 13 1421 22 23 24A= 31 32 33 344142 43 44(1) A(:,1) (2) A(2,:) (3) A(:,2:3)(4) A(2:3,2:3) (5) A(:,1:2:3) (6) A(2:3)(7) A(:) (8) A(:,:) (9) ones(2,2)(10) eye(2) (11) [A,[ones(2,2);eye(2)]] (12) diag(A)(13) diag(A,1) (14) diag(A,-1) (15) diag(A,2)2. 已知2354127354217623A-⎡⎤⎢⎥--⎢⎥=⎢⎥-⎢⎥--⎣⎦.求(1)A的逆;(2)A的行列式;(3)A的迹;(4)A的所有特征向量和特征值。
Matlab上机实验答案.docx
实验一MATLAB 运算基础Matlab 上机实验答案1. 先求下列表达式的值,然后显示MATLAB X 作空间的使用情况并保存全部变量。
» z1 =2*sin(85*pi/180)/(1 +exp(2)) z1 =0.2375⑵ z? =*ln(x +Jl + x?),其中 「45 » x=[2 1+2i;・0.45 5];» z2=1/2*log(x+sqrt(1 +x A2)) z2 =0.7114 ・ 0.0253i 0.8968 + 0.3658i 0.2139+ 0.9343i1.1541 ・0.0044ie 0.3asin(a+0.3) + ln^^a = —3Q — 29 2.9,3.0(1)2sin85°» a=-3.0:0.1:3.0;» z3=(exp(0.3.*a)-exp(-0.3.*a))./2.*sin(a+0.3)+log((0.3+a)./2)(» z33=(exp(0.3*a)-exp(-0.3*a))/2.*sin(a+0.3)+log((0.3+a)/2)可以验证z3==z33,是否都为1)z3 =Columns 1 through 50.7388 + 3.1416i 0.7696 + 3.1416i 0.7871 + 3.1416i 0.7913 + 3.1416i 0.7822 + 3.1416iColumns 6 through 100.7602 + 3.1416i 0.7254 + 3.1416i 0.6784 + 3.1416i 0.6196 + 3.1416i 0.5496 + 3.1416iColumns 11 through 150.4688 + 3.1416i 0.3780 + 3.1416i 0.2775 + 3.1416iColumns 16 through 20-0.0771 + 3.1416i -0.2124 + 3.1416i -0.3566 + 3.1416i -0.5104 + 3.1416i -0.6752 + 3.1416iColumns 21 through 25-0.8536 + 3.1416i -1.0497 + 3.1416i -1.2701 + 3.1416i -1.5271+3.1416i -1.8436 + 3.1416iColumns 26 through 30-2.2727 + 3.1416i -2.9837 + 3.1416i -37.0245 + O.OOOOi-3.0017 + O.OOOOi -2.3085 + O.OOOOiColumns 31 through 35-1.8971 + O.OOOOi -1.5978 + O.OOOOi -1.3575 + O.OOOOi -1.1531 + O.OOOOi -0.9723 + O.OOOOiColumns 36 through 400.4841 + O.OOOOi0.6474 + O.OOOOi0.6119 + O.OOOOi 0.5777 + O.OOOOi 0.5327 + O.OOOOi-0.8083 + O.OOOOi -0.6567 + O.OOOOi -0.5151 + O.OOOOi-0.3819 + O.OOOOi -0.2561 + O.OOOOiColumns 41 through 45-0.1374 + O.OOOOi -0.0255 + O.OOOOi 0.0792 + O.OOOOi0.1766 + O.OOOOi 0.2663 + O.OOOOiColumns 46 through 500.3478 + O.OOOOi 0.4206 + O.OOOOi0.5379 + O.OOOOi 0.5815 + O.OOOOiColumns 51 through 550.6145 + O.OOOOi 0.6366 + O.OOOOi0.6470 + O.OOOOi 0.6351 + O.OOOOiColumns 56 through 600.4774 + O.OOOOi 0.4126 + O.OOOOiColumn 610.3388 + O.OOOOir 0<r<l(4) z4=< t2 -1 l<t<2 9其中Z=0:0・5:2・ 5尸—2r + l 2<r<3»t=0:0.5:2.5;»z4=(t>=0&t<1 ).*(t.A2)+(t>=1 &t<2).*(t.A2-1 )+(t>=2&t<3).*(t.A2-2.*t+1)z4 =0 0.2500 0 1.2500 1.0000 2.25002.已知:求下列表达式的值:(1) A+6*B和A・B+I (其中I为单位矩阵)(2) A*B 和 A.*B⑶A八3和A/3⑷A/B及B\A(5)[A,B]和[A([1,3],:);B^2]» A=[12 34 -4;34 7 87;3 65 7];» B=[1 3-1;2 0 3;3 -2 7];» A+6*Bans =» A.*Bans =12 102 468 0 2619 ・130 49» A A3 ans =37226 23382424737078688 45414214918848604600766118820»A.A3ans =» B\A ans =ans =12 3 4 11 2067.0000-134.0000 68.00003.设有矩阵A和B(1) 求它们的乘积C。
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在数学建模和计算中的重要作用。
(实验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编程,实现数值计算的多种方法,体会数值计算的方法,并且对数值计算的应用有更加深入的了解,对数值计算有更加系统的认识。
实验内容1. 实验中以MATLAB编程求解等折线上的单点,给出相应的曲线图,并用相应的代码计算出可变参数系数n,写出实验步骤和实验结果。
步骤:(1)设计MATLAB程序,即根据题中给出的函数,确定参数n、x、y的取值范围;(2)在MATLAB中求解单点,并绘制出曲线图;(3)得出可变参数系数n的值。
实验结果:可变参数系数n的值为:n=2.3125。
2. 通过MATLAB编程,实现有Bezier曲线的绘制,给出相应的曲线图,并用相应的代码计算出可变参数系数n,写出实验步骤和实验结果。
步骤:(1)设计MATLAB程序,即根据题中给出的函数,确定参数n、x、y的取值范围;(2)在MATLAB中求解单点,并绘制出Bezier 曲线图;(3)得出可变参数系数n的值。
实验结果:可变参数系数n的值为:n=3.5。
3. 利用MATLAB编程,实现有牛顿迭代法求解非线性方程组,给出相应的收敛图,并用相应的代码计算出可变参数系数A、B和X,写出实验步骤和实验结果。
步骤:(1)根据实验题目给出的非线性方程组,确定A、B、X 的取值范围;(2)用MATLAB编程实现牛顿迭代法求解,在迭代收敛的过程中对收敛的每个步骤的X值画出收敛图;(3)得出可变参数系数A、B和X的值。
实验结果:可变参数系数A的值为:A=3.7;可变参数系数B的值为:B=5.5;可变参数系数X的值为:X=2.0。
实验结论通过本次实验,我们学习了利用MATLAB编程实现数值计算的多种方法,包括等折线上求解单点,Bezier曲线绘制,牛顿迭代法求解非线性方程组等等。
并且我们对数值计算的应用有了更加深入的了解,对数值计算有了更加系统的认识。
matlab数值计算完整版(实验1)
MATLAB 练习题1、已知 x=[2 3 5 6] ,y=-1:2 ,计算 z = x.^y ,解析 z 的值是如何计算的?程序:x=[2,3,5,6];y=-1:2;z=x.^y运行结果:z =0.5000 1.0000 5.0000 36.00002、设 1.2a =, 4.6b =-,8.0c =, 4.0e =-,d=3.2,计算22arctan e a bc t d ππ⎛⎫+ ⎪= ⎪ ⎪⎝⎭。
程序a=1.2;b=-4.6 ;c=8.0 ;e=-4.0;d=3.2;t=atan((2*pi*a+e/(2*pi*b*c))/d);t运行结果:t =1.17023、设矩阵311212123A ⎛⎫ ⎪= ⎪ ⎪⎝⎭,111210111B -⎛⎫ ⎪=- ⎪ ⎪-⎝⎭,求:(1)2A B +;(2)2243A B -;(3)AB ;(4)BA ;(5)AB BA -(1)程序A=[3,1,1;2,1,2;1,2,3];B=[1,1,-1;2,-1,0;1,-1,1];2*A+B运行结果:ans =7 3 16 1 43 3 7(2)程序:A=[3,1,1;2,1,2;1,2,3];B=[1,1,-1;2,-1,0;1,-1,1];4*A^2-3*B^2运行结果:ans =42 21 3840 19 4640 33 56 (3)程序:A=[3,1,1;2,1,2;1,2,3];B=[1,1,-1;2,-1,0;1,-1,1];A*B运行结果:ans =6 1 -26 -1 08 -4 2 (4)程序:A=[3,1,1;2,1,2;1,2,3];B=[1,1,-1;2,-1,0;1,-1,1];B*A运行结果:ans =4 0 04 1 02 2 2 (5)程序:A=[3,1,1;2,1,2;1,2,3];B=[1,1,-1;2,-1,0;1,-1,1];A*B-B*A运行结果:ans =2 1 -22 -2 06 -6 04、设矩阵21102041100A m ⎛⎫ ⎪- ⎪= ⎪ ⎪- ⎪⎝⎭,其中m 是你的学号的后四位,求1A -,A 的特征值和特征向量。
实验三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语言数值计算
上机一、MATLAB 语言数值计算一、MATLAB 入门启动MATLAB 后,就进入MA TLAB 命令窗口(Command Window)或称工作空间(Workspace)。
若你的MATLAB 装在英文Windows 中会出现提示符 », 在提示符后键入任意合法命令,回车后MATLAB 立即运算并显示结果。
若MA TLAB 装在在中文Windows 中, 这一提示符是看不见的,但它仍占据一定的位置。
本书约定(1)所有在命令窗口输入的命令我们都用Courier New 字体,并以 » 开头,请读者注意 » 为系统提示符,不要以为是输入字符。
(2)显示结果用Times New Roman 字体。
(3)%号后面的文字用于注释,并不参与运算,实验时也不必输入。
1. 简单的运算看一个简单的例子,计算V =43π r 3, 其中 r = 2 用MA TLAB 计算如下,» r=2; %分号“;”使此运算结果不显示 » v=4/3*pi*r^3 %没有分号,显示结果 v =33.5103%系统直接显示结果,就象计算器那样注:(1)MATLAB 命令书写格式灵活,可多命令写一行,也可一个命令写多行。
同一行命令用逗号或分号分开,若命令很长,一行不够,可用三点“...”续行。
(2) MA TLAB 允许使用↑ ↓ ← →键来编辑前面的命令。
试一试你就明白了。
2、变量和数据(1)变量类型MA TLAB 使用变量最常用的有数值数组(double array)和字符串(char array)两类。
所有数值变量以双精度(double)方式存储,不区分整数、实数、复数等,变量类型和数组大小也无需预先定义,例如 » a=1+2*ia =1.0000 +2.0000i %复数» a1='This is a string'a1 =This is a string %字符串» A=[1 2;-1 3]A =1 2-1 3 %二维数组,即矩阵(2)常量和特殊变量ans是系统本身一个特殊变量名,若运算结果没有赋于任何变量,系统就自动将其赋予ans。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章数值计算3.1LU分解和恰定方程组的解Matlab矩阵的分解形式主要有:三角分解、正交化、特征值分解。
3.1.1LU三角分解、行列式和逆1、LU分解是利用Gaussian列主元消去法进行的。
为了保证主元消去策略的实施,一般来说,必须对被分解矩阵实施行置换因此有:LU=PA 式中L为主对角元为1的下三角矩阵,U是上三角矩阵,P是由0或1组成的行置换矩阵:[L UP]=lu(A)2、A-1=U-1L-1P Matlab根据以上算法编制了相应的指令:det(a) 求矩阵a的行列式inv(a) 求矩阵a的逆矩阵3.1.2恰定方程组的解在求解方程式,尽量不要使用inv(a)*b指令,而应采用a\b,后者计算速度比前者快,精确度高。
【例3.1.2-1】“求逆”法和“左除”法解恰定方程的性能对比(1)randn('state',0);A=gallery('randsvd',100,2e13,2); %产生条件数为2e13的100阶随机矩阵x=ones(100,1);b=A*x;(2)ticxi=inv(A)*b;ti=toc(3)tic;xd=A\b;td=toc;3.1.3矩阵特征值和矩阵函数矩阵A与向量x相乘,即表示矩阵对向量的变换(transformation),一般说来,向量在变换的作用下将发生旋转(rotation),反射(reflection)和放大缩小。
但对于任何一个矩阵来说,中存在那么一些特殊的向量,再对其变化的作用下,向量的方向不变,而仅长短发生变化。
这种向量就是所谓的特征向量(eigenvector),它满足方程 Ax=λx3.1.3.1特征值和特征向量的求取d=eig(a) 仅仅计算a的特征值[v d]=eig(a) 计算矩阵a的特征向量阵v和特征对角阵d,使av=vd成立。
【例3.1.3.1-1】简单实阵的特征值问题。
A=[1,-3;2,2/3];[V,D]=eig(A)V =0.7746 0.77460.0430 - 0.6310i 0.0430 + 0.6310iD =0.8333 + 2.4438i 00 0.8333 - 2.4438i3.2数据分析3.2.1 基本统计函数指令note: 1、median(x) 当x为向量时,先把x元素有小到大排列,然后在新排成数组中;n为奇取(n+1)/2个元素;n为偶数时取n/2与(n/2+1)元素的平均值,作为总位数。
2、输入为向量,则运算对整个向量进行的。
若输入是数组,那么指令运算时按列进行的。
结果为一行向量。
3、Max(a,b)取a b矩阵中加大的数.clear all; a=reshape(1:9,3,3);b=reshape(1:16,4,4);median(a),median(b) ans =2 5 8ans =2.5000 6.5000 10.5000 14.5000clear all;a=reshape(1:16,4,4);b=max(a),c=max(max(a)),b =4 8 12 16c =16[x y]=max(a)x =4 8 12 16y =4 4 4 4【例】hist(histogram)指令的使用示例。
randn('state',1),rand('state',31)x=randn(1000,1);y=rand(1000,1);%图 3.2-13.3函数的数值导数(1) 数值差分和导数、偏导数dx=diff(x) %求X相邻行元素间的一阶差分。
dx=diff(x,n) %求X相邻元素间的n阶差分。
dx=diff(x,n,dim) %在dim指定的维上,求X相邻元素间的n阶差分。
note:1、diff是基于前向差分概念设计的,即dx/dt=(x(t+h)-x(t))/h2、数值导数的求取应尽量避免。
3、一般需先通过多项式拟合,或通过样条拟合,然后再从元数据拟合函数求导。
4、利用多项式求导。
【例3.3-1】y=sin(x)的导数为cos(x),利用数值求导及多项式拟合求导,并进行比较。
x=0:pi/10:2*pi; y=sin(x);plot(x,y);hold on;y1=diff(y);plot(x(2:end),y1);plot(x,cos(x),':r');p=polyfit(x,y,5);p1=polyder(p);y2=polyval(p1,x);p(2)数值梯度[fx fy]=gradient(F,h)note:1、数值梯度使用的场合与数值导数相同2、MATLAB约定:数组的“行”数据点沿x轴取得,“列”数据点沿y轴取的。
3、h为步长。
(3)方向导数的可视化quiver(x,y,u,v,scale) 在(x,y)二维平面点上,画(u,v)方向的箭头。
scale 表示箭头的长度,默认值为1。
【例3.3-2】用一个简单矩阵表现diff和gradient指令计算方式。
F=[1,2,3;4,5,6;7,8,9]Dx=diff(F)Dx_2=diff(F,1,2)[FX,FY]=gradient(F)[FX_2,FY_2]=gradient(F,0.5)【例 3.3-3】研究偶极子的电势和电场强度。
设在),(b a 处有电荷q +,在),(b a --处有电荷q -。
那么在电荷所在平面上任何一点的电势和场强分别为)11(4),(0-+-=r r q y x V πε,V E -∇= 。
其中2222)()(,)()(b y a x r b y a x r +++=-+-=-+。
9010941⋅==πεk 。
又设电荷6102-⋅=q ,5.1=a ,5.1-=b 。
clear;clf;q=2e-6;k=9e9;a=1.5;b=-1.5;x=-6:0.6:6;y=x;[X,Y]=meshgrid(x,y);rp=sqrt((X-a).^2+(Y-b).^2);rn=sqrt((X+a).^2+(Y+b).^2); V=q*k*(1./rp-1./rn); [ex,ey]=gradient(-V);ae=sqrt(ex.^2+ey.^2);ex=ex./ae;ey=ey./ae; cv=linspace(min(min(V)),max(max(V)),49); contourf(X,Y,V,cv,'k-') axis('square')title('\fontname{隶书}\fontsize{22}偶极子的场'),hold on quiver(X,Y,ex,ey,0.7) plot(a,b,'wo',a,b,'w+')plot(-a,-b,'wo',-a,-b,'w-')xlabel('x');ylabel('y'),hold off3.4 函数的零点和极点很多情况下,需要求函数数组子矩阵的零点和极点3.4.1 多项式的根出于计算考虑,Matlab 不对多项式直接求根,而是通过求他的伴随矩阵的特征值进行,对于阶数不超过20的多项式,这种处理方法被认为是最适当可靠的计算方法。
指令:roots(p) 求多项式P 的根,其中p 为多项式系数的行向量。
【例 3.4.1-1】利用多项式计算y=sin(x),在零到2*pi 区间内5阶多项式拟合,并计算此多项式的的零点。
clear all;x=0:pi/10:2*pi;y=sin(x); p=polyfit(x,y,5); roots(p)clear all;p=[1 -5 6]; poly2str(p,'x'),roots(p)一元函数的零点与多项式不同,任意函数f(x)=0可能有零点,也可能没有零点,可能有一个零点,也可能有多个零点,因此,很难说出一个通用解法。
一般来说,零点的数值计算过程是,先猜测一个初始零点或该令点所在的区间,然后通过一些计算,是猜测值不断精确化,或是猜测区间不断收缩,直到达到预先指定的精度,终止计算。
指令: z=fzero(fun,xo)note:1、该函数只能求去一元连续函数穿越横轴的零点,而不会确定连续函数曲线,那种子触及横轴而不穿越横轴的零点。
例如abs(sin(x))。
2、fun 为字符串或内联函数(inline function )4、x0时表示零点初始猜测,此点应该靠近零点5、无法判断x0时,可利用plot指令。
Example 1Calculate π by finding the zero of the sine function near 3.x = fzero(@sin,3)x =3.1416Example 2To find the zero of cosine between 1 and 2x = fzero(@cos,[1 2])x =1.5708Note that cos(1) and cos(2) differ in sign.Example 3To find a zero of the function f(x) = x3–2x–5, write an anonymous function f:f = @(x)x.^3-2*x-5;Then find the zero near 2:z = fzero(f,2)z =2.0946Because this function is a polynomial, the statement roots([1 0 -2 -5]) finds the same real zero, and a complex conjugate pair of zeros.2.0946-1.0473 + 1.1359i-1.0473 - 1.1359iIf fun is parameterized, you can use anonymous functions to capture the problem-dependent parameters. For example, suppose you want to minimize the objective function myfun defined by the following function file:function f = myfun(x,a)f = cos(a*x);Example 4求sin(x)靠近pi的零点z=fzero('sin(x)',3)Example 5求sin(x)/x的主瓣上的零点clear all;x=-2*pi:pi/10:2*pi;y=sin(x+eps)./(x+eps);figuregrid ;holdplot(x,y);hold off[a b]=ginput(2);fs=inline('sin(x)/x','x');z1=fzero(fs,a(1));z2=fzero(fs,a(2));3.4.2函数极值点许多科学研究和工程计算问题口可以归结为一个极值问题,如能量最小,时间最短,最佳拟合等等。