MATLAB实验二MATLAB的数值运算和程序
matlab实现数值计算功能源程序(个人整理)
matlab数值计算功能1,基础运算(1)多项式的创建与表达将多项式(x-6)(x-3)(x-8)表示为系数形式a=[6 3 8] % 写成根矢量pa=poly(a)% 求出系数矢量ppa=poly2sym(pa,'x') % 表示成符号形式ezplot(ppa,[-50,50])求3介方阵A的特征多项式a=[6 2 4;7 5 6;1 3 6 ];pa=poly(a)% 写出系数矢量ppa=poly2sym(pa) %表示成符号形式ezplot(ppa,[-50,50]) % 绘图求x^3-6x^2-72x-27的根。
a=[1,-6,-72,-85]; % 写出多项式系数矢量r=roots(a) % 求多项式的根(2)多项式的乘除运算c=conv(a,b) %乘法[q,r]=deconv(c,a)% 除法求a(s)=s^2+2s+3乘以b(s)=4s^2+5s+6的乘积a=[1 2 3]b=[4 5 6] % 写出系数矢量c=conv(a,b)c=poly2sym(c,'s') % 写成符号形式的多项式展开(s^2+2s+2)(s+4)(s+1)并验证结果被(s+4),(s+3)除后的结果。
c=conv([1,2,2],conv([1,4],[1,1]))cs=poly2sym(c,'s')c=[1 7 16 18 8][q1,r1]=deconv(c,[1,4])[q2,r2]=deconv(c,[1,3])cc=conv(q2,[1,3])test=((c-r2)==cc)其他常用的多项式运算命令pa=polyval(p,s) % 按数组规则计算给定s时多项式的值pm=polyvalm(p,s)% 按矩阵规则计算给定s时多项式的值[r,p,k]=residue(b,a) % 部分分式展开,b,a分别是分子,分母多项式系数矢量。
r,p,k分别是留数,极点和值项矢量。
(完整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语言课件 第2讲 MATLAB语言的数值运算共47页
主要用途:使命令输入更简单化(没有输入参数也没有输 出参数)
当用户需要重复输入许多相同的命令时,可将它们放在一 个命令文件中,每次只要输入文件名,即可得相同的运行结果。
实质是将用户在 MATLAB 命令窗口中输入的一串命 令用另外一个名称来代替。 ( 2 )函数文件
程序的基本组成 %说明部分 清除命令(可选) 定义变量(局部变量和全局变量) 按照顺序行执行的命令语句 控制语句开始 控制语句体 控制语句结束 其他命令(如绘图等)
2.1 基本语法结构
2.1.1 变量与赋值语句
1、变量 变量命名规则
(1)必须以字母开头; (2)可以由字母、数字和下划线混合组成; (3)变量长度应不大于31个; (4)字母区分大小写。
2.1.5 程序控制语句 为编写结构化的程序提供了必不可少的条件,可提
高程序的效率和可读性 1、 for循环语句:用来执行循环次数已知的情况 调用格式:
for x=初值:步长:终值 循环体
end
其中:变量 x 称为循环变量,初值、终值和步长可以是标 量,也可以是表达式。当循环语句开始执行时, x 的值被 赋为和初值相同的内容,每执行一次循环体的内容, x 的 值就会按照步长的大小来改变,如果步长为正数,每执行 一次就增加一个步长,否则减小一个步长,一直到变量的 值大于或者小于终值,for语句循环结束,继续执行结束语 句下面的命令。
2.1.3 运算符 Matlab的运算符可分为三类:算术运算符、关系
运算符和逻辑运算符。其中算术运算符的优先级最 高,其次是关系运算符,最后是逻辑运算符。下面 将分别介绍这三类运算符和逻辑函数。
1. 算术运算符 按照运算符的优先级可把算术运算符分为五级。 2. 关系运算符 关系运算符对于程序的流程控制非常有用,在 MATLAB的循环和条件控制中经常使用。
matlab实验内容
2017年-matlab实验内容2017年文化素质课 MATLAB实验实验一、MATLAB基本操与运算基础【实验目的】(1)熟悉MATLAB基本环境,掌握MATLAB变量的使用(2)掌握MATLAB数组的创建(3)掌握MATLAB数组和矩阵的运算【实验内容及步骤】熟悉建立数组的方法:逐个元素输入法、冒号法、特殊方法(使用函数linspace建立)1、有关向量、矩阵或数组的一些运算(1)设A=15;B=20;求C=A+B与c=a+b?(2)设A=[1 2 3;4 5 6;7 8 9],B=[9 8 7;6 5 4;3 2 1];求A*B与A.*B?(3)设a=10,b=20;求i=a/b=?与j=a\b= ?(4)设a=[1 -2 3;4 5 -4;5 -6 7](5)在MATLAB命令行窗口运行A=[1,2;3,4]+i*[5,6;7,8];看结果如何?如果改成运行A=[1,2;3,4]+i[5,6;7,8],结果又如何?(6)请写出完成下列计算的指令:a=[1 2 3;3 4 2;5 2 3],求a^2=?,a.^2=?(7)有一段指令如下,请思考并说明运行结果及其原因clearX=[1 2;8 9;3 6];X( : ) %转化为列向量(8)写出下列指令的运行结果>> A = [ 1 2 3 ]; B = [ 4 5 6 ];>> C = 3.^A>> D = A.^B2、设有矩阵A和B,A=[1 2 3 4 5;6 7 8 9 10;11 12 13 14 15;16 17 18 19 20;21 2223 24 25],B=[3 0 16;17 -6 9;0 23 -4;9 7 0;4 13 11]1)求它们的乘积C2)将矩阵C的右下角3x2子矩阵赋给D3、完成下列操作1)求[100,999]之间能被61整除的数及其个数(提示:先利用冒号表达式,再利用find和length 函数。
MATLAB实验及程序
实验一a=[1,2,3;4,5,6;7,8,9] b= repmat(a,2,2)B(24)=9实验二1、使用matlab命令统计randn(5)生成的矩阵里,有多少个元素小于0,将小于0元素个数存变量c中并将这些小于零元素存变量d中。
(实验报告要求:写出命令)a=randn(5)b=find(a<0);c=length(find(a<0))d=a(b)2、建立一个字符数组,内容如下所示:(实验报告要求:写出命令)A B C DE F G Ha b c da=['A B C D''E F G H''a b c d']3、已知有一个矩阵A(假如不知道其具体信息),请计算其元素个数(请先用实际矩阵来验证计算方法是否正确)。
(实验报告要求:写出正确计算方法的命令)A=randn(3,4)B=numel(A)4、已知有一个元胞数组B=[{ones(2,3,2)},{'Hello, Matlab'};{[4 5 6]},{1:100}],想获取字符串'Matlab',应输入什么命令?(实验报告要求:写出命令)f=B{1,2}(7:end)5、要从上题所建元胞数组B中获取列向量[4;5;6],可以有哪几种方法?(实验报告要求:写出命令及结果)方法1: i=B{2,1}(:)方法2: j=reshape(B{2,1},3,1)6、已知有两个学生的信息如下,请在matlab中创建结构对其进行存储,并算=['姓名''张三''李四']student.shuxue=[8778]student.yuwen=[7581 ]student.yingyu=[5560]实验三实验四:二维绘图(1)在同一个窗体(figure1)中画出正弦函数和余弦函数的图象。
要求如下:◆正弦图象用蓝色实线,时标用方格;◆余弦图象用黄色虚线,时标选向下三角形;◆为整个图像加中文标题;◆为x和y轴加轴标题;◆改x轴的单位为pi/2的倍数;◆增加图例;◆在图中合适的位置增加“正弦曲线”和“余弦曲线”两处文本信息。
MATLAB实验
MATLAB实验一:MATLAB语言基本概念实验实验目的:1. 熟悉MATLAB语言及使用环境;2.掌握MATLAB的常用命令;3.掌握MATLAB的工作空间的使用;4.掌握MATLAB的获得帮助的途径。
5.掌握科学计算的有关方法,熟悉MATLAB语言及其在科学计算中的运用;6.掌握MATLAB的命令运行方式和M文件运行方式;7.掌握矩阵在MATLAB中的运用。
实验方案分析及设计:本次实验主要目的是了解MATLAB的使用环境,以及常用的一些命令的使用;了解矩阵在MATLAB实验中的具体运用,以及相关的一些符号命令的使用。
实验器材:电脑一台,MATLAB软件实验步骤:打开MATLAB程序,将实验内容中的题目依次输入MATLAB中,运行得到并记录结果,最后再对所得结果进行验证。
实验内容及要求:1.熟悉MATLAB的菜单和快捷键的功能2.熟悉MATLAB的命令窗口的使用3.熟悉常用指令的使用format clc clear help lookfor who whos 4.熟悉命令历史窗口的使用5. 熟悉MATLAB工作空间的功能将工作空间中的变量保存为M文件,并提取该文件中的变量6.熟悉MATLAB获取帮助的途径将所有plot开头的函数列出来,并详细给出plotfis函数的使用方法1. 输入 A=[7 1 5;2 5 6;3 1 5],B=[1 1 1; 2 2 2;3 3 3],在命令窗口中执行下列表达式,掌握其含义:A(2, 3) A(:,2) A(3,:) A(:,1:2:3)A(:,3).*B(:,2) A(:,3)*B(2,:) A*BA.*BA^2 A.^2 B/A B./AA=[7 1 5;2 5 6;3 1 5]7 1 52 5 63 1 5>> B=[1 1 1; 2 2 2;3 3 3]1 1 12 2 23 3 3>> A(2, 3)6>> A(:,2)151>> A(3,:)3 1 5>> A(:,1:2:3)7 52 63 5>> A(:,3).*B(:,2)51215>> A(:,3)*B(2,:)10 10 1012 12 1210 10 10>> A*B24 24 2430 30 3020 20 20>> A.*B7 1 54 10 129 3 15>> A^266 17 6642 33 7038 13 46>> A.^249 1 254 25 369 1 25>> B/A0.1842 0.2105 -0.23680.3684 0.4211 -0.47370.5526 0.6316 -0.7105>> B./A0.1429 1.0000 0.20001.0000 0.4000 0.33331.0000 3.0000 0.60002.输入 C=1:2:20,则 C (i )表示什么?其中 i=1,2,3, (10)1到19差为2,i 代表公差3. 试用 help 命令理解下面程序各指令的含义:cleart =0:0.001:2*pi;subplot(2,2,1);polar(t, 1+cos(t))subplot(2,2,2);plot(cos(t).^3,sin(t).^3)subplot(2,2,3);polar(t,abs(sin(t).*cos(t)))subplot(2,2,4);polar(t,(cos(2*t)).^0.5)4计算矩阵⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡897473535与⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡638976242之和。
MATLAB实验指导书
MATLAB基础实验指导书漳州师范学院物电系2010年10月目录实验一MATLAB环境的熟悉与基本运算 (2)实验二MATLAB数值运算 (8)实验三MATLAB语言的程序设计 (12)实验四MATLAB的图形绘制 (12)实验五MATLAB应用实例实验六采用SIMULINK的系统仿真 (17)实验七控制系统的频域与时域分析 (25)实验一 MATLAB环境的熟悉与基本运算一、实验目的:1.熟悉MATLAB开发环境2.掌握矩阵、变量、表达式的各种基本运算二、实验基本知识:1.熟悉MATLAB环境:MATLAB桌面和命令窗口、命令历史窗口、帮助信息浏览器、工作空间浏览器文件和搜索路径浏览器。
2.掌握MATLAB常用命令3.MATLAB变量与运算符变量命名规则如下:(1)变量名可以由英语字母、数字和下划线组成(2)变量名应以英文字母开头(3)长度不大于31个(4)区分大小写MATLAB中设置了一些特殊的变量与常量,列于下表。
MATLAB运算符,通过下面几个表来说明MATLAB的各种常用运算符表2 MATLAB算术运算符表3 MATLAB关系运算符表4 MATLAB逻辑运算符表5 MATLAB特殊运算4.MATLAB的一维、二维数组的寻访表6 子数组访问与赋值常用的相关指令格式5.MATLAB的基本运算表7 两种运算指令形式和实质内涵的异同表6.MATLAB的常用函数表8 标准数组生成函数表9 数组操作函数三、实验内容1、新建一个文件夹(自己的名字命名)2、启动MATLAB6.5,将该文件夹添加到MATLAB路径管理器中。
方法如下:3、保存,关闭对话框4、学习使用help命令,例如在命令窗口输入help eye,然后根据帮助说明,学习使用指令eye(其它不会用的指令,依照此方法类推)5、学习使用clc、clear,观察command window、command history和workspace等窗口的变化结果。
控制系统仿真 实验二
实验二Matlab的数值运算及绘图1.试验目的(1)学习Matlab语言的基本矩阵运算;(2)学习Matlab语言的点运算;(3)学习多项式运算;(4)学习Matlab语言的各种二维绘图;2.试验内容在下面的试验操作中,认真记录每项操作的作用和目的;(1)基本矩阵运算1)创建数值矩阵。
键入a=[1 2 3;4 5 6;7 8 9];观察aa(3,2)a(:,1)键入t=0:10u=0:0.1:10观察矩阵变量t,u的值。
键入a(:,3)=[2;3;4]a观察矩阵a的变化。
键入b=[1 1+2i ;3+4i 3]观察复数矩阵。
2)创建特殊矩阵;键入a=ones(3,3)b=zeros(2,2)c=eye(4)观察特殊矩阵。
3)练习矩阵运算;键入a=[0 1 0;0 0 1;-6 -11 -6]; b=[1 2;3 4;5 6];c=[1 1 0;0 1 1];作矩阵乘运算v1=c*av2=a*bv3=c*a*bv4=b*cv5=c*b矩阵乘方运算a^2a^(1/2)矩阵加减运算a1=a+b*ca2=c*b-a(1:2,1:2)a3=a(1:2,2:3)+c*b矩阵右除(矩阵右除为四则运算的除运算,必须满足矩阵维数的要求)ar=c/a矩阵左除(矩阵左除等价于逆乘运算a\c=a-1*c,a-1为矩阵a的逆运算)al=a\b4)练习矩阵特征运算完成以下矩阵特征运算。
a'inv(a)rank(a)det(a)eig(a)(2)Matlab语言的点运算1)练习点乘与点除。
a1=[1 2;3 4]a2=0.2*a1观察[a1 a2][a1.*a2 a1./a2]2)由点运算完成标量函数运算与作图。
正、余弦函数的点运算。
t=0:2*pi/180:2*pi;y1=sin(t);y2=cos(t);y=y1.*y2;plot(t,[y' y1' y2']);(3)多项式运算1)建立多项式向量;ap=[1 3 3 1];b=[-1 -2 -3];bp=poly(b)2)练习多项式乘与求根。
MATLAB实验
MATLAB 实验报告班级:14通信1班 学号:201424124124 姓名:林启铭实验一 MATLAB 运算基础(一)一、实验目的1、掌握建立矩阵的方法。
2、掌握MATLAB 各种表达式的书写规则以及各种运算方法。
二、实验内容1、求下列表达式的值。
(1)20185sin 21ez += MATLAB 代码:z1=2*sin(85*pi/180)/(1+exp(2))%将角度化为弧度z1 =0.2375(2)()x x z ++=1ln 212,其中⎢⎣⎡-=45.02x ⎥⎦⎤+521i (可以分别对矩阵和元素群运算)MATLAB 代码:>> x=[2,1+2i;-0.45,5]x =2.0000 + 0.0000i 1.0000 + 2.0000i-0.4500 + 0.0000i 5.0000 + 0.0000i>> z2=1/2*log(x+sqrt(1+x))z2 =0.6585 + 0.0000i 0.6509 + 0.4013i-0.6162 + 0.0000i 1.0041 + 0.0000i(3)()3.0sin 232.03.0+⋅-=a e e z aa , 0.3,9.2,8.2,...,8.2,9.2,0.3---=a (结果请用图形表示)(提示:利用冒号表达式生成a 向量;求各点的函数值时用点乘运算)MATLAB 代码:>> a=-3.0:0.1:3.0;%利用冒号表达式生成a 向量,加分号结尾避免大量数据刷屏 >> z3=(exp(0.3.*a)-exp(0.2.*a)).*sin(a+0.3)/2;>> plot(a,z3);%绘制出以a 为自变量,z3为因变量的曲线>>曲线图:2、已知⎢⎢⎢⎣⎡=33412A 65734⎥⎥⎥⎦⎤-7874 和 ⎢⎢⎢⎣⎡=321B 203-⎥⎥⎥⎦⎤-731 求下列表达式的值:(1)A+6*B 和A-B+I (其中I 为单位矩阵)。
MATLAB实验报告
实验二MATLAB语言基础一、实验目的基本掌握MA TLAB向量、矩阵、数组的生成及其基本运算(区分数组运算和矩阵运算)、常用的数学函数。
了解字符串的操作。
二、实验内容1.向量的生成与运算;2.矩阵的创建、引用和运算;3.多维数组的创建及运算;4.字符串的操作。
三、实验步骤1.向量的生成与运算①向量的生成向量的生成有三种方法:直接输入法:生成行向量、列向量;冒号表达式法:变量=初值:间隔(可正可负):终值函数法:使用linspace线性等分函数,logspace对数等分函数。
格式为:linspace(初值,终值,个数)Logspace(初值,终值,个数), 初值及终值均为10的次幂。
②向量的运算A=[1 2 3 4 5],b=3:7,计算两行向量的转置,两行向量人加、减,两列向量的加、减;向量的点积与叉积。
a=[1 2 3 4 5];b=3:7;a =1 2 3 4 5b =3 4 5 6 7at=a',bt=b'at =12345bt =34567e1=a+b,e2=a-be1 =4 6 8 10 12 e2 =-2 -2 -2 -2 -2 f1=at+bt,f2=at-btf1 =4561012f2 =-2-2-2-2-2g1=dot(a,b),g2=a*bt>> g1=dot(a,b),g2=a*btg1 =85g2 =85g4=a.*b>> g4=a.*bg4 =3 8 15 24 35A=1:3;B=4:6;g3=cross(A,B)>> g3=cross(a,b)g3 =-3 6 -3注意:g1和g2的结果是否相同,为什么?g4的结果与g1和g2结果是否一样,为什么?g1和g2的结果相同,因为两者是同一种运算;g4与g1和g2不相同,因为两者一个是点乘一个是叉乘,运算不一样。
2.矩阵的创建、引用和运算矩阵是由n×m元素构成的矩阵结构。
2 matlab的数值运算
下次运行matlab时即可用load指
令调用已生成的mat文件。
load —— load data —— load data a b ——
即可恢复保 存过的所有 变量
mat文件是标准的二进制文件,
还可以ASCII码形式保存。
三、矩阵运算
1. 矩阵加、减(+,-)运算
规则:
相加、减的两矩阵必须有相同的行和 列两矩阵对应元素相加减。 允许参与运算的两矩阵之一是标量。 标量与矩阵的所有元素分别进行加 减操作。
二、数据的保存与获取
把matlab工作空间中一些有用的数 据长久保存下来的方法是生成mat数 据文件。 save —— 将工作空间中所有的变 量存到matlab.mat文件中。 默认文件名
save data——将工作空间中所
有的变量存到data.mat文件中。
save data a b ——将工作空间 中a和b变量存到data.mat文件中。
3.conv,convs多项式乘运算
例:a(x)=x2+2x+3; b(x)=4x2+5x+6; c = (x2+2x+3)(4x2+5x+6) a=[1 2 3];b=[4 5 6]; c=conv(a,b)=conv([1 2 3],[4 5 6]) c = 4.00 13.00 28.00 27.00 18.00 p=poly2str(c,'x') p = 4 x^4 + 13 x^3 + 28 x^2 + 27 x + 18
直接修改 可用键找到所要修改的矩阵,用键 移动到要修改的矩阵元素上即可修改。 指令修改 可以用A(,)= 来修改。
MATLAB课程设计
一、课程目的初步学会使用MATLAB软件,掌握MATLAB基本的函数的使用,熟练MATLAB编程,以便为今后数字信号的处理打下基础。
二、课程内容实验一 MATLAB语言基础实验目的:基本掌握 MATLAB 向量、矩阵、数组的生成及其基本运算(区分数组运算和矩阵运算)、常用的数学函数。
了解字符串的操作。
实验内容:1、创建以下矩阵:A为3×4的全 1 矩阵、B为3×3的0矩阵、C 为3×3的单位阵、D为3×3的魔方阵、E由C和D纵向拼接而成、F抽取E的2~5行元素生成、G由F经变形为3×4的矩阵而得、以G为子矩阵用复制函数(repmat)生成6×8的大矩阵H。
源程序:A=ones(3,4)% A为3×4的全 1 矩阵B=zeros(3)% B为3×3的0矩阵C=eye(3)% C为3×3的单位阵D=magic(3)% D为3×3的魔方阵E=cat(1,C,D)% E由C和D纵向拼接而成F=E(2:5,:)% F抽取E的2~5行元素生G=reshape(F,3,4)% G由F经变形为3×4的矩阵而得H=repmat(G,2,2) %以G为子矩阵用复制函数(repmat)生成6×8的大矩阵H运行结果:A =1 1 1 11 1 1 11 1 1 1B =0 0 00 0 00 0 0C =1 0 00 1 0 0 0 1 D =8 1 6 3 5 7 4 9 2 E =1 0 0 0 1 0 0 0 1 8 1 6 3 5 7 4 92 F =0 1 0 0 0 1 8 1 6 3 5 7 G =0 3 1 1 0 1 5 6 8 0 0 7 H =0 3 1 1 0 3 1 1 0 1 5 6 0 1 5 6 8 0 0 7 8 0 0 7 0 3 1 1 0 3 1 1 0 1 5 6 0 1 5 6 8 0 0 7 8 0 0 72、(1)用矩阵除法求下列方程组的解 x=[x 1;x 2;x 3];⎪⎩⎪⎨⎧-=---=++-=++73847523436321321321x x x x x x x x x (2) 求矩阵的秩;(3) 求矩阵的特征值与特征向量; (4) 矩阵的乘幂与开方; (5) 矩阵的指数与对数; (6) 矩阵的提取与翻转。
matlab数学实验报告
MATLAB数学实验报告指导老师:班级:小组成员:时间:201_/_/_Matlab第二次实验报告小组成员:1题目:实验四;MATLAB选择结构与应用实验目的:掌握if选择结构与程序流程控制;重点掌握break;return;pause语句的应用..问题:问题1:验证“哥德巴赫猜想”;即:任何一个正偶数n>=6均可表示为两个质数的和..要求编制一个函数程序;输入一个正偶数;返回两个质数的和..问题分析:由用户输入一个大于6的偶数;由input语句实现..由if判断语句判断是否输入的数据符合条件..再引用质数判断函数来找出两个质数;再向屏幕输出两个质数即可..编程:function z1;z2=geden;n=input'please input n'if n<6disp'data error';returnendif modn;2==0for i=2:n/2k=0;for j=2:sqrtiif modi;j==0k=k+1;endendfor j=2:sqrtn-iif modn-i;j==0k=k+1;endendif k==0fprintf'two numbers are'fprintf'%.0f;%.0f';i;n-ibreakendendend结果分析:如上图;用户输入了大于6的偶数返回两个质数5和31;通过不断试验;即可验证哥德巴赫猜想..纪录:if判断语句与for循环语句联合嵌套使用可使程序结构更加明晰;更快的解决问题..2题目:实验四;MATLAB选择结构与应用实验目的:用matlab联系生活实际;解决一些生活中常见的实际问题..问题:问题四:在一边长为1的四个顶点上各站有一个人;他们同时开始以等速顺时针沿跑道追逐下一人;在追击过程中;每个人时刻对准目标;试模拟追击路线;并讨论.. (1)四个人能否追到一起(2)若能追到一起;每个人跑过多少路程(3)追到一起所需要的时间设速率为1问题分析:由正方形的几何对称性和四个人运动的对称性可知;只需研究2个人的运动即可解决此问题..编程:hold onaxis0 1 0 1;a=0;0;b=0;1;k=0;dt=0.001;v=1;while k<10000d=norma-b;k=k+1;plota1;a2;'r.';'markersize';15;plotb1;b2;'b.';'markersize';15;fprintf'k=%.0f b%.3f;%.3f a%.3f;%.3f d=%.3f\n';k;b1;b2;a1;a2;da=a+b1-a1/d*dt;b2-a2/d*dt;b=b+b2-a2/d*dt;-b1-a1/d*dt;if d<=0.001breakendendfprintf'每个人所走的路程为:%.3f';k*v*dtfprintf'追到一起所需要的时间为%.3f';k*dt结果分析:上图为2人的模拟运动路线;有对称性可解决所提问题..-上图为运算过程和运算结果..四个人可以追到一起;走过的路程为1.003;时间也为1.003.纪录:此题利用正方形和运动的对称性可以简便运算..3题目:实验八;河流流量估计与数据插值目的:由一些测量数据经过计算处理;解决一些生活实际问题..问题:实验八上机练习题第三题:瑞士地图如图所示;为了算出他的国土面积;做以下测量;由西向东为x轴;由南向北为y轴;从西边界点到东边界点划分为若干区域;测出每个分点的南北边界点y1和y2;得到以下数据mm..已知比例尺1:2222;计算瑞士国土面积;精确值为41288平方公里..测量数据如下:x=7.0 10.5 13.0 17.5 34 40.5 44.5 48 56 61 68.5 76.5 80.5 91 96 101 104 106 111.5 118 123.5 136.5 142 146 150 157 158 ;y1=44 45 47 50 50 38 30 30 34 36 34 41 45 46 43 37 33 28 32 65 55 54 52 50 66 66 68;y2=44 59 70 72 93 100 110 110 110 117 118 116 118 118 121 124 121 121 121 122 116 83 81 82 86 85 68;问题分析:先由题目给定的数据作出瑞士地图的草图;再根据梯形法;使用trapz语句;来估算瑞士国土的面积..编程:x=7.0 10.5 13.0 17.5 34 40.5 44.5 48 56 61 68.5 76.5 80.5 91 96 101 104 106 111.5 118 123.5 136.5 142 146 150 157 158;y1=44 45 47 50 50 38 30 30 34 36 34 41 45 46 43 37 33 28 32 65 55 54 52 50 66 66 68;y2=44 59 70 72 93 100 110 110 110 117 118 116 118 118 121 124 121 121 121 122 116 83 81 82 86 85 68;plotx;y1;'r.';'markersize';15;plotx;y2;'r.';'markersize';15;axis0 160 0 135grid;hold ont=7:158;u1=splinex;y1;t;u2=splinex;y2;t;plott;u1plott;u2s1=trapzt;u1;s2=trapzt;u2;s=s2-s1*2222*22222/10000000;fprintf'S=%.0f';s结果分析:上图为由所给数据绘制出的瑞士地图..上图为运算结果;计算出瑞士的国土面积为42472平方公里;与准确值41288较为接近..纪录:使用梯形分割的方法;trapz语句可以方便计算不规则图形面积;但存在一定误差..4题目:实验七:圆周率的计算与数值积分目的:将数值积分最基本的原理应用于matlab之中;解决一些与积分有关的问题..问题:实验七上机练习题第一题:排洪量某河床的横断面如图7.3所示;为了计算最大排洪量;需要计算其断面积;试根据所给数据m用梯形法计算其断面积..问题分析:河床断面可近似分割成若干曲边梯形;近似处理把它们当做梯形来计算面积可使问题得到简化..编程:clc;clear;x=0 4 10 12 15 22 28 34 40;y=0 1 3 6 8 9 5 3 0;y1=10-y;plotx;y1;'k.';'markersize';15;axis0 40 0 10;grid;hold ont=0:40;u=splinex;y1;t;plott;u;s=40*10-trapzt;u;fprintf's=%.2f\n';s结果分析:上图为河床的断面图..上图为计算结果面积约为180.70平方米..纪录:使用梯形法计算不规则图形面积十分简便易行..5题目:实验七:圆周率的计算与数值积分目的:使用matlab计算解决一些有关积分的问题..问题:实验七上机练习题第三题:从地面发射一枚火箭;在最初100秒内记录其加速度如下;试求火箭在100秒时的速度..Ts=0 10 20 30 40 50 60 70 80 90 100;Am/s*s=30.00 31.63 33.44 35.47 37.75 40.33 43.29 46.69 50.67 54.01 57.23;问题分析:加速度为速度的微分;已知微分求积分;类似于面积问题;可使用梯形法来计算..编程:clc;clear;x=0 10 20 30 40 50 60 70 80 90 100;y=30.00 31.63 33.44 35.47 37.75 40.33 43.29 46.69 50.6754.01 57.23;plotx;y;'k.';'markersize';15;axis0 100 20 60;grid;hold ons=0:10:100;z=splinex;y;s;plots;y;v=trapzx;y;fprintf'v=%.2f\n';v结果分析:上图为加速度变化图..上图为计算结果;求得火箭在100秒时速度约为4168.95m/s..纪录:梯形法可以推广解决许多已知微分求积分的其他问题..6题目:实验七:圆周率的计算与数值积分目的:计算曲线弧长闭曲线周长可使用微元法;ds=sqrtdx^2+dy^2;在转化微积分问题;累加即可得到结果..问题:实验七上机练习题第三题:计算椭圆想x^2/4+y^2=1的周长;使结果具有五位有效数字..问题分析:编程:s=0;dx=0.001;for x=0:0.001:1.999dy=1.-x+0.001.^2/4-1.-x.^2/4;ds=sqrtdx.^2+dy.^2;s=s+ds;ends=4*s;fprintf'the length is'fprintf'%.4f';s结果分析:上图为计算结果;给定椭圆的周长约为9.1823五位有效数字纪录:计算不规则曲线弧长;可使用微元法;划分为若干小的看做直角三角形;利用勾股定理解决..7题目:实验九人口预测与数据拟合目的:掌握一些曲线拟合的方法;了解曲线拟合常用函数..问题:用电压U=10v的电池给电容器充电;t时刻的电压Vt=U-U-V0exp-t/τ;其中V0是电容器的初始电压;τ是充电常数;由所给数据确定V0和τ..t=0.5 1 2 3 4 5 7 9;V=3.64 3.52 2.74 1.78 1.34 1.01 0.57 0.37;问题分析:题中已给出函数关系式;为指数函数曲线拟合;将所给函数式整理可得标准的exp形函数曲线;从而便于解决..编程:t=0.5 1 2 3 4 5 7 9;V=3.64 3.52 2.74 1.78 1.34 1.01 0.57 0.37;plott;V;'k.';'markersize';20;axis0 10 0 4;grid;hold onpause0.5n=8;a=sumt1:n;b=sumt1:n.*t1:n;c=sumlogV1:n;d=sumt1:n.*logV1:n;A=n a;a b;B=c;d;p=invA*Bx=0:10;y=expp1+p2*x;plotx;y;'r-';'linewidth';2结果分析:上图为电压与时间关系图..上图为计算结果;即U-V0=1.4766;所以V0=8.5234;-1/τ=-0.2835;所以τ=3.5273纪录:曲线拟合的一个重难点是选择合适的曲线函数;才能提高拟合度..8题目:实验七圆周率的计算与数值积分目的:拓展圆周率的各种计算方法;掌握其他数值的近似计算方法..问题:实验七练习2:计算ln2的近似值精确到10的-5次方(1)利用级数展开的方法来计算(2)利用梯形法计算(3)利用抛物线法问题分析:级数展开;梯形法;抛物线法是常见的近似运算方法..编程:1级数展开的方法clc;clear;n=0;r=1;p=0;k=-1;while r>=0.1e-5n=n+1;k=k*-1;p1=p+k/n;r=absp1-p;fprintf'n=%.0f;p=%.10f\n';n;p1;p=p1;end2梯形法clc;clear;f=inline'1./x';x=1:0.1:2;y=fx;p=trapzx;y;fprintf'p=%.6f\n';p3抛物线法clc;clear;f=inline'1./x';a=1;b=2;n=1;z=quadf;a;b;fprintf'z=%.10f\n';z结果分析:(1)级数展开的方法(2)梯形法3抛物线法纪录:级数展开法;梯形法;抛物线法;计算近似值时应合理利用..梯形法和抛物线法不易提高精确度;级数展开法可以提高精确度..9题目:实验八河流流量估计与数据插值目的:掌握求插值多项式的方法;并利用此计算近似值..问题:已知y=fx的函数表如下x=0.40 0.55 0.65 0.80 0.90 1.05;y=0.41075 0.57815 0.69675 0.88811 1.02652 1.25382;求四次拉格朗日插值多项式;并由此求f0.596问题分析:利用所给函数表可计算拉格朗日插值多项式..编程:function p=lagrangex;yL=lengthx;a=onesL;for j=2:La:;j=a:;j-1.*x';endx=inva*y';for i=1:Lpi=xL-i+1;endx=0.40 0.55 0.65 0.80 0.90 1.05;y=0.41075 0.57815 0.69675 0.88811 1.02652 1.25382; plotx;y;'k.';'markersize';15axis0 2 0 2grid;hold on;p=lagrangex;y;t=0:0.1:1.5;u=polyvalp;t;plott;u;'r-'a=polyvalp;0.596结果分析:上图为所求结果;估算值和插值多项式..纪录:插值多项式是一项十分实用的方法..10题目:求正整数n的阶乘:p=1*2*3*…*n=n;并求出n=20时的结果目的:练习使用循环变量解决数学问题问题:对程序:Clear;clc;n=20;p=1;for i=1:np=p*i;fprintf’i=%.0f;p=%.0f\n’;i;pend进行修改使它:利用input命令对n惊醒赋值问题分析:题中给出程序中“n=20”修改;使用input命令;讲题中的输出命令放出循环之外..编程:clear;clc;n=input'n=';p=1;for i=1:np=p*i;endfprintf'i=%.0f;p=%.0f\n';i;p结果:n=20i=20;p=2432902008176640000>>结果分析:使用input命令可以实现人机对话;使用户自由赋值;输出语句在程序中的位置对输出的结果有很大的影响;在循环内部可以在计算过城中不断输出结果;在循环之外则可以控制只输出最后结果..11题目:对于数列{√2};n=1;2;…;求当其前n项和不超过1000时的n的值及合的大小..目的:运用条件循环解决文帝个项数的循环程序求解;问题:对程序:clear;clc;n=0;s=0;while s<=1000n=n+1;s=s+sqrtn;fprintf’n=%.0f;s=%.4f\n’;n;send问题分析:题中所给程序中的限制变量为上次循环之后的s;导致s超过上限后仍有一次的循环;若把循环变量改为这次的s;则可以避免这种情况的发生..编程:clear;clc;n=0;s=0;while s+sqrtn<=1000n=n+1;s=s+sqrtnfprintf'n=%.0f;s=%.4f\n';n;send结果:……s =970.8891n=128;s=970.8891s =982.2469n=129;s=982.2469s =993.6487n=130;s=993.6487>>结果分析:从结果中可以看出;最后一步为我们需要的答案;从这道题我们可以得出循环变量对一道编程的重要性..。
MATLAB实验
MATLAB实验实验⼀MATLAB操作基础⼀、实验⽬的1、熟悉MATLAB的操作环境及基本操作⽅法。
2、掌握MATLAB的搜索路径及其设置⽅法。
3、熟悉MATLAB帮助信息的查阅⽅法。
⼆、实验内容1、先建⽴⾃⼰的⼯作⽬录,再将⾃⼰的⼯作⽬录设置到MATLAB搜索路径下,再试验⽤help命令能否查询到⾃⼰的⼯作⽬录。
2、在MATLAB环境下验证例1-1⾄1-4,并完成以下题⽬:(1)绘制右图所⽰图形(23、利⽤MATLAB的帮助功能分别查询inv,plot、max、round等函数的功能及⽤法。
4、在⼯作空间建⽴⼀个变量a ,同时在当前⽬录下建⽴⼀个M⽂件:a.m,试在命令窗⼝输⼊a,观察结果,并解释原因。
三、思考练习1、help命令和lookfor命令有什么区别?2、什么是⼯作空间?假定有变量A与B存在于⼯作空间中,如何⽤命令保存这两个变量?下次重新进⼊MATLAB后,⼜如何装载这两个变量?实验⼆MATLAB数值计算⼀、实验⽬的1、掌握MATLAB变量和数据操作2、掌握MATLAB矩阵及其操作3、掌握MATLAB矩阵运算⼆、实验内容1、求下列表达⽰的值(1)6(10.3424510)w-=+?(2)22tan()b ca eabcxb c aππ++-+=++,其中a=3.5 ,b=5 ,c=-9.8(3)21ln(2tz e t=+,其中213[]50.65it-=-2、已知1540783617A--=??,831253320B-=??-??求下列表达式的值:(1)A+6B和2A B I-+(I为单位矩阵)(2)A*B、A.*B和B*A(3)A/B及B\A(4)[A,B] 和[A([1,3],:) ; B^2]3、建⽴⼀个均值为3,⽅差为1的10*10的正态分布随机矩阵,并将矩阵中⼤于0的元素置1,⼩于0的置0.4、当[34,,,,,,0]A NaN Inf Inf pi eps=--时,求函数all(A),any(A),isnan(A),isinf(A),isfinite(A)的值。
《MATLAB仿真技术》实验指导书2016附问题详解
实验项目及学时安排实验一 MATLAB环境的熟悉与基本运算 2学时实验二 MATLAB数值计算实验 2学时实验三 MATLAB数组应用实验 2学时实验四 MATLAB符号计算实验 2学时实验五 MATLAB的图形绘制实验 2学时实验六 MATLAB的程序设计实验 2学时实验七 MATLAB工具箱Simulink的应用实验 2学时实验八 MATLAB图形用户接口GUI的应用实验 2学时实验一 MATLAB环境的熟悉与基本运算一、实验目的1.熟悉MATLAB开发环境2.掌握矩阵、变量、表达式的各种基本运算二、实验基本知识1.熟悉MATLAB环境:MATLAB桌面和命令窗口、命令历史窗口、帮助信息浏览器、工作空间浏览器、文件和搜索路径浏览器。
2.掌握MATLAB常用命令3.MATLAB变量与运算符变量命名规则如下:(1)变量名可以由英语字母、数字和下划线组成(2)变量名应以英文字母开头(3)长度不大于31个(4)区分大小写MATLAB中设置了一些特殊的变量与常量,列于下表。
MATLAB运算符,通过下面几个表来说明MATLAB的各种常用运算符4.MATLAB的一维、二维数组的寻访表6 子数组访问与赋值常用的相关指令格式5.MATLAB的基本运算表7 两种运算指令形式和实质涵的异同表6.MATLAB的常用函数表8 标准数组生成函数表9 数组操作函数三、实验容1、学习使用help命令,例如在命令窗口输入help eye,然后根据帮助说明,学习使用指令eye(其它不会用的指令,依照此方法类推)2、学习使用clc、clear,观察command window、command history和workspace等窗口的变化结果。
3、初步程序的编写练习,新建M-file,保存(自己设定文件名,例如exerc1、exerc2、 exerc3……),学习使用MATLAB的基本运算符、数组寻访指令、标准数组生成函数和数组操作函数。
matlab数学实验.doc
matlab 数学实验《管理数学实验》实验报告班级姓名实验 1:MATLAB的数值运算【实验目的】(1)掌握 MATLAB 变量的使用(2)掌握 MATLAB 数组的创建,(3)掌握 MA TLAB 数组和矩阵的运算。
(4)熟悉 MATLAB 多项式的运用【实验原理】矩阵运算和数组运算在MA TLAB中属于两种不同类型的运算,数组的运算是从数组元素出发,针对每个元素进行运算,矩阵的运算是从矩阵的整体出发,依照线性代数的运算规则进行。
【实验步骤】(1)使用冒号生成法和定数线性采样法生成一维数组。
(2)使用 MA TLAB 提供的库函数 reshape,将一维数组转换为二维和三维数组。
(3)使用逐个元素输入法生成给定变量,并对变量进行指定的算术运算、关系运算、逻辑运算。
(4)使用 MA TLAB绘制指定函数的曲线图,将所有输入的指令保存为M 文件。
【实验内容】( 1)在 [0,2*pi] 上产生 50 个等距采样数据的一维数组,用两种不同的指令实现。
0:(2*pi-0)/(50-1):2*pi或linspace(0,2*pi,50)( 2)将一维数组A=1:18 ,转换为2×9 数组和 2× 3× 3 数组。
reshape(A,2,9)ans =Columns 1 through 713 5 24 6 789111012131415171618reshape(A,2,3,3) ans(:,:,1) =1 3 52 4 6 ans(:,:,2) =7 9 118 10 12 ans(:,:,3) =13 15 1714 16 18matlab 数学实验( 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,A==B,A>B 。
A.*Bans=0 0 15 121 15 0 0A&Bans =0 0 1 11 1 0 0A|Bans =1 1 1 11 1 1 1~Aans =1 0 0 00 0 0 1A==Bans =0 0 0 01 0 0 0A>=Bans =0 1 0 11 0 1 0t t ( 4)绘制 y= 0.5 e3 -t*t*sin(t),t=[0,pi] 并标注峰值和峰值时间,添加标题 y= 0.5 e3 -t*t*sint ,将所有输入的指令保存为M 文件。
matlab数值运算
备注 指令
范得蒙矩阵 a7= vander([1 5 6 2])
希尔伯特矩阵 a8=hilb(4)
托普利兹矩阵 a9=toeplitz(1:6)
帕斯卡矩阵 pascal(5)
结果
(3) 练习矩阵运算 键入 a=[0 1 0;0 0 1;-6 –11 -6]; b=[1 2;3 4;5 6]; c=[1 1 0;0 1 1]; d=[1 3; 2 7]; e=[2 5;-3 0]; 按表 2-8 要求的相应运算,将结果记于表 2-8 中。 2
n
n 0 .9
1.00 2.00 3.00 4.00 5.00 6.00 7.00 8.00 9.00 10.00 104.62 116.16 123.00 128.60 133.54 138.07 142.31 146.32 150.17 153.87 105.00 110.25 115.76 121.55 127.63 134.01 140.71 147.75 155.13 162.89 -0.38 5.91 7.24 7.05 5.92 4.06 1.60 -1.42 -4.97 -9.02 数据分析:该用户在 8 年后将资金用作其它投资,应该选择第二种方案,到时资金总额
1 7 13 4 3 2 a 2 8 5 3 9 5
4 7 9 8
1 11 4 7 6 9 8 6
7. 解决问题 现有圆柱形橡皮泥材料,直径 125cm,长 160cm,现用该材料加工实心球,每套 12 个, 半径从 3cm 开始递增以 0.2cm 为步长,问总共可以加工多少套? 程序为: r1=125/2; h1=160; v=pi*r1^2*h1 r=3:0.2:5.2 v2=4/3*pi*r.^3 v3=sum(v2) n=v/v3 round(n) % 根据直径求出半径 % 圆柱体长度 % 圆柱体总的体积 % 每套球的半径范围 % 每套球的体积矩阵 % % 每套 12 个球的体积之和 总共可加工的套数(小数)
MATLAB应用实验指导书1234-结果
************************ MATLAB语言实验指导书************************中国矿业大学信息与电气工程学院2014年3月实验一 MATLAB 工作环境熟悉及基本运算一、实验目的:熟悉MATLAB 的工作环境,学会使用MATLAB 进行一些简单的运算。
掌握基本的矩阵运算及常用的函数。
二、实验内容:MATLAB 的启动和退出,熟悉MATLAB 的桌面(Desktop ),包括菜单(Menu )、工具条 (Toolbar )、命令窗口(Command Window)、历史命令窗口、工作空间(Workspace)等;完成一些基本的矩阵操作;学习使用在线帮助系统。
三、实验步骤:1、启动MATLAB ,熟悉MATLAB 的桌面。
2、在命令窗口执行命令完成以下运算,观察workspace 的变化,记录运算结果。
(1)(365-522-70) 3 = (2)area=pi*^2 =(3)已知x=3,y=4,在MATLAB 中求z :()232y x y x z -== 576 (4)将下面的矩阵赋值给变量m1,在workspace 中察看m1在内存中占用的字节数。
m1=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡11514412679810115133216 执行以下命令 >>m1( 2 , 3 )=10 >>m1( 11 )=6>>m1( : , 3 )= 3 10 6 15>>m1( 2 : 3 , 1 : 3 )=[ 5 11 10;9 7 6]>>m1( 1 ,4 ) + m1( 2 ,3 ) + m1( 3 ,2 ) + m1( 4 ,1)=34 (5)执行命令>>help abs查看函数abs 的用法及用途,计算abs( 3 + 4i )=5 (6)执行命令 >>x=0::6*pi; >>y=5*sin(x); >>plot(x,y)(7)运行MATLAB 的演示程序,>>demo ,以便对MATLAB 有一个总体了解。
数值计算方法实验指导(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 迭代法求解线性方程组。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程名称:Matlab语言
开设时间:2016—2017学年第 2 学期
专业班级:学生学号:学生姓名:
实验名称:实验二、MATLAB的数值运算和程序实验成绩:
指导教师:批改时间:
一、实验目的和要求
1)掌握基本的矩阵运算及常用的函数。
2)掌握MATLAB函数的编写及调试方法。
3)掌握MATLAB常用的数值运算函数。
二、实验仪器和设备
计算机一台
三、实验过程
1、一维数组在命令窗口执行下面指令,观察输出结果,体味数组创建和寻访方法,%号后面的为注释,不用输入。
rand('state',0) % 把均匀分布伪随机发生器置为0 状态
x=rand(1,5) % 产生(1*5)的均布随机数组
x(3) % 寻访数组x 的第三个元素。
x([1 2 5]) % 寻访数组x 的第一、二、五个元素组成的子数组。
x(1:3) % 寻访前三个元素组成的子数组
x(3:end) % 寻访除前2 个元素外的全部其他元素。
end 是最后一个元素的下标。
x(3:-1:1) % 由前三个元素倒排构成的子数组
x(find(x>0.5)) % 由大于0.5 的元素构成的子数组
x([1 2 3 4 4 3 2 1]) % 对元素可以重复寻访,使所得数组长度允许大于原数组。
x(3) = 0 % 把上例中的第三个元素重新赋值为0。
x([1 4])=[1 1] % 把当前x 数组的第一、四个元素都赋值为1。
x[3]=[] % 空数组的赋值操作
2、在命令窗口执行下面指令,观察输出结果
a=2.7358; b=33/79; % 这两条指令分别给变量 a , b 赋值。
C=[1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i] % 这指令用于创建二维组C M_r=[1,2,3;4,5,6],M_i=[11,12,13;14,15,16] % 创建复数数组的另一种方法 CN=M_r+i*M_i % 由实部、虚部数组构成复数数组
3. 记录下面题目的程序和运行后的结果。
1⎥⎦⎤⎢⎣⎡=654321a ⎥⎦⎤⎢⎣⎡-=531142b ⎥⎥⎥⎦
⎤
⎢⎢⎢⎣⎡-=201c ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=063258741d
下列运算是否合法,为什么?如合法,结果是多少?
(1) result1 = a'
(2) result2 = a * b
(3) result3 = a + b
(4) result4 = b * d
(5) result5 = [b ; c' ] * d
(6) result6 = a . * b
(7) result7 = a . / b
(8) result8 = a . * c
(9) result9 = a . \ b
(10) result10 = a . ^2
(11) result11 = a ^2
(12) result12 = 2 . ^ a
4、用MATLAB 求下面的的方程组。
5、详读并运行下面的circle.m 函数文件。
体会 M 函数文件的编写结构及方法。
% 后面的内容称为注释行,不被执行,起注释说明作用。
⎥⎥⎥⎥⎦
⎤⎢⎢⎢⎢⎣⎡-=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⨯⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----01741323151122231592127
4321x x x x
6、编写一个函数,计算下面函数的值,给出标量x 的值,调用该函数后,返回y 的值。
function [y]=myfun1(x)
()⎪⎩
⎪⎨⎧>+-≤<≤=3
6200sin x x x x
x x x y
选择一些数据测试你编写的函数。
7、编写一个函数求向量x 中元素的平均值、最大值、最小值、均方根值。
function [m_x,max_x,min_x,rms_x]=myfun2(x)
方均根值(Root Mean Square)的计算公式为:∑==
N
i i
x
N
rms 1
21
用下面数据测试你写的函数: (1)x=sin(0:0.01:6*pi)
(2)x=rand(1,200),得到的x 为200个(0,1)之间均匀分布的随机数。
8、求编函数实现Fibonacci 数列(1)显示各项(2)求各项之和
9、求代数方程
012927432345=+++++x x x x x 的5个根,并将其用星号(*)标记在复平面图上。
(用roots 和plot 函数)。
10、求代数方程015
=-x 的5个根,并将其用星号(*)标记在复平面图上。
(用roots 和plot 函数)。
11、因式分解:
32
597 ()
(1)(2)
s s s
F s
s s
+++
=
++
12、因式分解:
32
()5()9()7 ()
(1)(2)
j j j
F j
j j
ωωωω
ωω
+++ =
++
13、求方程
3
)0('
,1
)0(
,'
2
"
)
1(2=
=
=
+y
y
xy
y
x的解析解和数值解,并进行比较。
解析解:
s=dsolve('(1+x^2)*D2y=2*x*Dy','y(0)=1','Dy(0)=3','x') s =x*(x^2 + 3) + 1
x=0:0.1:5;
plot(x,x.*(x.^2+3)+1)
数值解:
%建立函数文件
function dy=myfun5(x,y) dy=zeros(2,1); dy(1)=y(2);
dy(2)=(y(2)*2*x)/(1+(x^2));
%运行
>> [x,y]=ode45('myfun5',[0,1],[1,3]);
>> plot(x,y(:,1),'*')
14、分别用ode45和ode15s 求解Van-del-Pol 方程
()⎪⎩
⎪⎨⎧===---1)0',0)0(0)1(1000
222x x x dt dx
x dt
x d
的数值解,并进行比较。
%建立函数
function dy=myfun6(x,y) dy=zeros(2,1); dy(1)=y(2);
dy(2)=1000*(1-y(1)^2)*y(2)+y(1); end
[x,y]=ode45('myfun6',[0,1],[0,1]); [x,y]=ode45('myfun6',[0,1],[0,1]);
plot(x,y(:,1),'*') plot(x,y(:,1),'*')
四、实验结果分析与心得
通过实验二,我基本掌握了函数M文件与命令M文件的建立与编辑;MA TLAB编程语言的基本控制结构与控制转移语句;MATLAB程序的调试。
但在实验过程中,得十分注重分号的差别,加与不加分号得到的结果也不尽相同。
另外,当编写的程序出错时,还得结合课本内容将程序修改好。