1.01k likes | 1.22k Views
第二讲 MATLAB 的数值计算. —— matlab 具有出色的数值计算能力,占据世界上数值计算软件的主导地位. 数值运算的功能. 创建矩阵 矩阵运算 多项式运算 线性方程组 数值统计 线性插值 函数优化 微分方程的数值解. MATLAB 提供基本的算术运算有: 加 (+) 、减 (-) 、乘 (*) 、除 (/) 、幂次方 (^). 5+3, 5-3, 5*3, 5/3, 5^3 1/4 41.
E N D
第二讲 MATLAB的数值计算 —— matlab 具有出色的数值计算能力,占据世界上数值计算软件的主导地位
数值运算的功能 • 创建矩阵 • 矩阵运算 • 多项式运算 • 线性方程组 • 数值统计 • 线性插值 • 函数优化 • 微分方程的数值解
MATLAB提供基本的算术运算有: 加 (+)、减 (-)、乘 (*)、除 (/)、幂次方 (^) 5+3, 5-3, 5*3, 5/3, 5^3 1/4 4\1
在MATLAB下进行基本数学运算,只需将运算式直接打在提示号 >> 后面,并按入Enter键即可。MATLAB将计算 的结果以ans显示。 【例】求的算术运算结果。 (1)用键盘在MATLAB指令窗中输入以下内容 (12+2*(7-4))/3^2 x = (5*2+1.3-0.8)*10^2/25
z1= 3 + 4i z2 = 1 + 2 * i %运算符构成的直角坐标表示法 z3=2*exp(i*pi/6) %运算符构成的极坐标表示法 z=z1*z2/z3 A=[1,3;2,4]-[5,8;6,9]*i B=[1+5i,2+6i;3+8*i,4+9*i] C=A*B
求上例复数矩阵C的实部、虚部、模和相角。 C_real=real(C) C_imag=imag(C) C_magnitude=abs(C) C_phase=angle(C)*180/pi %以度为单位计算相角 C_real =
变量命名规则: 1. 变量名的大小写是敏感。 2. 变量的第一个字符必须为英文字母,而且不能超过31个字符。 3. 变量名可以包含下连字符、数字,但不能为空格符、标点。
一、命令行的基本操作 • 创建矩阵的方法 • 直接输入法 规则: 矩阵元素必须用[ ]括住 矩阵元素必须用逗号或空格分隔 在[ ]内矩阵的行与行之间必须 用分号分隔
A = [1,2,3; 4,5,6; 7,8,9] 按【Enter】键,指令被执行。 矩阵的分行输入 A=[1,2,3 4,5,6 7,8,9] a=[1,4,6,8,10] %一维矩阵
A(3) % x的第三个元素 x([1 2 5]) % x的第一、二、五个元素 x(1:5) % x的第前五个元素 x(10:end) % x的第十个元素后的元素 x(10:-1:2) % x的第十个元素和第二个元素的倒排
x(4)=100 %给x的第四个元素重新给值 x(3)=[] % 删除第三个元素 当元素很多的时候,则须采用以下的方式: » x=(1:2.5:120); % 以:起始值=1,增量值=2,终止值=120的矩阵 » x=linspace(0,1,100); % 利用linspace,以区隔起始值=0,终止值=1之间,元素数目=100 »a=[] %空矩阵
符号的作用 • 逗号和分号的作用 逗号和分号可作为指令间的分隔符,matlab允许多条语句在同一行出现。 分号如果出现在指令后,屏幕上将不显示结果。
注意:只要是赋过值的变量,不管是否在屏幕上显示过,都存储在工作空间中,以后可随时显示或调用。变量名尽可能不要重复,否则会覆盖 。 当一个指令或矩阵太长时,可用•••续行
冒号的作用 用于生成等间隔的向量,默认间隔为1。 用于选出矩阵指定行、列及元素。 循环语句
2.用matlab函数创建矩阵 • 空阵 [ ] — matlab允许输入空阵,当一项操作无结果时,返回空阵。 • rand —— 随机矩阵 • eye —— 单位矩阵 • zeros ——全部元素都为0的矩阵 • ones ——全部元素都为1的矩阵
还有伴随矩阵、稀疏矩阵、魔方矩阵、对角矩阵、范德蒙等矩阵的创建,就不一一介绍了。还有伴随矩阵、稀疏矩阵、魔方矩阵、对角矩阵、范德蒙等矩阵的创建,就不一一介绍了。 注意:matlab严格区分大小写字母,因此a与A是两个不同的变量。 matlab函数名必须小写。
3. 矩阵的修改 • 直接修改 可用键找到所要修改的矩阵,用键移动到要修改的矩阵元素上即可修改。 指令修改 可以用A(,)= 来修改。
例如 a=[1 2 0;3 0 5;7 8 9] a =1 2 0 3 0 5 7 8 9 a(3,3)=0 a =1 2 0 3 0 5 7 8 0 • 还可以用函数subs修改,matlab6.0还可用find函数修改。
二、数据的保存与获取 • 把matlab工作空间中一些有用的数据长久保存下来的方法是生成mat数据文件。 save —— 将工作空间中所有的变量存到matlab.mat文件中。 默认文件名
save data——将工作空间中所有的变量存到data.mat文件中。 save data a b ——将工作空间中a和b变量存到data.mat文件中。 下次运行matlab时即可用load指令调用已生成的mat文件。
即可恢复保存过的所有变量 load —— load data —— load data a b —— mat文件是标准的二进制文件,还可以ASCII码形式保存。
三、矩阵运算 • 矩阵加、减(+,-)运算 规则: 相加、减的两矩阵必须有相同的行和列两矩阵对应元素相加减。 允许参与运算的两矩阵之一是标量。标量与矩阵的所有元素分别进行加减操作。
2. 矩阵乘()运算 规则: • A矩阵的列数必须等于B矩阵的行数 • 标量可与任何矩阵相乘。 a=[1 2 3;4 5 6;7 8 0];b=[1;2;3];c=a*b c =14 32 23
d=[-1;0;2];f=pi*d f = -3.1416 0 6.2832 矩阵除的运算在线性代数中没有,有矩阵逆的运算,在matlab中有两种矩阵除运算
3. 矩阵乘方—— a^n,a^p,p^a a ^ p —— a 自乘p次幂 方阵 >1的整数 对于p的其它值,计算将涉及特征值 和特征向量,如果p是矩阵,a是标量 a^p使用特征值和特征向量自乘到p次 幂;如a,p都是矩阵,a^p则无意义。
a=[1,2,3;4,5,6;7,8,9];a^2 ans =30 36 42 66 81 96 102 126 150 ※当一个方阵有复数特征值或负实特征值时,非整数幂是复数阵。
a^0.5 ans = 0.4498 + 0.7623i 0.5526 + 0.2068i 0.6555 -0.3487i 1.0185 + 0.0842i 1.2515 + 0.0228i 1.4844 - 0.0385i 1.5873 - 0.5940i 1.9503 - 0.1611i 2.3134 + 0.2717i
4. 矩阵的其它运算 • inv —— 矩阵求逆 • det —— 行列式的值 • eig —— 矩阵的特征值 • diag —— 对角矩阵 • ’ —— 矩阵转置 • sqrt —— 矩阵开方
5.矩阵的一些特殊操作 • 矩阵的变维 a=[1:12];b=reshape(a,3,4) c=zeros(3,4);c(:)=a(:) • 矩阵的变向 rot90:旋转; fliplr:上翻; flipud:下翻 • 矩阵的抽取 diag:抽取主对角线;tril: 抽取主下三角; triu:抽取主上三角 • 矩阵的扩展
2.4.5 矩阵的秩与迹1.矩阵的秩矩阵线性无关的行数与列数称为矩阵的秩。在MATLAB中,求矩阵秩的函数是rank(A)。2.矩阵的迹矩阵的迹等于矩阵的对角线元素之和,也等于矩阵的特征值之和。在MATLAB中,求矩阵的迹的函数是trace(A)。
2.4.6 向量和矩阵的范数矩阵或向量的范数用来度量矩阵或向量在某种意义下的长度。范数有多种方法定义,其定义不同,范数值也就不同。
1.向量的3种常用范数及其计算函数在MATLAB中,求向量范数的函数为:(1) norm(V)或norm(V,2):计算向量V的2—范数。(2) norm(V,1):计算向量V的1—范数。(3) norm(V,inf):计算向量V的∞—范数。
2.矩阵的范数及其计算函数MATLAB提供了求3种矩阵范数的函数,其函数调用格式与求向量的范数的函数完全相同。2.4.7 矩阵的条件数在MATLAB中,计算矩阵A的3种条件数的函数是:(1) cond(A,1) 计算A的1—范数下的条件数。(2) cond(A)或cond(A,2) 计算A的2—范数数下的条件数。(3) cond(A,inf) 计算A的 ∞—范数下的条件数。
2.4.8 矩阵的特征值与特征向量在MATLAB中,计算矩阵A的特征值和特征向量的函数是eig(A),常用的调用格式有3种:(1) E=eig(A):求矩阵A的全部特征值,构成向量E。(2) [V,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。
(3) [V,D]=eig(A,‘nobalance’):与第2种格式类似,但第2种格式中先对A作相似变换后求矩阵A的特征值和特征向量,而格式3直接求矩阵A的特征值和特征向量。
例2-12 用求特征值的方法解方程。3x5-7x4+5x2+2x-18=0p=[3,-7,0,5,2,-18];A=compan(p); %A的伴随矩阵x1=eig(A) %求A的特征值x2=roots(p) %直接求多项式p的零点
2.5 矩阵的超越函数1.矩阵平方根sqrtmsqrtm(A)计算矩阵A的平方根。2.矩阵对数logmlogm(A)计算矩阵A的自然对数。此函数输入参数的条件与输出结果间的关系和函数sqrtm(A)完全一样
3.矩阵指数expm、expm1、expm2、expm3expm(A)、expm1(A)、expm2(A)、expm3(A)的功能都求矩阵指数eA。4.普通矩阵函数funmfunm(A,‘fun’)用来计算直接作用于矩阵A的由‘fun’指定的超越函数值。当fun取sqrt时,funm(A,‘sqrt’)可以计算矩阵A的平方根,与sqrtm(A)的计算结果一样。3.矩阵指数expm、expm1、expm2、expm3expm(A)、expm1(A)、expm2(A)、expm3(A)的功能都求矩阵指数eA。4.普通矩阵函数funmfunm(A,‘fun’)用来计算直接作用于矩阵A的由‘fun’指定的超越函数值。当fun取sqrt时,funm(A,‘sqrt’)可以计算矩阵A的平方根,与sqrtm(A)的计算结果一样。
2.6 字符串 在MATLAB中,字符串是用单撇号括起来的字符序列。MATLAB将字符串当作一个行向量,每个元素对应一个字符,其标识方法和数值向量相同。也可以建立多行字符串矩阵。
字符串是以ASCII码形式存储的。abs和double函数都可以用来获取字符串矩阵所对应的ASCII码数值矩阵。相反,char函数可以把ASCII码矩阵转换为字符串矩阵。字符串是以ASCII码形式存储的。abs和double函数都可以用来获取字符串矩阵所对应的ASCII码数值矩阵。相反,char函数可以把ASCII码矩阵转换为字符串矩阵。
例2-13 建立一个字符串向量,然后对该向量做如下处理:(1) 取第1~5个字符组成的子字符串。(2) 将字符串倒过来重新排列。(3) 将字符串中的小写字母变成相应的大写字母,其余字符不变。(4) 统计字符串中小写字母的个数。
命令如下:ch=‘ABc123d4e56Fg9’;subch=ch(1:5) %取子字符串revch=ch(end:-1:1) %将字符串倒排k=find(ch>=‘a’&ch<=‘z’); %找小写字母的位置ch(k)=ch(k)-(‘a’-‘A’); %将小写字母变成相应的大写字母char(ch) length(k) %统计小写字母的个数