有一个双精度的混淆矩阵 生产者精度X,我想在某个函数中对每个值进行取整调用,int x=int(X【i】【j】)对么

在计算机语言中.有一种函y=INT(x)叫做取整函数.它表示不超过x的最大整数.如INT=3.已知27=0.&#•4.令an=INT(27×10n).b1=a1.bn=an-10an-1.则b2014=( ) A.8B.5C.7D.1 题目和参考答案——精英家教网——
暑假天气热?在家里学北京名师课程,
& 题目详情
在计算机语言中,有一种函y=INT(x)叫做取整函数(也叫高斯函数),它表示不超过x的最大整数,如INT(0.9)=0,INT(3.14)=3,已知27=0.•28571•4,令an=INT(27×10n),b1=a1,bn=an-10an-1(n>1且n∈N),则b2014=(  )
A、8B、5C、7D、1
分析:由给出的定义分别求得b1,b2,b3,…,b7,得到{bn}是一个周期为6的周期数列,则b2014可求.解答:解:∵b1=a1=INT(27×10)=INT(2.85714)=2;a2=INT(27×102)=INT(28.5714)=28,b2=a2-10a1=28-20=8;a3=INT(27×103)=INT(285.714)=285,b3=a3-10a2=285-280=5;a4=INT(27×104)=INT(2857.14)=2857,b4=a4-10a3=;a5=INT(27×105)=INT(28571.4)=28571,b5=a5-10a4==1;a6=INT(27×106)=INT(285714)=285714,b6=a6-10a5=710=4;a7=INT(27×107)=INT(2857142)=2857142,b7=a7-10a6=7140=2;…由上可知,{bn}是一个周期为6的周期函数,∴b×6+4=b4=7.故选:C.点评:本题考查数列递推式,考查了学生分析问题和观察问题的能力,关键是对数列规律的找寻,是中档题.
精英家教网新版app上线啦!用app只需扫描书本条形码就能找到作业,家长给孩子检查作业更省心,同学们作业对答案更方便,扫描上方二维码立刻安装!
请输入姓名
请输入手机号第二章 MATLAB数值与矩阵运算
第2章量。MATLAB 数值计算MATLAB 的数学计算=数值计算+符号计算 其中符号计算是指使用未定义的符号变量进行运算, 而数值计算不允许使用未定义的变2.1 变量和数据2.1.1 数据类型数据类型包括:数值型、字符串型、元胞型、结构型等。 数值型=双精度型、单精度型和整数类; 整数类=无符号类(uint8、 uint16、 uint32、 uint64)和符号类整数(int8、 int16、 int32、 int64); MATLAB 默认的数值类型是双精度型。2.1.2 数据1. 数据的表达方式 数值习惯用十进制来表示,和一般的数学表示方式一致: ? 普通方式 ? 可以用带小数点的形式直接表示; ? 用科学计数法; 以下都是合法的数据表示: -2、5.67、2.56e-56(表示 2.56× 10-56)、4.68e204(表示 4.68× 10204) 2. 矩阵和数组的概念 在 MATLAB 的运算中,经常要使用标量、向量、矩阵和数组,这几个名称的定义如下: ? 标量:是指 1× 的矩阵,即为只含一个数的矩阵。 1 ? 向量:是指 1× 或 n× 的矩阵,即只有一行或者一列的矩阵。 n 1 ? 矩阵:是一个矩形的数组,即二维数组,其中向量和标量都是矩阵的特例,0× 矩 0 阵为空矩阵([])。 ? 数组:是指 n 维的数组,为矩阵的延伸,其中矩阵和向量都是数组的特例。 3. 复数 复数由实部和虚部组成,MATLAB 用特殊变量“i”和“j”表示虚数的单位。复数运算不需 要特殊处理,可以直接进行。 例:z=a+b*i 或 z=a+b*j z=a+bi 或 z=a+bj(当 b 为标量时) 求一个复数的实部、虚部、幅值和相角。1 a=real(z) b=imag(z) r=abs(z)%计算实部 a=r*cos(θ); %计算虚部 b=r*sin(θ); %计算幅值 r? a2?b2;theta=angle(z) %计算相角 theta=arctg(b/a),以弧度为单位。 【例 2.1】计算复数 a=1-2*i 的实部、虚部、幅值和相角。&& a=1-2*ia = 1.0000 - 2.0000i&&real(a)ans = 1&&imag(a)ans = -2&&abs(a)ans = 2.2361&&angle(a)%以弧度为单位计算相角ans = -1.10712.1.3 变量1. 变量的命名规则 ? 变量名区分字母的大小写。例如,“a”和“A”是不同的变量。 ? 变量名不能超过 63 个字符,第 63 个字符后的字符被忽略,对于 MATLAB6.5 版以 前的变量名不能超过 31 个字符。 ? 变量名必须以字母开头,变量名的组成可以是任意字母、数字或者下划线,但不能 含有空格和标点符号(如, 。%等)。例如,“6ABC”、“AB%C”都是不合法的变量名。 ? 关键字(如 if、while 等)不能作为变量名。 2. 特殊变量 MATLAB 有一些自己的特殊变量,当 MATLAB 启动时驻留在内存。表 2.1 特殊变量表 特殊变量 ans pi 取值 运算结果的默认变量名 圆周率 π2 eps flops inf NaN 或 nan i或 j nargin nargout realmin realmax计算机的最小数 浮点运算数 无穷大,如 1/0 非数,如 0/0、∞/∞、0×∞ i=j= 函数的输入变量数目 函数的输出变量数目 最小的可用正实数 最大的可用正实数?在 MATLAB 中系统将计算的结果自动赋给名为“ans”的变量。&&2*pians = 6.28322.1.4 常用的数学函数MATLAB 中提供了大量的数学函数,这些数学函数和大多数的数学函数的书写形式相 同,需要注意的是,利用这些数学函数求解时,角度都是用弧度来表示。基本函数如表 2.5 所示。表 2.5 基本函数 函数名 abs sqrt real imag conj sin cos tan asin acos atan atan2 sinh cosh tanh 含义 绝对值或者复数模 平方根 实部 虚部 复数共轭 正弦 余弦 正切 反正弦 反余弦 反正切 第四象限反正切 双曲正弦 双曲余弦 双曲正切 rat mod round fix floor ceil sign rem ^ exp log log10 sqrt bessel gamma 函数名 有理数近似 模除求余 4 舍 5 入到整数 向最接近 0 取整 向最接近-∞取整 向最接近-∞取整 符号函数 求余数留数 乘法运算符 求幂(以 e 为底) 自然对数 以 10 为底的对数 求平方根 贝赛尔函数 伽吗函数 含义3 2.2 矩阵和数组MATLAB 最基本也是最重要的功能就是进行实数或复数矩阵的运算。2.2.1 矩阵输入(1) (2) (3) (4) 矩阵元素应用方括号([ ])括住; 每行内的元素间用逗号或空格隔开; 行与行之间用分号或回车键隔开; 元素可以是数值或表达式。1. 通过显式元素列表输入矩阵&&c=[1 2;3 4;5 3*2] 1 3 5 2 4 6% [ ]表示构成矩阵,分号分隔行,空格分隔元素c =用回车键代替分号分隔行:&&c=[1 23 4 5 6] C= 1 3 5 2 4 62. 通过语句生成矩阵 (1) 使用 from:step:to 方式生成向量 from:to from:step:to 说明: from、step 和 to 分别表示开始值、步长和结束值。 当 step 省略时则默认为 step=1; 当 step 省略或 step&0 而 from&to 时为空矩阵,当 step&0 而 from&to 时也为空矩阵。 【例 2.2】使用“from:step:to”方式生成以下矩阵。x1=2:5 x1 =&&2345&& x2=2:0.5:4 x2 =2.0000&& x3=5:-1:2 x3 =2.50003.00003.50004.00004 5432 %空矩阵&& x4=2:-1:3 x4 =Empty matrix: 1-by-0&& x5=2:-1:0.5 x5 =21 %两行向量构成矩阵&& x6=[1:2:5;1:3:7] x6 =1 13 45 7(2) 使用 linspace 和 logspace 函数生成向量 linspace(a,b,n) 说明: a、b、n 三个参数分别表示开始值、结束值和元素个数。 生成从 a 到 b 之间线性分布的 n 个元素的行向量,n 如果省略则默认值为 100。 logspace (a,b,n) 说明: logspace 用来生成对数等分向量,它和 linspace 一样直接给出元素的个数而得出各个元 素的值。a、b、n 三个参数分别表示开始值、结束值和数据个数,n 如果省略则默认值为 50。 生成从 10a 到 10b 之间按对数等分的 n 个元素的行向量。 【例 2.3】用 linspace 和 logspace 函数生成行向量。&& x1=linspace(0,2*pi,5) x1 =%从 0 到 2*pi 等分成 5 个点 4.201.57083.1416&& x2=logspace(0,2,3) x2 =%从 1 到 100 对数等分成 3 个点1101003. 由矩阵生成函数产生特殊矩阵 MATLAB 提供了很多能够产生特殊矩阵的函数,各函数的功能如表 2.2 所示。表 2.2 矩阵生成函数 函数名 zeros(m,n) 功能 产生 m× 的全 0 矩阵 n 例子 输入 zeros(2,3) ans = 0 0 ones(m,n) 产生 m× 的全 1 矩阵 n ones(2,3) ans = 1 1 rand(m,n) 产生均匀分布的随机 矩阵,元素取值范围 0.0~1.0。 rand(2,3) ans = 0.1 0.0 0.1 1 1 1 1 0 0 0 0 结果5 randn(m,n)产生正态分布的随机 矩阵randn(2,3)ans = -0.6 0.7 1 5 9 0 1 0 6 7 2 0 0 1 -1.9magic(N)产生 N 阶魔方矩阵(矩 阵的行、列和对角线 上元素的和相等)magic(3)ans = 8 3 4eye(m,n)产生 m× 的单位矩阵 neye(3)ans = 1 0 0注意: zeros、ones、rand、randn 和 eye 函数当只有一个参数 n 时,则为 n× 的方阵; n 当 eye(m,n)函数的 m 和 n 参数不相等时则单位矩阵会出现全 0 行或列。 【例 2.3】查看 eye 函数的功能。&&X1=eye(2,3) 1 0 0 1 0 0X1 =&&X2=eye(3,2) 1 0 0 0 1 0X2 =2.2.2 矩阵元素和操作矩阵和多维数组都是由多个元素组成的,每个元素通过下标来标识。 1. 矩阵的下标 矩阵中的元素可以用全下标方式标识,即由行下标和列下标表示,一个 m× 的 a 矩阵 n 的第 i 行第 j 列的元素表示为 a(i,j)。 注意: ? 如果在提取矩阵元素值时,矩阵元素的下标行或列(i,j)大于矩阵的大小(m,n),则 MATLAB 会提示出错; ? 而在给矩阵元素赋值时,如果行或列(i,j)超出矩阵的大小(m,n),则 MATLAB 自动 扩充矩阵,扩充部分以 0 填充。&&a=[1 2;3 4;5 6] 1 3 5 2 4 6 %提取 a(3,3)的值6a =&&a(3,3) ??? Index exceeds matrix dimensions.&& a(3,3)=9%给 a(3,3) 赋值 0 0 9a = 1 3 5 2 4 62. 子矩阵块的产生** 子矩阵是从对应矩阵中取出一部分元素构成,用全下标方式取子矩阵。 ? 取行数为 1、3,列数为 2、3 的元素构成子矩阵。&&a([1 3],[2 3])ans = 2 6 0 9? 取行数为 1~3,列数为 2~3 的元素构成子矩阵, “1:3”表示 1、2、3 行下标。&&a(1:3,2:3)ans = 2 4 6&&a(:,3)0 0 9? 取所有行数即为 1~3,列数为 3 的元素构成子矩阵, ”表示所有行或列。 “:ans = 0 0 9? 取行数为 1~3,列数为 3 的元素构成子矩阵,用“end”表示某一维数中的最大值, 即 3。a(1:3,end) ans = 0 0 93. 生成大矩阵 在 MATLAB 中,可以通过方括号“[]”实现将小矩阵联接起来生成一个较大的矩阵。&& a=[1 2 0;3 4 0;5 6 9]a = 1 3 5&& [a;a]2 4 60 0 9%联接成 6× 的矩阵 3ans = 1 2 07 3 5 1 3 5&& [a a]4 6 2 4 60 9 0 0 9%联接成 3× 的矩阵 6&& a=[1 2 0;3 4 0;5 6 9]ans = 1 3 5 2 4 6 0 0 9 1 3 5 2 4 6 0 0 9%计算并联接&&a=[1 2 0;3 4 0;5 6 9] &&[a(1:2,1:2) 10*a(1:2,2:3)]ans = 1 3 2 4 20 40 0 04. 矩阵的翻转** a= 1 2 3 4 5 60 0 9表 2.3 常用矩阵翻转函数函数名 triu(X)功能 产生 X 矩阵的上三 角矩阵, 其余元素补 0。 产生 X 矩阵的下三 角矩阵, 其余元素补 0。 使矩阵 X 沿水平轴 上下翻转例子 输入 triu(a) ans = 1 0 0 2 4 0 0 0 9 结果tril(X)tril(a)ans = 1 3 5 0 4 6 6 4 2 2 4 6 6 0 0 9 9 0 0 1 3 5 9flipud(X)flipud(a)ans = 5 3 1fliplr(X)使矩阵 X 沿垂直轴 左右翻转fliplr(a)ans = 0 0 9flipdim(X,dim)使矩阵 X 沿特定轴 翻转。dim=1,按行flipdim(a,1)ans = 58 维翻转; dim=2, 按列维翻转。 rot90(X) 使矩阵 X 逆时针旋 转 900 rot90(a)3 1 ans = 0 2 14 2 0 4 30 0 9 6 52.2.3 字符串*在 MATLAB 中,字符串是作为字符数组来引入的; 一个字符串由多个字符组成,用单引号(‘’)来界定; 字符串是按行向量进行存储的,每一字符(包括空格)是以其 ASCII 码的形式存放。&&clear && str1='Hello'str1 = Hello&& str2='I like ''MATLAB''' %重复单引号来输入含有单引号的字符串str2 = I like 'MATLAB'&& str3='你好!' %支持中文str3 = 你好!1. 字符串占用的字节&&whos Size 1x5 1x15 1x3 Bytes 10 30 6 Class char array char array char arrayName str1 str2 str3Grand total is 23 elements using 46 bytes2. 字符串函数 ? length:用来计算字符串的长度(即组成字符的个数)。 ? double:用来查看字符串的 ASCII 码储存内容,包括空格(ASCII 码为 32)。 ? char:用来将 ASCII 码转换成字符串形式。 ? class 或 ischar:用来判断某一个变量是否为字符串。class 函数返回 char 则表示为字 符串,而 ischar 函数返回 1 表示为字符串。 ? strcmp(x,y):比较字符串 x 和 y 的内容是否相同。返回值如果为 1 则相同,为 0 则不 同。 ? findstr(x,x1):寻找在某个长字符串 x 中的子字符串 x1,返回其起始位置。 ? deblank(x ):删除字符串尾部的空格。9 由于 MATLAB 将字符串以其相对应的 ASCII 码储存成一个行向量, 因此如果字符串直 接进行数值运算,则其结果就变成一般数值向量的运算,而不再是字符串的运算。&& length(str1) %字符串长度ans = 5&& x1=double(str1) %查看字符串的 ASCII 码x1 = 72 x2 = 73 ans = Hello&& char(x2)101108108111%字符串的数值运算&& x2=str1+1102109109112%将 ASCII 码转换成字符串形式&& char(x1)ans = Ifmmp&& class(str1) %判断变量类型ans = char&& class(x1)ans = double&& ischar(str1)ans = 13. 使用一个变量来储存多个字符串 (1) 多个字符串组成一个新的行向量 将多个字符串变量直接用“,”连接,构成一个行向量,就可以得到一个新字符串变量。&&clear && str1='Hello'; && str2='I like ''MATLAB'''; && str3='你好!' && str4=[str1,'! ',str2] %多个字符串并排成一个行向量str4 = Hello! I like 'MATLAB'(2) 使用二维字符数组 将每个字符串放在一行, 多个字符串可以构成一个二维字符数组, 但必须先在短字符串 结尾补上空格符,以确保每个字符串(即每一行)的长度一样。否则 MATLAB 会提示出错:str5=[str1;str3] ??? Error using ==& vertcat All rows in the bracketed expression must have the same number of columns.10 && str5=[str1;str3,'']%将 str3 添加两个空格str5 = Hello 你好!(3) 使用 str2mat、strvcat 和 char 函数 使用专门的 str2mat、strvcat 和 char 函数可以构造出字符串矩阵,而不必考虑每行的字 符数是否相等,总是按最长的设置,不足的末尾用空格补齐。&& str6=str2mat(str1,str2,str3)str6 = Hello I like 'MATLAB' 你好! && str7=char(str1,str2,str3) str7 = Hello I like 'MATLAB' 你好! && str8=strvcat(str1,str2) str8 = Hello I like 'MATLAB'&& whosName str1 str2 str3 str4 str5 str6 str7 str8Size 1x5 1x15 1x3 1x22 2x5 3x15 3x15 2x15Bytes 10 30 6 44 20 90 90 60Class char array char array char array char array char array char array char array char arrayGrand total is 186 elements using 350 bytes5. 显示字符串 字符串可以直接使用 disp 命令显示出来,即使后面加分号(;)也显示。&& disp('请输入 2*2 的矩阵 a')请输入 2*2 的矩阵 a && disp(str1) Hello2.2.4 矩阵和数组运算矩阵运算有明确而严格的数学规则,矩阵运算规则是按照线性代数运算法则定义的; 数组运算是按数组的元素逐个进行的。11 1. 矩阵运算的函数 a= 1 2 3 4 5 6 7 8 9表 2.4 常用矩阵运算函数 例子 函数名 det(X) 功能 输入 计算方阵行列式 det(a) rank(a) ans = 0 rank(X) 求矩阵的秩,得出的 行列式不为零的最 大方阵边长。 ans = 2 ans = 1 2 3 4 5 6 7 8 9 结果′若矩阵 A 的元素为实 数,则与线性代数中 矩阵的转置相同。 若 A 为复数矩阵, 则 A 转置后的元素由 A 对应元素的共轭复 数构成。 若仅希望转置,则用 如下命令:A.′。 inv(a )inv(X)求矩阵的逆阵,当方 阵 X 的 det(X)不等于 零, 逆阵 X 才存在。 X 与 X 相乘为单位 矩阵。-1 -1Warning:Matrixisclose mayto besingular or badly scaled. Results ans = 1.0e+016 * -0.7 -0.4504 [v,d]=eig(a) v = -0.3 -0.8187 d = 16. diag(a) ans = 1 5 0 -1. 0 -0.8 -0.3 0.5 0.7 -1.7 -0.7 -0.4504 inaccurate. RCOND = 1.8.[v,d]=eig(X)计算矩阵特征值和 特征向量。如果方程 Xv=vd 存在非零解, 则 v 为特征向量,d 为特征值。diag(X)产生 X 矩阵的对角阵12 9 [l,u]=lu(X) 方阵分解为一个准 下三角方阵和一个 上三角方阵的乘积。 l 为准下三角阵,必 须交换两行才能成 为真的下三角阵。 u = 7. [q,r]=qr(X) m× 阶矩阵 X 分解为 n 一个正交方阵 q 和一 个与 X 同阶的上三角 矩阵 r 的乘积。方阵 q 的边长为矩阵 X 的 n 和 m 中较小者,且 其行列式的值为 1。 m× 阶矩阵 X 分解为 n 三个矩阵的乘积,其 中 u,v 为 n× 阶和 n m× 阶正交方阵,s m 为 m× 阶的对角阵, n 对角线上的元素就 是矩阵 X 的奇异值, 其长度为 n 和 m 中的 较小者。 v = -0.4 -0.7 -0.3 -0.5 -0.4082 [u,s,v]=svd(a) u = -0.6 -0.8263 s = 16. 0 1. 0 0.2 0.9 0.5 0.4082 [q,r]=qr(a) q = -0.4 -0.8616 r = -8. [u,s,v]=svd(X) -9.5 0 -11.1 -0.5 0.5 0.5 0.0 0..3 0.0000 [l,u]=lu(a) l = 0.4 1.0 0. 1.0000 0说明: 在上表中 det(a)=0 或 det(a)虽不等于零但数值很小接近于零,则计算 inv(a)时,其解的 精度比较低,用条件数(求条件数的函数为 cond)来表示,条件数越大,解的精度越低, MATLAB 会提出警告:“条件数太大,结果可能不准确”。&&a=[1 2 3;4 5 6;7 8 9]a = 1 4 7&& inv(a)2 5 83 6 9Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 1.8. ans =13 1.0e+016 * -0.7 -0.7 -1.7 -0.7 -0.45042. 矩阵和数组的算术运算 (1) 矩阵和数组的加+、减运算- ? A 和 B 矩阵必须大小相同才可以进行加减运算。 ? 如果 A、B 中有一个是标量,则该标量与矩阵的每个元素进行运算。 (2) 矩阵和数组的乘法*运算 ? 矩阵 A 的列数必须等于矩阵 B 的行数,除非其中有一个是标量; ? 矩阵的*是线性代数中矩阵的乘法; ? 数组的乘法运算符为“.*”,表示数组 A 和 B 中的对应元素相乘。A 和 B 数组必须 大小相同,除非其中有一个是标量。&&x1=[1 2;3 4;5 6]; &&x2=eye(3,2)x2 = 1 0 0&& x1+x20 1 0%矩阵相加ans = 2 3 5&&x1.*x22 5 6%数组相乘ans = 1 0 0&& x1*x20 4 0%矩阵相乘 x1 列数不等于 x2 行数??? Error using ==& * Inner matrix dimensions must agree.&& x3=eye(2,3)x3 = 1 0 x1*x3 ans = 1 3 5 2 4 6 0 0 0 0 1 0 0%矩阵相乘14 (3) 矩阵和数组的除法 ? 矩阵运算符为“\”和“/”分别表示左除和右除。 A\B=A-1*B A/B=A*B-1。 其中:A-1 是矩阵的逆,也可用 inv(A)求逆矩阵。 通常,x=A\B 就是 A*x=B 的解;x=B/A 就是 x*A=B 的解。 ? 数组的除法运算表达式 “A.\B”和“A./B”,分别为数组的左除和右除,表示数组相应元素相除。 A 和 B 数组必须大小相同,除非其中有一个是标量。 【例? 2x 1 ? x 2 ? 3x 3 ? 5 ? 2.4】已知方程组 ? 3x 1 ? x 2 ? 5x 3 ? 5 ? 4x ? x ? x ? 9 1 2 3 ?,用矩阵除法来解线性方程组。解:将该方程变换成 A*x=B 的形式。 其中:?2 ? 3 ? ?4 ? ?1 1 ?1 3 ? ? ? 1 ? ? ?5 ? ? ? ? 5 ? ? ?9 ? ? ?A ??5,B&& A=[2 -1 3;3 1 -5;4 -1 1]A = 2 3 4 B = 5 5 9&& X=A\B-1 1 -13 -5 1&& B=[5;5;9]X = 2 -1 0? 在线性方程组 A*X=B 中,m× 阶矩阵 A 的行数 m 表示方程数,列数 n 表示未知数 n 的个数。 ? n=m,A 为方阵,A\B=inv(A)*B。 ? m & n,是最小二乘解,X=inv(A'*A)*(A'*B) ? m &n ,则是令 X 中的 n-m 个元素为零的一个特殊解。X=inv(A'*A)*(A'*B) (4) 矩阵和数组的乘方 ? 矩阵乘方的运算表达式为“A^B”,其中 A 可以是矩阵或标量。 当 A 为矩阵,必须为方阵: B 为正整数时,表示 A 矩阵自乘 B 次;15 B 为负整数时,表示先将矩阵 A 求逆,再自乘|B|次,仅对非奇异阵成立; B 为矩阵时不能运算,会出错; ? 数组乘方的运算表达式“A.^B”。 当 A 为矩阵,B 为标量时,则将 A(i,j)自乘 B 次; 当 A 为矩阵,B 为矩阵时,A 和 B 数组必须大小相同,则将 A(i,j)自乘 B(i,j)次; 当 A 为标量,B 为矩阵时,将 A^ B(i,j)构成新矩阵的第 i 行第 j 列元素。 【例 2.5】矩阵和数组的除法和乘方运算。&& x1=[1 2;3 4]; && x2=eye(2)x2 = 1 0&& x1/x20 1%矩阵右除ans = 1 3&& inv(x1)2 4%求逆矩阵ans = -2.0&&1.0%矩阵左除x1\x2 -2.0 1.0ans =&&x1./x2%数组右除Warning: Divide by zero. (Type &warning off MATLAB:divideByZero& to suppress this warning.) ans = 1 Inf&&Inf 4%数组左除x1.\x2 1. 0.2500ans =&&x1^2 7 15 10 22%矩阵乘方ans =&&x1^-1 -2.0 1.0%矩阵乘方,指数为-1 与 inv 相同ans =&&x1^0.2%矩阵乘方,指数为小数16 ans = 0.8397 + 0.2 - 0.2519i&&0.2562 - 0.9 + 0.1152i%标量乘方2^x1 10.8 14.6ans =&&2.^x1 2 8 4 16%数组乘方ans =&&x1.^x2 1 1 1 4%数组乘方ans =3. 矩阵和数组的转置 ? 矩阵的转置运算 “ A' ”表示矩阵 A 的转置,如果矩阵 A 为复数矩阵,则为共轭转置。 ? 数组的转置运算 “ A. ' ”表示数组 A 的转置,如果数组 A 为复数数组,则不是共轭转置。 【例 2.6】矩阵和数组转置运算。&& && &&x1=[1 2;3 4]; x2=eye(2); x3=x1+x2*i 1.0000 + 1.0 2.0 + 1.0000i%矩阵转置x3 =&&x3'ans = 1.0000 - 1.0&&3.0 - 1.0000ix3.'%数组转置为共轭转置ans = 1.0000 + 1.0 3.0 + 1.0000i【例 2.7】使用数组的算术运算函数。&&t=linspace(0,2*pi,6) %在(0,2*pi)上产生 6 个线性等分点 0 1.3%计算正弦t = 3.5 6.2832&&y=sin(t) 0 0.9511y = 0.8 -0.017 &&y1=abs(y) 0 0.9511%计算绝对值,将正弦曲线变成全波整流y1 = 0.8 0.0&&1-exp(-t).*y 1.3%计算按指数衰减的正弦曲线ans = 0.6 1.0S 为标量,A、B 为矩阵。*表 2.6 矩阵和数组运算对比表 数组运算 命令 A+B A-B S.*B A.*B S./B A./B B.\A A.^S A.^S S.^B A. ' exp(A) log(A) sqrt(A) f(A) 对应元素相加 对应元素相减 标量 S 分别与 B 元素的积 数组对应元素相乘 S 分别被 B 的元素左除 A 的元素被 B 的对应元素除 结果一定与上行相同 A 的每个元素自乘 S 次 S 为小数时, A 各元素分别求非整 对 数幂,得出矩阵 分别以 B 的元素为指数求幂值 非共轭转置,相当于 conj(A’) 以自然数 e 为底, 分别以 A 的元素为 指数求幂 对 A 的各元素求对数 对 A 的各元素求平方根 求 A 各个元素的函数值 含义 命令 A+B A-B S*B A*B S\B A/B B\A A^S A^S S^B A' expm(A) logm(A) sqrtm(A) funm(A,’ FUN’) 与数组运算相同 与数组运算相同 与数组运算相同 内维相同矩阵的乘积 B 矩阵分别左除 S 矩阵 A 右除 B 即 A 的逆阵与 B 相乘 A 左除 B(一般与上行不同) A 矩阵为方阵时,自乘 S 次 S 为小数时,方阵 A 的非整数乘方 B 为方阵时,标量 S 的矩阵乘方 共轭转置 A 的矩阵指数函数 A 的矩阵对数函数 A 的矩阵平方根函数 矩阵的函数运算 矩阵运算 含义注意: funm(A,’FUN’)要求 A 必须是方阵,“FUN”为矩阵运算的函数名。 5. 关系操作和逻辑操作* (1) 关系运算* 关系操作符: &、&=、&、&=、 = =(等于)、 ~=(不等于) 关系运算规则: ? 两个变量都是标量,则结果为真(1)或假(0)。 ? 两个变量都是数组,则必须大小相同,结果也是同样大小的数组,数组的元素为 0 或 1。 ? 一个数组和一个标量,则把数组的每个元素分别与标量比较,结果为与数组大小相 同的数组,数组的元素为 0 或 1。18 ? &、&= 和 &、&=,仅对参加比较变量的实部进行比较, = = 和 ~= ,则同时对实部和虚部进行比较。 (2) 逻辑运算* 逻辑操作符: &(与)、|(或)、~(非)和 xor(异或)。 &&(先决与)逻辑运算符是当该运算符的左边为 1(真)时,才继续执行该符号右边的运 算。 || (先决或)逻辑运算符是该当运算符的左边为 1(真)时,就不需要继续执行该符号右边的 运算,而立即得出该逻辑运算结果为 1(真);否则,就要继续执行该符号右边的运算。 逻辑运算规则: ? 在逻辑运算中,非 0 元素表示真(1),0 元素表示假(0),逻辑运算的结果为 0 或 1, 逻辑运算法则如表 2.7 所示。表 2.7 逻辑运算 a 0 0 1 1 b 0 1 0 1 a &b 0 0 0 1 a| b 0 1 1 1 ~a 1 1 0 0 xor(a,b) 0 1 1 0? 两个变量都是标量,则结果为 0、1 的标量。 ? 两个变量都是数组,则必须大小相同,结果也是同样大小的数组。 ? 一个数组和一个标量,则把数组的每个元素分别与标量比较,结果为与数组大小相 同的数组。&& a=0;b=5; c=10; && (a~=0)&&(b&c)ans = 0&& (a~=0)||(b&c)ans = 1(3) 函数运算* MATLAB 中能得出真(1)和假(0)结果的函数有: 关系逻辑函数、工作状态判断函数、特殊数据判断函数和数据类型函数。 a= b= 1 Inf 0 1 0 2 1 0表2.8 关 逻 函 系 辑 数 例 子 函 名 数 all(A) 功 能 输 入 判 断A 的 向 元 是 全 列 量 素 否 非0, 非0 全 则 为1 any(A) 判 断A的 向 元 中 否 非0元 , any(a) 列 量 素 是 有 素 all(a) 结 果 ans = 0 ans = 119 有 为1 则 isequal(A,B) 判 断A、 应 素 否 相 , 等 B对 元 是 全 等 相 为1 isequal(a,b)1 ans = 01isempty(A)判 断A 是 为 矩 , 空 为1, 则 isempty(a) 否 空 阵 为 则 否 为0ans = 0isfinite(A)判 断A的 元 值 否 限 是 为1 各 素 是 有 , 则isfinite(a)ans = 1 1 0 1isinf(A)判 断A的 元 值 否 穷 , 则 各 素 是 无 大 是 为1isinf(a)ans = 0 0 1 0isnan(A)判 断A的 元 值 否 各 素 是 为NAN, 则 是 为1isnan(a)ans = 0 0 0 0isnumeric(A)判 数 断 组A的 素 否 为 值 数 元 是 全 数 型 组isnumeric(a)ans = 1isreal(A)判 数 断 组A的 素 否 为 数 是 为 isreal(a) 元 是 全 实 , 则 1ans = 1isprime(A)判 断A的 元 值 否 质 , 则 各 素 是 为 数 是 为1isprime(b)ans = 0 0 0 0isspace(A)判 断A的 元 值 否 空 , 则 各 素 是 为 格 是 为1isspace(a)ans = 0 0 0 0find(A)寻 找A数 非0元 的 标 值 组 素 下 和find(b)ans = 2 36. 运算符优先级* 在 MATLAB 中各种运算符的优先级如下: '(矩阵转置)、^(矩阵幂)和.'(数组转置)、.^(数组幂) ? ~(逻辑非) ? *(乘)、/(左除)、\(右除)和.*(点乘)、./(点左除)、.\(点右除) ?+、-(加减) ?: (冒号) ?&、&=、&、&=、~= ?&(逻辑与) ? |(逻辑或) ? &&(先决与) ? ||(先决或)20 2.3 矩阵分解矩阵分解在矩阵分析中占有比较重要的地位,在矩阵代数中有相当大的篇幅讲解和研 究。简单的说,矩阵分解就是根据矩阵的特性,将矩阵分解为若干个比较简单、性质比较好 的矩阵连乘的形式,从而便于矩阵的计算和分析。在线性方程的求解中,矩阵分解方法用的 比较广泛, 主要包括 cholesky 分解, 分解, 等分解方法, LU QR 通过 MATLAB 提供的函数, 用户可以很方便的实现矩阵分解,从而完成相关的研究和计算任务。2.3.1 Cholesky 分解函数 chol 格式 R = chol(X) [R,p] = chol(X) 【例 2.8】&& X=pascal(4)%如果 X 为 n 阶对称正定矩阵, 则存在一个实的非奇异上三角 阵 R,满足 R'*R = X;若 X 非正定,则产生错误信息。 %不产生任何错误信息,若 X 为正定阵,则 p=0,R 与上相同; 若 X 非正定,则 p 为正整数,R 是有序的上三角阵。%产生 4 阶 pascal 矩阵X = 1 1 1 1 1 2 3 4 1 3 6 10 1 4 10 20&& [R,p]=chol(X) R =1 0 0 0 p = 01 1 0 01 2 1 01 3 3 12.3.2 LU 分解矩阵的三角分解又称 LU 分解, 它的目的是将一个矩阵分解成一个下三角矩阵 L 和一个 上三角矩阵 U 的乘积,即 A=LU。 函数 lu 格式 [L,U] = lu(X) %U 为上三角阵,L 为下三角阵或其变换形式,满足 LU=X。 [L,U,P] = lu(X) %U 为上三角阵,L 为下三角阵,P 为单位矩阵的行变换矩阵, 满足 LU=PX。 【例 2.9】&& A=[1 2 3;4 5 6;7 8 9]; && [L,U]=lu(A)L =21 0.4 1.0000 U = 7.1.0 0 8.1 00 1..3 0.0000&& [L,U,P]=lu(A)L = 1.9 0.5714 U = 7. P = 0 1 0 0 0 1 1 0 0 8.1 0 9.3 0..0 0 0 1.00002.3.3 QR 分解将矩阵 A 分解成一个正交矩阵与一个上三角矩阵的乘积。 函数 qr 格式 [Q,R] = qr(A) %求得正交矩阵 Q 和上三角阵 R,Q 和 R 满足 A=QR。 [Q,R,E] = qr(A) %求得正交矩阵 Q 和上三角阵 R,E 为单位矩阵的变换形式, R 的对角线元素按大小降序排列,满足 AE=QR。 [Q,R] = qr(A,0) %产生矩阵 A 的“经济大小”分解 [Q,R,E] = qr(A,0) %E 的作用是使得 R 的对角线元素降序,且 Q*R=A(:, E)。 R = qr(A) %稀疏矩阵 A 的分解,只产生一个上三角阵 R,满足 R'*R = A'*A,这种方法计算 A'*A 时减少了内在数字信息的损耗。 [C,R] = qr(A,b) %用于稀疏最小二乘问题:minimize||Ax-b||的两步解:[C,R] = qr(A,b),x = R\c。 R = qr(A,0) %针对稀疏矩阵 A 的经济型分解 [C,R] = qr(A,b,0) %针对稀疏最小二乘问题的经济型分解 【例 2.10】&&A =[ 1 2 3;4 &&[Q,R] = qr(A)56; 789; 101112];Q = -0.5 -0.2 -0.2 -0.4 0.9 -0.8 0.1 -0.122 R = -12. 0 -14.3 0 0 -16.6 0.0000 02.3.4 特征值分解函数 eig 格式 d = eig(A) %求矩阵 A 的特征值 d,以向量形式存放 d。 d = eig(A,B) %A、B 为方阵,求广义特征值 d,以向量形式存放 d。 [V,D] = eig(A) %计算 A 的特征值对角阵 D 和特征向量 V, AV=VD 成立。 使 [V,D] = eig(A,'nobalance') %当矩阵 A 中有与截断误差数量级相差不远的值时, 该指令可能更精确。'nobalance'起误差调节作用。 [V,D] = eig(A,B) %计算广义特征值向量阵 V 和广义特征值阵 D,满足 AV=BVD。 [V,D] = eig(A,B,flag) % 由 flag 指定算法计算特征值 D 和特征向量 V,flag 的 可能值为: 'chol' 表示对 B 使用 Cholesky 分解算法, 这里 A 为对称 Hermitian 矩阵,B 为正定阵。'qz' 表示使用 QZ 算法,这里 A、B 为非对称或非 Hermitian 矩阵。 说明 一般特征值问题是求解方程: Ax ? ? x 解的问题。广义特征值问题是求方程: Ax ? ? Bx 解的问题。2.3.5 奇异值分解*函数 格式 svd s = svd (X) [U,S,V] = svd (X)[U,S,V] = svd (X,0) 【例 2.11】%返回矩阵 X 的奇异值向量 %返回一个与 X 同大小的对角矩阵 S, 两个酉矩阵 U 和 V, 且满足= U*S*V'。若 A 为 m×n 阵,则 U 为 m×m 阵,V 为 n×n 阵。 奇异值在 S 的对角线上, 非负且按降序排列。 %得到一个“有效大小”的分解,只计算出矩阵 U 的前 n 列,矩阵 S 的大小为 n×n。&& A=[1 2;3 4;5 6;7 8]; && [U,S,V]=svd(A)U = -0.9 -0.8 S = 14. 0.626823-0.4 -0.2-0.8 0.2-0.7 -0.7 0 0 V = -0.20 0 0.4&& [U,S,V]=svd(A,0) U =-0.9 -0.8 S = 14.2691 0 V = -0.2-0.4 -0.2 0 0.2 -0.64142.4 线性方程的组的求解我们将线性方程的求解分为两类: 一类是方程组求唯一解或求特解, 另一类是方程组求 无穷解即通解。可以通过系数矩阵的秩来判断: 若系数矩阵的秩 r=n(n 为方程组中未知变量的个数) ,则有唯一解; 若系数矩阵的秩 r&n,则可能有无穷解; 线性方程组的无穷解 = 对应齐次方程组的通解+非齐次方程组的一个特解;其特解的 求法属于解的第一类问题,通解部分属第二类问题。2.4.1 求线性方程组的唯一解或特解(第一类问题)这类问题的求法分为两类:一类主要用于解低阶稠密矩阵 ―― 直接法;另一类是解大 型稀疏矩阵 ―― 迭代法。 1.利用矩阵除法求线性方程组的特解(或一个解) 方程:AX=b 解法:X=A\b? 5x1 ? 6x 2 ?x1 ? 5x 2 ? 6x 3 ? 求方程组 ? x 2 ? 5x 3 ? 6x 4 ? x 3 ? 5x 4 ? 6x 5 ? x 4 ? 5x 5 ? ?1 ?0 ? 0 的解。 ?0 ?1【例 2.12】解:&&A=[56 50 60 00 0124 0 0 01 0 05 1 06 5 10 6 5];&&B=[1 0 0 0 1]'; &&R_A=rank(A) &&X=A\B%求秩%求解运行后结果如下R_A = 5 X = 2.8 1.0 0.3188这就是方程组的解。 (矩阵的秩 r=n(n 为方程组中未知变量的个数) ,则有唯一解). 或用函数 rref 求解:&& C=[A,B] && R=rref(C)%由系数矩阵和常数列构成增广矩阵 C %将 C 化成行最简行 0 1. 0 0 0 1. 0 0 0 1. 0 0 0 1.2 -1.1 -0.8R = 1. 0 0则 R 的最后一列元素就是所求之解。 2.利用矩阵的 LU、QR 和 cholesky 分解求方程组的解 (1)LU 分解: LU 分解又称 Gauss 消去分解,可把任意方阵分解为下三角矩阵的基本变换形式(行交 换)和上三角矩阵的乘积。即 A=LU,L 为下三角阵,U 为上三角阵。 则:A*X=b 变成 L*U*X=b 所以 X=U\(L\b) 这样可以大大提高运算速度。 命令 [L,U]=lu (A) 【例 2.13】 解:?4 ? A??3 ? ? 11 2 ?1 3 ? 1? ? 2 ? ? 0 ? b ? [ 2 , 10 , 8 ]?求方程组 ? 3x 1 ? x 2? 4x 1 ? 2x 2 ? x 3 ? 2 ? ? 2x 3 ? 10 ? 11x ? 3x ? 8 1 2 ?的一个特解。&&A=[4 2 -1;3 -1 2;11 3 0];25 &&B=[2 10 8]'; &&D=det(A) &&[L,U]=lu(A) &&X=U\(L\B)显示结果如下:D = 0 L = 0.7 1.0000 U = 11. 3.2 0 0..0 1..Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 2.7. X = 1.0e+016 * -0.2 1.3511说明 结果中的警告是由于系数行列式为零产生的。可以通过 A*X 验证其正确性。 (2)Cholesky 分解 若 A 为对称正定矩阵, Cholesky 分解可将矩阵 A 分解成上三角矩阵和其转置的乘积, 则 即: A ? R ? ? R 其中 R 为上三角阵。 方程 A*X=b 变成 R ? ? R * X ? b 所以X ? R \ (R ? \ b )(3)QR 分解 对于任何长方矩阵 A,都可以进行 QR 分解,其中 Q 为正交矩阵,R 为上三角矩阵的初 等变换形式,即:A=QR 方程 A*X=b 变形成 QRX=b 所以 X=R\(Q\b) 上例中 [Q, R]=qr(A) X=R\(Q\B) 说明 这三种分解,在求解大型方程组时很有用。其优点是运算速度快、可以节省磁盘 空间、节省内存。2.4.2 求线性齐次方程组的通解在 Matlab 中,函数 null 用来求解零空间,即满足 A?X=0 的解空间,实际上是求出解 空间的一组基(基础解系) 。26 格式 z = nullz ? null ( A ,? r ?)% z 的列向量为方程组的正交规范基,满足 Z ? ? Z ? I 。 % z 的列向量是方程 AX=0 的有理基? x1 ? 2x 2 ? 2x 3 ? x 4 ? 0 ? ? x 1 ? x 2 ? 4 x 3 ? 3x 4 ? 0 ?【例 2.14】 求解方程组的通解: ? 2 x 1 ? x 2 ? 2 x 3 ? 2 x 4 ? 0 解:&&A=[122 rat1;21-2-2;1-1-4-3];&&format%指定有理式格式输出 %求解空间的有理基&&B=null(A,'r')运行后显示结果如下:B = 2 -2 1 0 5/3 -4/3 0 1写出通解:&&symsk1k2 %写出方程组的通解&&X=k1*B(:,1)+k2*B(:,2)运行后结果如下:X = [ [ [ 2*k1+5/3*k2] k1] k2] [ -2*k1-4/3*k2]? 2 ? ? 5/3 ? ? ? ? ? ?? 2? ? ? 4 / 3? 所以原方程组的通解为 x=k1 ? +k2 ? 1 ? 0 ? ? ? ? ? ? 0 ? ? 1 ? ? ? ? ?2.4.3 求非齐次线性方程组的通解非齐次线性方程组需要先判断方程组是否有解,若有解,再去求通解。 因此,步骤为: 第一步:判断 AX=b 是否有解,若有解则进行第二步 第二步:求 AX=b 的一个特解 第三步:求 AX=0 的通解 第四步:AX=b 的通解= AX=0 的通解+AX=b 的一个特解。 【例 2.15】? x 1 ? 2 x 2 ? 3x 3 ? x 4 ? 1 ? 求解方程组 ? 3 x 1 ? x 2 ? 5 x 3 ? 3 x 4 ? 2 ?2 x 1 ? x 2 ? 2 x 3 ? 2 x 4 ? 3 ?解:在 Matlab 中建立 M 文件如下:27 A=[1 -2 3 -1;3 -1 5 -3;2 1 2 -2]; b=[1 2 3]'; B=[A b]; n=4; RA=rank(A) RB=rank(B) format rat %指定有理式格式输出 if RA==RB&RA==n %判断有唯一解 X=A\b elseif RA==RB&RA&n %判断有无穷解 X=A\b %求特解 C=null(A,'r') %求 AX=0 的基础解系 else X='equition no solve' %判断无解 end运行后结果显示:RA = 2 RB = 3 X = equition no solve说明 该方程组无解 【例 2.16】? x 1 ? x 2 ? 3x 3 ? x 4 ? 1 ? 求解方程组的通解: ? 3 x 1 ? x 2 ? 3 x 3 ? 4 x 4 ? 4 ? x1 ? 5x 2 ? 9x 3 ? 8x 4 ? 0 ?解法一:在 Matlab 编辑器中建立 M 文件如下:A=[1 1 -3 -1;3 -1 -3 4;1 5 -9 b=[1 4 0]'; B=[A b]; n=4; RA=rank(A) RB=rank(B) format rat if RA==RB&RA==n X=A\b elseif RA==RB&RA&n X=A\b C=null(A,'r') %求 AX=0 的基础解系 else X='Equation has no solves' end -8];运行后结果显示为:RA = 2 RB = 2 Warning: Rank deficient, rank = 2 X = 0 0 -8/15 3/5 C = 3/2 -3/428tol =8.. 3/2 1 07/4 0 1?3 / 2? 0 ?? 3 / 4? ? ? ? ? ? ? ? ? 7/4 ? ? 0 ?3 / 2? ? ? 所以原方程组的通解为 X=k1 ? +k2 + ? 0 ? ? ? 8 / 15 ? 1 ? ? ? ? ? ? ? ? 0 ? ? 1 ? ? 3/5 ? ? ?解法二:用 rref 求解A=[1 1 -3 -1;3 -1 -3 4;1 5 -9 -8]; b=[1 4 0]'; B=[A b]; C=rref(B) %求增广矩阵的行最简形,可得最简同解方程组。运行后结果显示为:C = 1 0 0 0 1 0 -3/2 -3/2 0 3/4 -7/4 0 5/4 -1/4 0?? 3 / 4? ? ? ? 7 / 4 ? ,非齐次方程组的特解为: ?2 ? ? 0 ? ? ? ? 1 ??3 / 2? ? ? ?3 / 2? , 对应齐次方程组的基础解系为: ? 1 ? ? 1 ? ? ? ? 0 ?? 5/4 ? ? ? ? 1 / 4? ?* ? ? 所以,原方程组的通解为:X=k1 ? 1 +k2 ? 2 + ? * 。 ? 0 ? ? ? ? 0 ?上机练习 1上机练习:例 2.12~2.16,熟悉 matlab 的数值计算基本知识,以及线性方 程组的求解。2.5 特征值与二次型工程技术中的一些问题, 如振动问题和稳定性问题, 常归结为求一个方阵的特征值和特 征向量。2.5.1 特征值与特征向量的求法设 A 为 n 阶方阵,如果数“ ? ”和 n 维列向量 x 使得关系式 Ax ? ? x 成立,则称 ? 为方 阵 A 的特征值,非零向量 x 称为 A 对应于特征值“ ? ”的特征向量。29 详见 2.3.4 和 2.3.5 节:特征值分解问题。?? 2 ? 【例 2.17】 求矩阵 A ? ? 0 ? ?? 4 1 2 1 1? ? 0 ? 的特征值和特征向量 ? 3?解:&&A=[-2d = eig(A)11;020;-413];&&[V,D]=eig(A)结果显示:V = -0..7071 D = -1 0 0 0 2 0 0 0 2 -0..5 0.5即:特征值-1 对应特征向量(-0..7071)T 特征值 2 对应特征向量(-0..9701)T 和(-0.3015 【例 2.18】 求矩阵 A ? ? ? 4? ? 1 ??1 ? 1 3 0 0? ? 0 ? 的特征值和特征向量。 ? 2?0.5)T解:&&A=[-1 1 0;-4 3 0;1 0 2]; &&[V,D]=eig(A)结果显示为V = 0 0 1.0000 D = 2 0 0 0 1 0 0 0 1 0.5 -0.2 -0.2说明 当特征值为 1 (二重根)时,对应特征向量都是 k (0.5 -0.4082)T,k 为任意常数。2.5.2 正交基*命令 orth 格式 B=orth(A)%将矩阵 A 正交规范化,B 的列与 A 的列具有相同的空间,B 的列 向量是正交向量,且满足:B'*B = eye(rank(A))。30 【例 2.19】 解:将矩阵 A ? ? 0? ?0?4 ?0 3 10? ? 1 ? 正交规范化。 ? 3?&&A=[4 0 0; 0 &&B=orth(A) &&Q=B'*B31; 013];则显示结果为P = 1. Q = 1. 0 1. 0 1..1 0 -0.1上机练习 2上机练习:例 2.17~2.19,熟悉 matlab 有关特征值和特征向量与正交基的 运算。2.6 MATLAB 数据建模本章主要学习数据挖掘和建模的一些基本方法和相关的 MATLAB 命令,包括插值,拟 合,回归分析,函数逼近等。2.6.1 多项式在 MATLAB 中, 多项式是利用一个行向量来表示的, 它的系数是按照降序方式排列的, 3 2 例如,多项式 p1(x)= x +21x +20x 可以表示为:P1=[1 21 20 0] %常数项为 02.6.1.1 多项式的求值、求根和部分分式展开1. 多项式求值 函数 polyval 可以用来计算多项式在给定变量时的值,是按数组运算规则进行计算的。 语法: polyval(p,s) 说明:p 为多项式, s 为给定矩阵。 【例 2.20】计算 p1(x)= x3+21x2+20x 多项式的值。31 && p1=[1 21 20 0]; && polyval(p1,2)%计算 x=2 时多项式的值ans = 132&&x=0:0.5:3; &&polyval(p1,x)%计算 x 为向量时多项式的值 42.0 132.0 276.0000ans = 0 15.37502. 多项式求根 ? roots 用来计算多项式的根。 语法: r=roots(p) 说明:p 为多项式;r 为计算的多项式的根,以列向量的形式保存。 ? 与函数 roots 相反,根据多项式的根来计算多项式的系数可以用 poly 函数来实现。 语法: p=poly (r) 【例 2.20 续】计算多项式 p1(x)= x3+21x2+20x 的根以及由多项式的根得出系数。&&roots(p1) ans =%计算多项式的根0 -20 -1&& poly([0;-20;-1]) ans =%计算多项式的系数 0121203. 多项式部分分式展开** 在许多的工程实际应用中,例如傅里叶变换,拉普拉斯变化和 Z 变换中,都会出现两 个多项式的比值,这时就需要对多项式进行部分分式展开运算, 用 residue 函数来实现将分式表达式进行多项式的部分分式展开成以下形式:B(s) A(s) ? r 1 s?p 1 ? r 2 2 ?? ? r n n ? k(s)s?ps?p语法: [r,p,k]=residue(b,a) 说明:b 和 a 分别是分子和分母多项式系数行向量;r 是[r1 r2 …rn]行向量,表示部分分 式展开的常数项;p 为[p1 p2 …pn]极点行向量;k 为余数。 【例 2.21】将表达式100(s ? 2) s(s ? 1)(s ? 20)进行部分分式展开。&& p1=[1 21 20 0]; && p3=[100 200]; && [r,p,k]=residue(p3,p1)r = -4.2 10.0000 p =32 -20 -1 0 k = []100(s ? 2) s(s ? 1)(s ? 20)程序分析:表达式展开结果为 ? 4.7368s ? 20?? 5.2632 s?1?10 s+0。2.6.1.1 多项式的四则运算1. 加减法 MATLAB 没有提供专门进行多项式加减运算的函数,事实上,多项式的加减运算,就 是其对应的系数向量的加减运算,加减运算时,向量的大小必须相同,缺项的用零补齐。 【例 2.22】求多项式 x3-2x2+5x+3 和 6x-1 的和。&& &&p1=[1 -2 5 3]; &&p2=[0 0 6 -1]; &&c=p1+p2c= 1 -23 2112也即 c= x -2x +11x+2 2. 多项式的乘法和除法 ? 多项式的乘法 语法: p=conv(pl,p2) 说明:p 是多项式 p1 和 p2 的乘积多项式。 ? 多项式的除法 语法: [q,r]=deconv(pl,p2) 说明:除法不一定会除尽,会有余子式。多项式 p1 被 p2 除的商为多项式 q,而余子式 是 r。 【例 2.23】计算表达式 s(s ? 1)(s ? 20) 。a1=[1 0]; a2=[1 1]; a3=[1 20]; p1=conv(a1,a2) p1 =&& && && &&%对应多项式 s %对应多项式 s+1 %对应多项式 s+20110 %计算 s(s+1)(s+20) 0 %计算多项式除法的商和余子式&& p1=conv(p1,a3) p1 =12120&& [p2,r]=deconv(p1,a3) p2 =1 r =1033 0000 %用商*除式+余子式验算 0&& conv(p2,a3)+r ans =121203. 多项式的求导** ? 对多项式求导的函数是 polyder,其调用格式为: p=polyder(p1);求多项式 p1 的导函数; p=polyder(p1,p2);求多项式 p1 和 p2 乘积的导函数; [p,q]= polyder(p1,p2);求多项式 p1 和 p2 之商的导函数,p,q 分别是导函数的分子 和分母。 【例 2.24】求有理分式 f(x)= (x-1)/(x2-x+3)的导函数。&& && p1=[1 -1]; && p1=[1 -1 3]; &&[p,q]=polyder(p1,p2)p= -1 q= 1 -2 7 -6222 9结果表明,f’(x)=(-x +2x+2)/(x4-2x3+7x2-6x+9)上机练习 3上机练习:例 2.20~2.23,熟悉 matlab 有关多项式的运算。2.6.2 拟合法在实际工程应用与科学实践中, 经常要得到一条光滑的曲线, 而实际却只能测得一些分 散的数据点,此时,就需要利用这些离散的点,运用各种拟合方法来生成一条连续的曲线。 曲线拟合就是计算出两组数据之间的一种函数关系, 由此可描绘其变化曲线及估计非采集数 据对应的变量信息。 实例:温度曲线问题 气象部门观测到一天某些时刻的温度变化数据为: t 0 1 2 3 4 16 5 19 6 26 7 24 8 26 9 27 10 29T 13 15 17 14 试描绘出温度变化曲线。从已知的一组数据中,找出函数关系 y=f(x),使得 ? f(x i ) ? y ii ?1n2(误差)最小,称为最小二乘法曲线拟合。 语法:34 p=polyfit(x,y,n) 说明:x、y 向量分别为 N 个数据点的横、纵坐标;n 是用来拟合的多项式阶次;p 为拟 合的多项式,p 为 n+1 个系数构成的行向量。 【例 2.25】由以下离散数据拟合出多项式并画出曲线拟合图形 x 0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1 y .3 程序: .5 1 1.4 1.6 1.9 .6 .4 .8 1.5 2&&x=0:.1:1; &&y=[.3 .5 1 1.4 1.6 1.9 .6 .4 .8 1.5 2] &&n=3; &&p=polyfit(x,y,n) %找出 3 阶函数关系 y=f(x)的系数向量 &&xi=linspace(0,1,100);%生成 100 个 X &&yi=polyval(p,xi); %多项式求值 && plot(x,y,'o',xi,yi,'k:',x,y,'b'); %见 3.1.1(p1), 3.1.4(p4) && legend('原始数据','3 阶曲线') % 添加图例.见 3.1.4(P7)结果:p = 16.9310.98022-0.0035多项式为:y=16.7832x -25.7459x +10.5 曲线拟合图形:也可由函数给出数据。 【例 2.26】由以下函数拟合出多项式并画出曲线拟合图形 x=1:20,y=x+3*sin(x) 程序:&&x=1:20; &&y=x+3*sin(x); &&p=polyfit(x,y,6) %找出 6 阶函数关系 y=f(x)的系数向量 &&xi=linspace(1,20,100); &&yi=polyval(p,xi); %多项式求值函数 35 && plot(x,y,'o',xi,yi,'k:',x,y,'b') && legend('原始数据','6 阶曲线') % 添加图例结果:p = 0.1 0.1 3.5 11.3304再用 10 阶多项式拟合 程序:&& x=1:20; &&y=x+3*sin(x); &&p=polyfit(x,y,10) &&xi=linspace(1,20,100); &&yi=polyval(p,xi); && plot(x,y,'o',xi,yi,'k:',x,y,'b') && legend('原始数据','10 阶多项式') % 添加图例结果:p = Columns 1 through 7 0.0 Columns 8 through 11 -42.7 -92.1 -0.4 -0.4 -1.806536 上机练习 4上机练习:例 2.25,2.26,熟悉拟合法。2.6.3 插值法在实际的科研或工程研究中, 常常需要在已有数据点的情况下, 获得这些数据中间点的 数据, 如何能够更加光滑准确地得到这些点的数据, 就需要使用不同的插值方法进行数据插 值。插值运算就是根据有限个数据点的规律,构造一个解析表达式,插值得出相邻数据点之 间的数值。 实例:海底探测问题 某公司用声纳对海底进行测试,在 5×5 海里的坐标点上测得海底深度的值,希望通过 这些有限的数据了解更多处的海底情况。并绘出较细致的海底曲面图。 MATLAB 提供了多种多样的数据插值函数, 比较常见的如 interp1 函数用于实现一维数 据插值,interp2 函数则实现二维数据插值,lagrange 插值,newton 插值等,这些插值函数在 获得数据的平滑度、时间复杂度和空间复杂度方面性能相差都很大。 1. 一维数据插值 一维插值是指对一维数据点(xi,yi)进行插值。 语法: yi=interp1(x,y,xi,’method’)37 说明:x、y 为行向量;xi 是插值范围内任意点的 x 坐标,yi 则是插值运算后的对应 y 坐标; method 是插值函数的类型, “linear”线性插值(默认), “nearest”最相邻插值法, “spline”三次样条插值法, “cubic”为三次多项式插值。 线性插值:yi=interp1(x,y,xi),是 interp1()的默认插值函数类型,由已知数据点连成一 条折线,认为相临两个数据点之间的函数值就在这两点之间的连线上。一般来说,数据点数 越多,线性插值就越精确。 【例 2.27】已知数据: x 0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1 y .3 .5 1 1.4 1.6 1.9 .6 .4 .8 1.5 2 求当 xi=0.25 时的 yi 的值,并画出线性插值,三次样条插值,三次多项式插值的图形。 程序:&&x=0:.1:1;&&y=[.3 .5 1 1.4 1.6 1 .6 .4 .8 1.5 2]; &&yi0=interp1(x,y,0.25,'linear') yi0 = 1.2000&&xi=0:.02:1;&&yi=interp1(x,y,xi,'linear'); % 线性插值(默认), &&zi=interp1(x,y,xi,'spline'); %三次样条插值法, &&wi=interp1(x,y,xi,'cubic'); %三次多项式插值。 % yi、zi、wi 为对应 xi 的不同类型的插值。x、y 为已知数据点。 &&plot(x,y,'o',xi,yi,'r+',xi,zi,'g*',xi,wi,'k.-') &&legend('原始点','线性点','三次样条','三次多项式') % 添加图例结果:yi0 = 1.200038 要得到给定的几个点的对应函数值,可用:&&xi =[0.0 0.4500] &&yi=interp1(x,y,xi,'spline')结果:yi =1.2 1.34542. 二维插值 二维插值是指对两个自变量的插值, 二维插值与一维插值的基本思想一致, 应用原始数 据点(x,y,z),求出插值点数据(xi,yi,zi)。 interp2 函数是用来进行二维插值的。 语法: zi=interp2(x,y,z,xi,yi,’method’) 说明:method 是插值函数的类型, “linear”线性插值(默认), “nearest”最相邻插值法, “spline”三次样条插值法, “cubic”为三次多项式插值。 说明:这里 x 和 y 是两个独立的向量,它们必须是单调的。z 是矩阵,是由 x 和 y 确定 的点上的值。z 和 x,y 之间的关系是 z(i,:)=f(x,y(i)),z(:,j)=f(x(j),y) 即:当 x 变化时,z 的第 i 行与 y 的第 i 个元素相关,当 y 变化时 z 的第 j 列与 x 的第 j 个元素相关。如果没有对 x,y 赋值,则默认 x=1:n, y=1:m。n 和 m 分别是矩阵 z 的行数和列数。 【例 2.28】已知某处山区地形选点测量坐标数据为:x=0 0.5 1 1.5 2 2.5 y=0 0.5 1 1.5 2 2.5 海拔高度数据为: z=89 90 87 85 92 91 96 92 96 98 99 95 91 89 96 98 95 92 90 88 85 80 81 82 89 95 96 93 82 85 87 98 99 96 97 3 3 93 86 84 92 88 3.5 3.5 90 84 83 89 85 4 4 4.5 4.5 5 5 5.5 687 82 81 86 8282 84 85 86 8339 82 88 92 85 84 80 80 8785 92 96 85 86 81 82 8889 93 97 81 81 85 81 8994 94 98 82 98 82 84 9895 95 96 80 99 83 85 9993 89 93 80 98 84 86 9792 87 95 81 97 87 83 9691 86 84 85 96 90 82 9886 83 82 90 95 95 81 9484 81 81 93 84 86 80 9288 92 84 95 87 88 82 87其地貌图为: 对数据插值加密形成地貌图。程序:&&x=0:.5:5; &&y=0:.5:6; &&z=[89 90 87 85 92 91 96 93 90 87 8292 96 98 99 95 91 89 86 84 82 84 96 98 95 92 90 88 85 84 83 81 85 80 81 82 89 95 96 93 92 89 86 86 82 85 87 98 99 96 97 88 85 82 83 82 85 89 94 95 93 92 91 86 84 88 88 92 93 94 95 89 87 86 83 81 92 92 96 97 98 96 93 95 84 82 81 84 85 85 81 82 80 80 81 85 90 93 95 84 86 81 98 99 98 97 96 95 84 87 80 81 85 82 83 84 87 90 95 86 88 80 82 81 84 85 86 83 82 81 80 82 87 88 89 98 99 97 96 98 94 92 87]; &&mesh(x,y,z) %绘原始数据图,见 3.2.1(P11) &&xi=linspace(0,5,50); %加密横坐标数据到 50 个 &&yi=linspace(0,6,80); %加密纵坐标数据到 80 个 &&[xii,yii]=meshgrid(xi,yi); %生成网格数据,见 3.2.2(P9)40 &&zii=interp2(x,y,z,xii,yii,'cubic');%插值 &&mesh(xii,yii,zii) %加密后的地貌图 &&hold on % 保持图形,见 3.1.3(p3-4) &&[xx,yy]=meshgrid(x,y); %生成网格数据 &&plot3(xx,yy,z+0.1,’ob’) %原始数据用‘O’绘出, 见 3.2.1(p8)上机练习 5上机练习:例 2.27,2.28,熟悉插值法。41
更多相关文档

我要回帖

更多关于 最终幻想14加工精度 的文章

 

随机推荐