matlab程序设计

一、自定义函数

格式:函数句柄 = @(自变量列表)函数表达式

例1 定义函数,并计算f(x)在点x=-2,1,2.5,3,5.2的值。

f=@(x)x.^2+3*x+5  x=[-2,1,2.5,3,5.2]  y1=f(x)

二、 m-文件函数(子程序) 格式:function    [y1,y2]=ff(x1,x2)                              ……                               y1=…                               y2=… 输入变量:x1,x2,输出变量:y1,y2 注:输入、输出变量可以为1个或多个。

例3 建立函数,实现输入矩阵x,输出x的最大元素与最小元素以及该矩阵的秩。然后调用该函数。

function [M,m,r]=fun303(x)
               r=rank(x);  
               b=x(1:end);
               y=sort(b);
               M=y(end);
               m=y(1);

 流程控制语句

一、分支结构

1. if条件语句

2.  switch 分值选择语句

例4 自定义函数, 对数组x做如下处理: 记数组x所有元素和为s, (1)若s除以5余数为1,     求出x中所有奇数的和。 (2)若s除以5余数为4,    求出x中所有偶数的和。 (3)其余情况求出x中    最大值与最小值的差。

function y=ff(x)
switch mod(sum(x),5);
case 1
    t=mod(x,2); y=sum(t.*x);
case 4
    t=1-mod(x,2); y=sum(t.*x);
otherwise          
      y=max(x)-min(x);% t=sort(x);
       y=t(end)-t(1);
end

 x=[2,-4,3,6,7,11]
 y=ff(x)

二、循环结构

 1. for 循环语句

若数组为行向量,依次取数组元素执行循环体。 若数组为矩阵,依次取矩阵的列执行循环体

 例5 随机生成15个0~99的整数构成数组x,并构造下列数组:
(1)将数组x的第偶数个元素平方,其余元素不变。
(2)将数组x的第偶数个元素乘以2,其余元素置0。
  x=floor(rand(1,15)*100);  
  y1=x; 
  y2=zeros(1,15);
  for i=2:2:14 
     y1(i)=x(i)^2;
     y2(i)=2*x(i);
  end
 [x;y1;y2]  
 例6 数组x=(8,3,5,-1,6,10,7,2,9,11),求出其中所有除以5余1的元素之和
         以及所有除以5余4的元素之和.  
   x=[8,3,5,-1,6,10,7,2,9,11];
   s1=0; s2=0;   
  for m=x
     switch mod(m,5)
       case 1
        s1=s1+m;
      case 4
      s2=s2+m;
    end
  end  
  s1,s2
  不用循环完成
  x=[8,3,5,-1,6,10,7,2,9,11];
  i1=find(mod(x,5)==1);
  s1=sum(x(i1))   
  i2=find(mod(x,5)==4);
  s2=sum(x(i2))

2. while-end 循环语句

注:表达式一般是由逻辑运算和关系运算组成的表达式, 表达式的值非零继续循环,表达式值为0终止循环。

例8 记三位正整数x的
个位为a,十位为b,百位为c
求出满足ab-2c=4a+b(c+2)的
第一个三位数。
N=100; m=1;
while m
    a=mod(N,10);
    b=mod((N-a)/10,10);
    c=(N-a-10*b)/100;
    if  a*b-2*c==4*a+b*(c+2)
        m=0;
       N1=N;
    end
    N=N+1;
end
N1

三、 程序的流程控制命令:

  continue   终止一次循环   break        结束循环

例9  在20-100的整数中,
    找出不能被2或3或5或7
    整除的数
 clear,clc
 i=1;
 for n=20:100
    if mod(n,2)==0|mod(n,3)==0
       |mod(n,5)==0|mod(n,7)==0
        continue
    else          
       X(i)=n; i=i+1;
    end
end
X 

 

1. 序列的运算 (1)产生序列x1(n)=(0.8)nu(n)、x2(n)=u(n)和x3(n)=δ(n-4),画出波形; (2)画出x1(2n)、x1(-n)、x1(n-2)和x2(n-3)的波形; (3)求卷积x1(n)* x2(n)、x1(n-2)* x2(n-3)、x1(n)* x3(n),画出波形、验证卷积的性质。 2. 序列的傅立叶变换 (1)设x(n)是有限长的因果序列,编写求x(n)傅立叶变换 的函数:function [X]=dtft(x,w),其中X代表 ,x代表x(n),w代表ω; (提示:Matlab函数length(x)可以计算出x(n)的长度) (2)验证傅立叶变换的时移和频移性质。 3.运用FFT分析信号频谱 (1)对矩形窗序列x1(n)=R8(n)进行频谱分析,截取长度N=64,记录幅频特性曲线和相频特性曲线; (2)选取合适的截取长度N,对以下周期序列进行频谱分析: (注意:对于周期序列,为提高谱分析精度,截取长度最好是序列周期的整数倍)。请画出x2(n)的幅频特性曲线,记下最大峰点的高度和位置;改变N值,观测峰点位置及高度的变化,并与理论结果相比较。 (3)观测截取长度N=250时,在分别对x2(n)加矩形窗和加海明窗两种情况下,x2(n)的幅频特性曲线,记录曲线的大致形状,并分析两种情况下频谱泄漏(单根谱线宽度加大)的程度。 4.取样定理的验证 (1)自选一非周期性的模拟信号xa(t),画出该模拟信号的波形及幅度频谱; (2)对xa(t)进行取样,构成x(n),画出当取样频率取大小不同的值时,x(n)的幅度谱,从而对取样定理进行验证。 5.离散LTI系统的分析 已知某离散系统的差分方程为: y(n)-3.1836y(n-1)+4.6223y(n-2)-3.7795y(n-3)+1.8136y(n-4)-0.48y(n-5)+0.0544y(n-6)=0.0004x(n)+0.0022x(n-1)+0.0056x(n-2)+0.0075x(n-3) +0.0056x(n-4)+0.0022x(n-5)+0.0004x(n-6), (1)画出该系统的幅频响应曲线;判断该系统有何功能? (2)画出单位序列响应的波形,并记录其前十个点的值; (3)求出系统的零极点,并画出零极点图,判断系统是否稳定; (4)已知受工业高频干扰的某人体心电图信号为: x={-4,-2,0,-4,-6,-4,-2,-4,-6,-6,-4,-4,-6,-6,-2,6,12,8,0,-16,-38,-60,-84,-90,-66,-32,-4,-2,-4,8,12,12,10,6,6,4,0,0,0,0,0,-2,-2,0,0,-2,-2,-2,-2,0}, 求该信号通过上述系统后的响应y(n),并比较x(n)和y(n)的波形有何区别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值