第三讲 MATLAB编程
- 格式:doc
- 大小:324.50 KB
- 文档页数:33
第三讲 Matlab 求解代数方程组理论介绍:直接法+迭代法,简单介绍相关知识和应用条件及注意事项 软件求解:各种求解程序讨论如下表示含有n 个未知数、由n 个方程构成的线性方程组:11112211211222221122n n n n n n nn n na x a x a xb a x a x a x b a x a x a x b +++=⎧⎪+++=⎪⎨⎪⎪+++=⎩ (1)一、直接法 1.高斯消元法:高斯消元法的基本原理: 在(1)中设110,a ≠将第一行乘以111,k a a -加到第(2,3,,),k k n = 得: (1)(1)(1)(1)11112211(2)(1)(2)22112(2)(2)(2)22n n n n n nn n n a x a x a x b a x a x b a x a x b ⎧+++=⎪++=⎪⎨⎪⎪++=⎩(2)其中(1)(1)1111,.k k aa b b ==再设(2)220,a ≠将(2)式的第二行乘以(2)2(2)22,(3,,)k a k n a -= 加到第k 行,如此进行下去最终得到:(1)(1)(1)(1)11112211(2)(1)(2)22112(1)(1)(1)1,111,1()()n n n n n n n n n n n n n n n n nn n n a x a x a x b a x a x b a x a x b a x b --------⎧+++=⎪++=⎪⎪⎨⎪+=⎪⎪=⎩(3) 从(3)式最后一个方程解出n x ,代入它上面的一个方程解出1n x -,并如此进行下去,即可依次将121,,,,n n x x x x - 全部解出,这样在()0(1,2,,)k kk a k n ≠= 的假设下,由上而下的消元由下而上的回代,构成了方程组的高斯消元法. 高斯消元法的矩阵表示:若记11(),(,,),(,,)T T ij n n n n A a x x x b b b ⨯=== ,则(1)式可表为.Ax b =于是高斯消元法的过程可用矩阵表示为:121121.n n M M M Ax M M M b --=其中:(1)21(1)111(1)1(1)11111n a a M a a ⎛⎫ ⎪ ⎪- ⎪=⎪ ⎪ ⎪ ⎪- ⎪⎝⎭ (2)32(2)222(2)2(2)221111n a a M a a ⎛⎫⎪⎪ ⎪-⎪=⎪ ⎪ ⎪⎪- ⎪⎝⎭高斯消元法的Matlab 程序: %顺序gauss 消去法,gauss 函数 function[A,u]=gauss(a,n) for k=1:n-1%消去过程 for i=k+1:n for j=k+1:n+1%如果a(k,k)=0,则不能削去 if abs(a(k,k))>1e-6 %计算第k 步的增广矩阵 a(i,j)=a(i,j)-a(i,k)/a(k,k)*a(k,j); else%a(k,k)=0,顺序gauss 消去失败 disp (‘顺序gauss 消去失败‘); pause; exit; end end end end%回代过程 x(n)=a(n,n+1)/a(n,n); for i=n-1:-1:1 s=0; for j=i+1:n s=s+a(i,j)*x(j); endx(i)=(a(i,n+1)-s)/a(i,i); end%返回gauss 消去后的增广矩阵 A=triu(a); %返回方程组的解 u=x ;练习和分析与思考: 用高斯消元法解方程组:12345124512345124512452471523814476192536x x x x x x x x x x x x x x x x x x x x x x ++++=⎧⎪+++=⎪⎪++++=⎨⎪+++=⎪+++=⎪⎩2.列主元素消元法在高斯消元法中进行到第k 步时,不论()k ik a 是否为0,都按列选择()||(,,)k ik a i k n = 中最大的一个,称为列主元,将列主元所在行与第k 行交换再按高斯消元法进行下去称为列主元素消元法。
西南科技大学本科生课程备课教案计算机技术在安全工程中的应用——Matlab入门及应用授课教师:徐中慧班级:专业:安全技术及工程第三章课型:新授课教具:多媒体教学设备,matlab教学软件一、目标与要求掌握matlab中内置的初等数学函数、三角函数、数据分析函数等函数的运用。
二、教学重点与难点本堂课教学的重点在于引导学生在命令窗口进行一些简单的计算,对matlab初等的数学函数能够熟练运用,并能写一些matlab的简单程序解决实际问题。
三、教学方法本课程主要通过讲授法、演示法、练习法等相结合的方法来引导学生掌控本堂课的学习内容。
四、教学内容一、课程内容回顾上节课主要学习了数据显示格式、复数的运算、算术运算等。
(1)短数据格式和长数据格式之间的显示切换(2)15+16i,求该复数的模和辐角,实部与虚部(3)[1:3;2:4;3:5],求矩阵的转置初等数学函数包括对数函数、指数函数、绝对值函数、四舍五入函数和离散数学中的函数。
我们今天课程的任务就是掌握这些函数的运用。
二、常用的数学函数练 习创建矢量x,在-9到12之间,步长为3 (1)求x 除以2的商 (2)求x 除以2的余数 (3)e x(4)求x 的自然对数ln(x) (5)求x 的常用对数lg(x)(6) 用函数sign 确定矢量x 中哪些元素为正 (7)将显示格式变为rat ,显示x 除以2的结果 Eg: x=-9:3:12;(1) x/2;(2) rem(x,2);(3)exp(x);(4)log(x );(5)log10(x);(6)sign(x);(7)format rat;x/2三、取整函数Matlab 中有几种不同的取整函数。
其中最常用的是四舍五入。
然而取上近似还是取下近似要根据实际情况而定。
例如,在杂货店买水果,苹果0.52美元一个,5美元能买几个?5.009.61540.52/=苹果苹果但是在现实生活中,显然不能买半个苹果,而且也不能四舍五入到10.所以,只能向下取近似值9.四、离散数学中的函数离散数学就是有关数的数学,也就是中学代数里的因式分解、求最大公因数和最小公倍数。
Matlab中的函数编程和脚本编程Matlab是一种广泛应用于科学与工程领域的高级编程语言和环境。
在Matlab 中,函数编程和脚本编程是两种主要的编程方式。
函数编程是通过封装一段可重复使用的代码作为函数来实现特定功能。
而脚本编程则是直接在Matlab中运行一系列的命令和操作来实现所需的任务。
在函数编程中,我们可以将程序中相对独立的功能模块封装成函数,以便在需要的时候可以反复调用。
函数的定义通常包括函数名、输入参数和输出参数。
通过在函数内进行计算、变量赋值等操作,将输入参数转化为输出参数,实现特定的功能。
例如,我们可以定义一个计算平方的函数:```matlabfunction y = square(x)y = x^2;end```在上述代码中,`square`函数接受一个参数`x`,将其平方并将结果赋给变量`y`,最后将`y`作为函数的输出。
使用函数编程的好处之一是可以提高代码的可重用性和模块化程度。
通过将相似的代码封装进一个函数,我们可以在不同的上下文中多次调用这个函数,避免重复编写相同的代码,提高开发效率。
此外,函数编程还有利于代码的维护和修改。
如果某个功能需要改变,我们只需要修改函数的定义,而不需要改动调用函数的地方。
除了函数编程,Matlab还支持脚本编程,这种编程方式更加灵活。
脚本由一系列的命令和操作组成,按照顺序执行。
与函数编程不同,脚本中的变量是全局的,可以在脚本的任何地方访问和修改。
脚本编程适用于一些简单的任务或者需要直接交互的情况。
例如,我们可以编写一个简单的脚本来生成随机数并计算其平均值:```matlabnums = randn(1, 100);average = mean(nums);disp(['The average is: ', num2str(average)]);```上述脚本通过`randn`函数生成含有100个随机数的数组,并使用`mean`函数计算其平均值,最后通过`disp`函数将结果打印出来。
第三讲 MATLAB编程编程的基本原理:数据输入(Input) 数据处理(算法) 数据输出(Output)1.1 MATLAB数据类型MATLAB的主要数据类型是数组类型,其中的每一种类型都以数组为基础,都是从数组派生出来的,MATLAB实际上把每种类型的数据作为数组处理。
一般把二维数组称为矩阵,1╳n和n╳1数组称为向量,1╳1数组称为数值。
数据类型char numeric cell struc 其它double single int,uintsparsehelp datatypesData types and structures.Data types (classes)double - Convert to double precision.char - Create character array (string).logical - Convert numeric values to logical.cell - Create cell array.struct - Create or convert to structure array.single - Convert to single precision.uint8 - Convert to unsigned 8-bit integer.uint16 - Convert to unsigned 16-bit integer.uint32 - Convert to unsigned 32-bit integer.uint64 - Convert to unsigned 64-bit integer.int8 - Convert to signed 8-bit integer.int16 - Convert to signed 16-bit integer.int32 - Convert to signed 32-bit integer.int64 - Convert to signed 64-bit integer.inline - Construct INLINE object.function_handle - Function handle array.javaArray - Construct a Java array.javaMethod - Invoke a Java method.javaObject - Invoke a Java object constructor.1.2数组输入与寻访1 一维数组的创建和寻访(1)逐个元素输入法这是最简单,但又最通用的构造方法。
以下指令就是一例。
x=[2 pi/2 sqrt(3) 3+5i]x =2.0000 1.5708 1.73213.0000 + 5.0000i(2)冒号生成法这是通过“步长“设定,生成一维“行“数组的方法。
该方法的通用格式是;x=a:inc:b[说明]●a是数组的第一个元素,inc是采样点之间的间隔,即步长。
若(b-a)是inc的整数倍,则所生成的数组的最后一个元素等于b,否则小于b。
●inc,b之间必须用冒号“;“分隔。
注意:该冒号必须在英文状态下产生。
中文状态下的冒号将导致MATLAB操作错误!●inc可以省略。
省略时,默认其取值为1,即认为inc=1。
●inc可以取正数或负数。
但要注意:inc取正时,要保证a<b;而inc取负时,要保证a>b。
x=1:3:11x =1 4 7 10(3)定数线性采样法该法在设定的“总点数“下,均匀采样生成一维“行“数组。
该法的通用格式是:x=linspace(a,b,n)[说明]●a,b分别是生成数组的第一个和最后一个元素。
n是采样总点数。
该指令生成数组。
●该指令的作用与x=a:(b-a)/(n-1):b相同。
x=linspace(1,11,4)x =1.0000 4.3333 7.6667 11.0000(4)定数对数采样法该法在设定的“总点数“下,经“常用对数“采样生成一维“行“数组。
通用格式是:x=logspace(a,b,n)[说明]●生成数组的第一个元素值为10a,最后一个元素值是10b。
n是采样总点数。
该指令生成(1×n)数组。
●在信号处理和控制学科中,常用该指令去产生频率响应的频率自变量采样点。
x=logspace(1,4,4)x =10 100 1000 10000一维数组的子数组寻访和赋值例1 子数组的寻访(Address)。
rand('state',0) %把均匀分布伪随机发生器置为0状态x=rand(1,5) %产生)51(的均布随机数组x =0.9501 0.2311 0.6068 0.4860 0.8913x(3) %寻访数组x的第三个元素。
ans =0.6068x([1 2 5]) %寻访数组x的第一、二、五个元素组成的子数组。
ans =0.9501 0.2311 0.8913x(1:3) %寻访前三个元素组成的子数组ans =0.9501 0.2311 0.6068x(3:end) %寻访除前2个元素外的全部其他元素。
end是最后一个元素的下标。
ans =0.6068 0.4860 0.8913x(3:-1:1) %由前三个元素倒排构成的子数组ans =0.6068 0.2311 0.9501x(find(x>0.5)) %由大于0.5的元素构成的子数组ans =0.9501 0.6068 0.8913x([1 2 3 4 4 3 2 1]) %对元素可以重复寻访,使所得数组长度允许大于原数组。
ans =Columns 1 through 70.9501 0.2311 0.6068 0.4860 0.4860 0.6068 0.2311Column 80.9501[说明]●寻访什么样的子数组,取决于数组X(index)中下标index。
●下标index本身可以是单个正整数或正整数数组,但index中的每个元素的取值必须在闭区间内[1,end]。
在此,end是指一维数组的长度,即最大下标。
end的这种用法是MATLAB 5.x版新增的。
例2 子数组的赋值(Assign)。
x(3) = 0 %把上例中的第三个元素重新赋值为0x =0.9501 0.2311 0 0.4860 0.8913x([1 4])=[1 1] %把当前x数组的第一、四个元素都赋值为1。
x =1.0000 0.2311 0 1.0000 0.8913[说明]要保证被重新赋值的子数组的长度与送入的数组长度相同。
2 二维数组的创建二维数组是由实数或复数排列成矩形而构成的。
从数据结构上看,矩阵和二维数组没有什么区别。
当二维数组带有线性变换含义时,该二维数组就是矩阵。
(1)直接输入法例3 在MATLAB环境下,用下面三条指令创建二维数组C。
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]%这指令用于创建二维数组CC =1.0000 5.4716 + 0.4177i 0.69090.7071 4.8244 3.5000 + 1.0000i[说明]●分号“;“在“[]“方括号内时,它是数组行间的分隔符。
●分号“;“作为指令后的结束符时,将不在屏幕上显示该指令执行后的结果。
例4 复数数组的另一种输入方式。
M_r=[1,2,3;4,5,6],M_i=[11,12,13;14,15,16]CN=M_r+i*M_i %由实部、虚部数组构成复数数组M_r =1 2 34 5 6M_i =11 12 1314 15 16CN =1.0000 +11.0000i2.0000 +12.0000i3.0000 +13.0000i4.0000 +14.0000i5.0000 +15.0000i6.0000 +16.0000i[说明]●在“[]“方括号中,逗号“,“是元素与元素间的分隔符。
●逗号“,“用于指令后时,该指令执行后的赋值结果将被显示在屏幕上。
(2)利用M文件创建和保存数组对于今后经常需要调用的数组,尤其是比较大而复杂的数组,为它专门建立一个M文件是值得的。
下面通过一个简单例子来说明这种M文件的创建过程。
例5 创建和保存数组 AM的 MyMatrix.m 文件。
●打开文件编辑调试器,并在空白填写框中输入以下内容。
●保存此文件,并且文件起名为MyMatrix.m文件●以后只要在MATLAB指令窗中,运行MyMatrix.m文件,数组AM就会自动生成于MATLAB内存中。
(3)利用Array Editor数组编辑器输入数组●在指令窗,向一个新变量赋“空”矩阵。
x=[];●在内存浏览器中,双击该变量,打开数组编辑器。
●在数组编辑器左上方的行和列栏中定义行和列的大小。
●在数组元素格输入数据。
3数据的保存与获取●生成mat数据文件把MATLAB工作空间中一些有用的数据长久保存下来的方法是生成mat数据文件。
>>save —将工作空间中所有的变量存到matlab.mat文件中。
>>save data —将工作空间中所有的变量存到data.mat文件中。
>>save data a b —将工作空间中a和b变量存到data.mat文件中。
●调用已生成的mat文件下次运行MATLAB时即可用load指令调用已生成的mat文件。
>>load —打开matlab.mat文件。
>>load data —打开data.mat文件。
>>load data a b —打开data.mat文件中的a,b变量。
mat文件是标准的二进制文件,还可以ASCII码形式保存4 二维数组元素的标识前面采用算例方式介绍了一维子数组的寻访和赋值。
在介绍二维或更高维数组中子数组的寻访赋值之前,首先要阐述单个元素标识和寻访的三种方式。
(1)“全下标”标识经典数学教科书所引述具体矩阵元素时,采用“全下标“标识法,即指出是“第几行 第几列“的元素。
这种标识方法的优点是:几何概念清楚,引述简单。
它在MATLAB 的寻访和赋值中最为常用。
对于二维数组来说,“全下标“标识由两个下标组成:行下标,列下标。
如A (3,5)就表示在二维数组A 的“第三行第5列“的元素。
(2)“单下标”标识顾名思义,“单下标“标识就是“只用一个下标来指明元素在数组中的位置“。
当然这样做,首先要对二维数组的所有元素进行“一维编号“。
所谓“一维编号“是:先设想把二维数组的所有列,按先左后右的次序、首尾相接排成“一维长列“。
然后,自上往下对元素位置进行编号。