- 2.1引导
- 2.2一维数组的创建与寻访
- 2.3二维数组的创建
- 2.4二维数组元素的标识
- 2.5二维数组的子数组寻访和赋值
- 2.6执行数组运算的常用函数
- 2.7数组运算和矩阵运算
- 2.8多项式的表达和创建
- 2.9多项式运算函数
- 2.10标准数组生成函数和数组操作函数
- 2.11数组构建技巧综合
- 2.12高维数组的创建
- 2.13关系运算
- 2.14逻辑操作
2.1 引导
2.1.1
function [ output_args ] = Untitled2( input_args ) x=0:0.1:1 y=x.*exp(-x) plot(x,y,\'-r\'),xlabel(\'x\'),ylabel(\'y\'),title(\'y=x*exp(-x)\') grid end
运行效果
2.2 一维数组的创建与寻访
2.2.1 一维数组的子数组寻访和赋值
2.2.1.1 子数组的寻访
2.2.2 子数组的赋值
2.3 二维数组的创建
2.3.1 直接输入法
2.3.2 复数数组的另一种输入方式
2.4 二维数组元素的标识
2.4.1 "逻辑1"标识
1 function [ output_args ] = Untitled2( input_args ) 2 A = zeros(2,5);%A 两行五列 3 A(:)=-4:5 %初始化 4 L=abs(A)>3%找出所有绝对值大于3的元素 5 islogical(L)%判断是否是逻辑数组 6 X=A(L)%把下标给x 7 end
2.4.2 逻辑数组与一般双精度数组的关系和区别
1 function [ output_args ] = Untitled2( input_args ) 2 A = zeros(2,5);%A 两行五列 3 A(:)=-4:5 %初始化 4 L=abs(A)>3%找出所有绝对值大于3的元素 5 islogical(L)%判断是否是逻辑数组 6 X=A(L)%把下标给x 7 8 Num=[1,0,0,0,1;0,0,0,0,1]; 9 islogical(Num) %Num不是逻辑数组 10 %Y=A(Num)%只有逻辑数组才可以这样用,所有这样错误 11 end
2.5 二维数组的子数组寻访和赋值
2.5.1 不同赋值方式示例
1 function [ output_args ] = Untitled2( input_args ) 2 A=zeros(2,4)%A初始化为2行4列 3 A(:)=1:8%A从1到8赋值(每列从上到下,从左到右) 4 5 s=[2 3 5 6] 6 A(s)%s是A的范围从上到下 7 Sa=[10 20 30 76]\'%\'是用于赋值用 8 A(s)=Sa 9 10 A(:,[2,4])=ones(2)%第二列第4列都变成1 11 end
2.6 执行数组运算的常用函数
演示pow2的数组运算性质
1 function [ output_args ] = Untitled2( input_args ) 2 A=[1:4;5:8] 3 pow2(A)%2的A次方 4 end
2.7 数组运算和矩阵运算
2.7.1 两种不同转置的比较
1 function [ output_args ] = Untitled2( input_args ) 2 A(:)=1:6 3 A=A*(1+i) 4 A_A=A.\'%转置 5 A_M=A\'%转置(不加.后面的复数会变号) 6 end
2.8 多项式的表达和创建
2.8.1 求3阶方阵A的特征多项式
1 function [ output_args ] = Untitled2( input_args ) 2 A=[11 12 13;14 15 16;17 18 19]; 3 PA = poly(A)%求特征多项式 4 PPA=poly2str(PA,\'s\')%把特征多项式转化为表达式 5 end
2.8.2 由给定向量求多项式系数向量
1 function [ output_args ] = Untitled2( input_args ) 2 R=[-0.5,-0.3+0.4*i,-0.3-0.4*i] 3 P=poly(R)%求特征向量 4 PR=real(P)%求对应的系数向量 5 PPR=poly2str(PR,\'x\')%转化为表达式 6 end
2.9 多项式运算函数
2.9.1
1 function [ output_args ] = Untitled2( input_args ) 2 %分子第一项多项式系数分别为1*s^2+0*s+2 1*s+4 1*s+1 3 p1=conv([1,0,2],conv([1,4],[1,1])); 4 %分子的多项式系数 为 1*s^3 + 0*s^2 + 1*s + 1 5 p2=[1 0 1 1]; 6 %q,r 分别是商和余多项式 7 [q,r]=deconv(p1,p2); 8 9 cq=\'商多项式为 \';cr=\'余多项式为 \' 10 %转化为表达式 11 disp([cq,poly2str(q,\'s\')]),disp([cr,poly2str(r,\'s\')]) 12 end
2.9.2 polyval 与 polyvalm的区别
1 function [ output_args ] = Untitled2( input_args ) 2 a=[1 2 3]; %多项式为x^2+2*x+3 3 A=[1 2;3 4]; %定义一个二维矩阵 4 polyvalm(a,A)%求结果 5 %其实相当于把A这个二维矩阵直接替换变量x,即求 A^2+2*A+3*E 这个矩阵多项式。 6 polyval(a,A)%矩阵的每一个数都带入a运算形成一个新的矩阵 7 end
2.10 标准数组生成函数和数组操作函数
2.10.1 标准数组的产生
1 function [A,B] = test( mark,num,array )%输入参数中,mark、num是标量,array是向量 2 3 ones(1,2) 4 5 ones(2) 6 7 randn(\'state\',0) 8 randn(2,3) 9 10 D=eye(3) 11 12 diag(diag(D)) 13 14 repmat(D,1,3) 15 end
2.10.2 数组操作函数
diag与reshape的使用
1 function [A,B] = test( mark,num,array )%输入参数中,mark、num是标量,array是向量 2 3 a=-4:4 4 5 A=reshape(a,3,3)%创建一个矩阵 6 7 a1=diag(A,-1)%\方向获取 8 9 A1=diag(a1,-1)%\方向创建矩阵 10 end
数组转置.对称和旋转操作
演示Kronecker乘法不具备"可交换规律"
1 B=eye(2) 2 C=reshape(1:4,2,2) 3 4 kron(B,C) 5 kron(C,B)
2.11 数组构建技巧综合
2.11.1 数组的赋值扩展法
2.11.2 多次寻访扩展法
2.11.3 合成扩展法
2.11.4 提取子数组,合成新数组
1 function [A,B] = test( mark,num,array )%输入参数中,mark、num是标量,array是向量 2 A = reshape(1:9,3,3)%分配一个3*3的数组 3 A(5,5)=111%第五行第五列设为111 4 A(:,6)=222%第六列全设置为222 5 6 AA=A( : ,[1:6,1:6])%拓展 7 8 B=ones(2,6)%创建数组,2行6列 9 AB_r=[A;B]%B作为A的后两行 10 AB_c=[A,B(:,1:5)\']%B的1-5列的转置 作为A的后两列 11 12 AB_BA=triu(A,1)+tril(A,-1)%对角线取反相加 13 14 %AB1=[A(1:2,:);B(1,:)]%A数组的第一行第二行, B取第一行 15 AB1=[A(1:2,end:-1:1);B(1,:)]%A数组的第一行第二行,从后到前颠倒 B取第一行 16 17 end
2.11.5 单下标寻访和reshape指令演示
2.11.6 对列(或行)同加一个数 三种方法
1 clear 2 A=reshape(1:9,3,3) 3 b=[1 2 3] 4 A_b1=A-b([1 1 1],:)%每一行按顺序减 1 2 3 5 A_b2=A-repmat(b,3,1)%b按顺序减1 6 A_b3=[A(:,1)-b(1),A(:,2)-b(2),A(:,3)-b(3)]%每一列减1 2 3
2.11.7 逻辑函数的运用
2.12 高维数组的创建
function [ output_args ] = Untitled( input_args ) %UNTITLED 此处显示有关此函数的摘要 % 此处显示详细说明 A(2,2,2)=1%第二行第二列第二层 B(2,5,:)=1:3%第二行,第五列,所有层 clear A=ones(2,3) A(:,:,2)=ones(2,3)*2%加了一层 A(:,:,3)=ones(2,3)*3%加一层 end
2.12.1 由函数ones zeros rand randm直接创建标准高维数组
1 rand(\'state\',1111),rand(2,4,3)
2.12.2 借助 cat, repmat, reshape 等函数构作高维数组
1 cat(3,ones(2,3),ones(2,3)*2,ones(2,3)*3)
1 reshape(1:12,2,2,3)
2.12.3 高维数组的维数,大小和长度
1 A=reshape(1:24,2,3,4); 2 dim_A=ndims(A) 3 size_A=size(A) 4 L_A=length(A) 5 dim_A = 6 3 7 size_A = 8 2 3 4 9 L_A = 10 4
2.12.4 数组元素对称交换指令flipdim的使用示例
2.13 关系运算
2.13.1 关系运算示例
2.13.2 关系操作求近似极限
1 function [ output_args ] = Untitled( input_args ) 2 t=-2*pi:pi/10:2*pi 3 4 y=sin(t)./t 5 6 tt=t+(t==0)*eps 7 yy=sin(tt)./tt 8 9 subplot(1,2,1) 10 plot(t,y) 11 axis([-7,7,-0.5,1.2])%横坐标从[-7,7] 纵坐标从[-0.5,1.2] 12 xlabel(\'t\'),ylabel(\'y\'),title(\'残缺图形\') 13 14 subplot(1,2,2),plot(tt,yy),axis([-7,7,-0.5,1.2]), 15 xlabel(\'t\'),ylabel(\'yy\'),title(\'正确图形\') 16 end
运行效果:
2.14 逻辑操作
1 A=-3:3 2 L1=~(A>0)%进行判断再取反 3 L2=~A>0%进行判断再取反 4 L3=~A%所有都取反,非零就是1 5 L4=A>-2&A<1%判断是否在区间(-2,1)
2.14.1 削顶整流正弦半波的计算和图形绘制
1 function [ output_args ] = Untitled( input_args ) 2 t=linspace(0,3*pi,500) 3 y=sin(t) 4 5 %处理方法一: 6 z1=((t<pi)|(t>2*pi)).*y 7 8 9 w=(t>pi/3&t<2*pi/3)+(t>7*pi/3&t<8*pi/3); 10 w_n=~w; 11 z2=w*sin(pi/3)+w_n.*z1; 12 13 14 subplot(1,3,1),plot(t,y,\':r\'),ylabel(\'y\') 15 subplot(1,3,2),plot(t,z1,\'r\'),axis([0 10 -1 1]) 16 subplot(1,3,3),plot(t,z2,\'-b\'),axis([0 10 -1 1]) 17 end
运行效果
1 function [ output_args ] = Untitled( input_args ) 2 t=linspace(0,3*pi,500) 3 y=sin(t) 4 5 %处理方法二 6 z=(y>=0).*y; 7 a=sin(pi/3); 8 z=(y>=a)*a +(y<a).*z; 9 10 plot(t,y,\':r\') 11 hold on 12 plot(t,z,\'-b\') 13 xlabel(\'t\'),ylabel(\'z=f(t)\'),title(\'逐段解析函数\') 14 legend(\'y=sin(t)\',\'z=f(t)\'),hold off 15 end
运行效果
请发表评论