zoukankan      html  css  js  c++  java
  • 2.Matlab数值数组及其运算

    • 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

    运行效果

  • 相关阅读:
    mysql bin log配置及查看
    Java 相关书籍
    mysql查询性能优化
    Java线程并发:知识点
    Java 根据经纬度计算两点之间的距离
    Java加解密AES、DES、TripleDES、MD5、SHA
    Java类加载基本过程
    基本排序算法(冒泡排序 选择排序 插入排序 快速排序 归并排序 基数排序 希尔排序)
    Three.js 中的参数调试控制插件dat.GUI.JS
    Three.js中的动画实现02-[Three.js]-[Object3D属性.onAfterRender/.onBeforeRender]
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8807744.html
Copyright © 2011-2022 走看看