文档库 最新最全的文档下载
当前位置:文档库 › matlab

matlab

matlab
matlab

实验报告

课程名称:计算机辅助控制系统设计

实验项目:matlab大作业

专业班级:11级机械工程及自动化01班学号:41102010114

姓名:简天豪

指导教师:邱荣华

日期:2014.11.30

机械工程实验教学中心

专业班级: 学 号: 姓 名:

一、实验目的:

1、掌握PID 控制规律及控制器实现;

2、掌握用Simulink 建立PID 控制器方法;

3、掌握构建系统模型与仿真方法;

4、掌握子系统的创建、封装及应用方法。

二、实验设备

计算机、MATLAB 软件

三、实验原理

在模拟控制系统中,控制器中最常用的控制规律是PID 控制。PID 控制器是一种线性控制器,它根据给定值与实际输出值构成控制偏差。PID 控制规律写成传递函数的形式为

s K s

Ki

K s T s T K s U s E s G d p d i p ++=++==

)11()()()( 式中,P K 为比例系数;i K 为积分系数;d K 为微分系数;i

p i K K T =

为积分时间常数;

p

d

d K K T =

为微分时间常数;简单来说,PID 控制各校正环节的作用如下: (1)比例环节:成比例地反映控制系统的偏差信号,偏差一旦产生,控制器立即产

生控制作用,以减少偏差。

(2)积分环节:主要用于消除静差,提高系统的无差度。积分作用的强弱取决于积

分时间常数i T ,i T 越大,积分作用越弱,反之则越强。

(3)微分环节:反映偏差信号的变化趋势(变化速率),并能在偏差信号变得太大

之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减少调节时间。

四、实验过程

1、在MATLAB 命令窗口中输入“simulink ”进入仿真界面。

2、构建PID 控制器

专业班级:学号:姓名:

(1)新建Simulink模型窗口(选择“File/New/Model”),在Simulink Library Browser 中将需要的模块拖动到新建的窗口中,根据PID控制器的传递函数构建出如图1所示模型。

图1 PID控制器模型

(2)将上述结构图封装成PID控制器。

①创建子系统。选中上述结构图后再选择模型窗口菜单“Edit/Creat Subsystem”

②封装。选中上述子系统模块,再选择模型窗口菜单“Edit/Mask Subsystem”

③根据需要,在封装编辑器对话框中进行一些封装设置,包括设置封装文本、对话框、图标等。本次试验主要需进行以下几项设置:

图2 封装参数设置

至此,PID控制器便构建完成,它可以像Simulink自带的那些模块一样,进行拖拉,或用于创建其它系统。

3、建立闭环控制系统

搭建一单回路系统结构框图,如图3所示。

专业班级:学号:姓名:

图3 单回路系统结构图

4、构建好一个系统模型后,就可以运行,观察仿真结果。运行一个仿真的完整过程分成三个步骤:设置仿真参数、启动仿真和仿真结果分析。选择菜单“Simulation/Confiuration Parameters”,可设置仿真时间与算法等参数,如图5所示。其中默认算法是ode45(四/五阶龙格-库塔法),适用于大多数连续或离散系统。

图5 仿真参数设置

5、双击PID模块,在弹出的对话框中可设置PID控制器的参数Kp、Ki和Kd,如图6所示

图6 PID参数设置

设置好参数后,单击“Simulation/Start”运行仿真,双击Scope示波器观察输出结果,并进行仿真结果分析。比较以下参数的结果:

(1)Kp=7.9,Ki=5.0,Kd=3.1

(2)Kp=7.2,Ki=2.6,Kd=2.9

专业班级:学号:姓名:

(3)Kp=5.2,Ki=1.5,Kd=1.3

6、以Kp=7.9,Ki=5.0,Kd=3.1这组数据为基础,改变其中一个参数,固定其余两个,以此来分别讨论Kp,Ki,Kd的作用

专业班级:学号:姓名:(1)Kp=10.2,Ki=5.0,Kd=3.1

专业班级:学号:姓名:(2)Kp=5.2,Ki=5.0,Kd=3.1

专业班级:学号:姓名:(3)Kp=7.9Ki=5.3,Kd=3.1

专业班级:学号:姓名:

(4)Kp=7.9Ki=4.5,Kd=3.1

专业班级:学号:姓名:

(5)Kp=7.9Ki=5.0,Kd=6.8

专业班级:学号:姓名:

(6)Kp=7.9Ki=5.0,Kd=1.8

专业班级:学号:姓名:

7、分析不同调节器下该系统的阶跃响应曲线

(1)P调节Kp=7.5

(2)PI调节Kp=5.5,Ki=2.3

(3)PD调节Kp=6.5,Kd=2.0

(4)PID调节Kp=7.5,Ki=2.5,Kd=1.8

8、编写PID调节器参数整定程序,完成参数自动整定。

2019年matlab优化工具箱的使用

优化工具箱的使用 MATLAB的优化工具箱提供了各种优化函数,这些优化函数可以通过在命令行输入相应的函数名加以调用;此外为了使用方便,MA TLAB还提供了图形界面的优化工具(GUI Optimization tool)。 1 GUI优化工具 GUI优化工具的启动 有两种启动方法: (1)在命令行输入optimtool; (2)在MA TLAB主界面单击左下角的“Start”按钮,然后依次选择“Toolboxes→Optimization→Optimization tool” GUI优化工具的界面 界面分为三大块: 左边(Problem Setup and Results)为优化问题的描述及计算结果显示; 中间(Options)为优化选项的设置; 右边(Quick Reference)为帮助。为了界面的简洁,可以单击右上角“<<”、“>>”的按钮将帮助隐藏或显示。 1、优化问题的描述及计算结果显示 此板块主要包括选择求解器、目标函数描述、约束条件描述等部分。 选择合适的求解器以及恰当的优化算法,是进行优化问题求解的首要工作。 ?Solver:选择优化问题的种类,每类优化问题对应不同的求解函数。 ?Algorithm:选择算法,对于不同的求解函数,可用的算法也不同。 Problem框组用于描述优化问题,包括以下内容: ?Objective function: 输入目标函数。 ?Derivatives: 选择目标函数微分(或梯度)的计算方式。 ?Start point: 初始点。 Constraints框组用于描述约束条件,包括以下内容: ?Linear inequalities: 线性不等式约束,其中A为约束系数矩阵,b代表约束向量。 ?Linear equalities: 线性等式约束,其中Aeq为约束系数矩阵,beq代表约束向量。 ?Bounds: 自变量上下界约束。 ?Nonlinear Constraints function; 非线性约束函数。 ?Derivatives: 非线性约束函数的微分(或梯度)的计算方式。 Run solver and view results框组用于显示求解过程和结果。 (对于不同的优化问题类型,此板块可能会不同,这是因为各个求解函数需要的参数个数不一样,如Fminunc 函数就没有Constraints框组。) 2、优化选项(Options) ?Stopping criteria: 停止准则。

matlab常用计算命令

Matlab常用计算命令(部分) by sunny_疑似天人 1.多项式运算: poly2sym函数,将给定的多项式系数向量转化为符号表达式,以降幂排序。 poly函数,得到矩阵的特征多项式(首项系数为1)的系数向量,然后也可以用poly2sym函数转化为多项式的符号表达式。 roots函数,得到方程的根,调用形式为roots(a),其中a 为多项式的系数;也可以直接调用roots([1 2 1])。 compan函数与eig函数,通过compan函数建立多项式的伴随矩阵再通过eig函数求伴随矩阵特征值以得到多项式的所有根。效果与roots函数相同;同时这两个函数也可单独使用: compan函数,建立多项式的伴随矩阵,如:a=[1 2 3 ];compan(a) ans = -2 -3 1 0 eig函数,求矩阵的特征值。 conv函数,求多项式的乘积,如:pd=conv(p,d),其中p和d均为多项式系数向量,得到的同样也是多项式的系数向量。 deconv函数,求多项式的除法。 polyder函数,求多项式的微分。即求一阶导数,如果要求多项式的高阶微分,可以通过循环实现。

polyfit 函数,对数据拟合得到多项式,这个多项式即可大致代表数据变化规律。例如: x=0:pi/20:pi/2; y=sin(x); p=polyfit(x,y,5) x1=0:pi/30:pi*2; y1=sin(x1); y2=polyval(p,x1); plot(x1,y1,'b-',x1,y2,'r*') legend('原曲线','拟合曲线') axis([0 7 -1.2 4]) p = 0.0057 0.0060 -0.1721 0.0021 0.9997 0.0000 1 2 3 4 5 6 7 -1-0.500.511.522.533.54 原曲线拟合曲线 2.向量及其运算 x=linspace(a,b,n),生成一个向量x ,其中a ,b 分别是生成矢量的第一个和最后一个元素,n 是采样总点数。当n 缺省时默认生成100维的向量。

MATLAB计算概率

一、实验名称 已知随机向量(X ,Y )独立同服从标准正态分布,D={(x,y)|a0&&e<6 if e==1

p=erchong(a,b,c,d) end if e==2 p=wangge(a,b,c,d); end if e==3 p=fenbu(a,b,c,d); end if e==4 p=mente(a,b,c,d); end if e==5 [X,Y]=meshgrid(-3:0.2:3); Z=1/(2*pi)*exp(-1/2*(X.^2+Y.^2)); meshz(X,Y,Z); end e=input('请选择: \n'); end % ===============================用二重积分计算function p=erchong(a,b,c,d) syms x y; f0=1/(2*pi)*exp(-1/2*(x^2+y^2)); f1=int(f0,x,a,b); %对x积分 f1=int(f1,y,c,d); %对y积分 p=vpa(f1,9); % ================================等距网格法function p=wangge(a,b,c,d) syms x y ; n=100; r1=(b-a)/n; %求步长 r2=(d-c)/n; za(1)=a;for i=1:n,za(i+1)=za(i)+r1;end %分块 zc(1)=c;for j=1:n,zc(j+1)=zc(j)+r2;end for i=1:n x(i)=unifrnd(za(i),za(i+1));end %随机取点 for i=1:n y(i)=unifrnd(zc(i),zc(i+1));end s=0; for i=1:n for j=1:n s=1/(2*pi)*exp(-1/2*(x(i)^2+y(j)^2))+s;%求和end end p=s*r1*r2;

MATLAB回归预测模型

MATLAB---回归预测模型 Matlab统计工具箱用命令regress实现多元线性回归,用的方法是最小二乘法,用法是:b=regress(Y,X) [b,bint,r,rint,stats]=regress(Y,X,alpha) Y,X为提供的X和Y数组,alpha为显着性水平(缺省时设定为0.05),b,bint为回归系数估计值和它们的置信区间,r,rint为残差(向量)及其置信区间,stats是用于检验回归模型的统计量,有四个数值,第一个是R2,第二个是F,第三个是与F对应的概率 p ,p <α拒绝 H0,回归模型成立,第四个是残差的方差 s2 。 残差及其置信区间可以用 rcoplot(r,rint)画图。 例1合金的强度y与其中的碳含量x有比较密切的关系,今从生产中收集了一批数据如下表 1。 先画出散点图如下: x=0.1:0.01:0.18; y=[42,41.5,45.0,45.5,45.0,47.5,49.0,55.0,50.0]; plot(x,y,'+') 可知 y 与 x 大致上为线性关系。 设回归模型为y =β 0+β 1 x

用regress 和rcoplot 编程如下: clc,clear x1=[0.1:0.01:0.18]'; y=[42,41.5,45.0,45.5,45.0,47.5,49.0,55.0,50.0]'; x=[ones(9,1),x1]; [b,bint,r,rint,stats]=regress(y,x); b,bint,stats,rcoplot(r,rint) 得到 b =27.4722 137.5000 bint =18.6851 36.2594 75.7755 199.2245 stats =0.7985 27.7469 0.0012 4.0883 即β 0=27.4722 β 1 =137.5000 β 的置信区间是[18.6851,36.2594], β 1 的置信区间是[75.7755,199.2245]; R2= 0.7985 , F = 27.7469 , p = 0.0012 , s2 =4.0883 。可知模型(41)成立。

利用MATLAB实现循环卷积.doc

一、实验目的 1.利用MATLAB 实现循环卷积。 2.比较循环卷积与线性卷积的区别。 二、实验条件 PC 机,MATLAB7.0 三、实验内容 1)循环卷积的定义:两个序列的N 点循环卷积定义为: )0()()()]()([1 0N n m n x m h n x n h N k N N <≤-=?∑-= 利用MATLAB 实现两个序列的循环卷积可以分三个步骤完成: (1)初始化:确定循环点数N ,测量输入2个序列的长度。 (2)循环右移函数:将序列x(n)循环右移,一共移N 次(N 为循环卷积的循环次数),最后将每次循环成的新序列组成一个矩阵V 。 (3)相乘:将x(n)移位后组成的矩阵V 与第二个序列h(n)对应相乘,即得循环卷积结果。程序如下: 程序一: clear;close all ; N=10; x1=[6 15 -6 3 5 7 0 1]; x2=[7 1 2 9 4 3 20 6]; xn1=length(x1); xxn1=0:xn1-1; xn2=length(x2); xxn2=0:xn2-1; subplot(3,1,1); stem(xxn1,x1); subplot(3,1,2); stem(xxn2,x2); x11=fft(x1,N);

x12=fft(x2,N); y11=x11.*x12; y1=ifft(y11,N); subplot(3,1,3); n=0:length(y1)-1; stem(n,y1,'.'); title('循环卷积的结果'); xlabel('n');ylabel('y1(n)'); 运行后所得图形如下: 观察所得的循环卷积结果发现并没有呈现周期性的序列,因此将程序做下列改变。程序二: clear;close all; N=40; x1=[6 15 -6 3 5 7 0 1]; x2=[7 1 2 9 4 3 20 6]; x2=[x2,x2,x2,x2]; xn1=length(x1); xxn1=0:xn1-1; xn2=length(x2); xxn2=0:xn2-1; subplot(3,1,1);

MATLAB优化工具箱应用简介

MATLAB优化工具箱 1 工具箱概述 1.1 功能 (1)求解无约束条件非线性极小值; (2)求解约束条件下非线性极小值,包括目标逼近问题、极大-极小值问题和半无限极小值问题; (3)求解二次规划和线性规划问题; (4)非线性最小二乘逼近和曲线拟合; (5)非线性系统的方程求解; (6)约束条件下的线性最小二乘优化; (7)求解复杂结构的大规模优化问题。 1.2 工具箱的新特色 MATLAB R2008b使用的是4.1版本的优化工具箱,较3.x的变化在于: (1)fmincon、fminimax和fgoalattain中引入了并行机制,加快梯度计算速度; (2)函数gatool和pserchtool整合到优化工具箱GUI中; (3)函数fmincon的求解器中新增内点算法; (4)提供了KNITRO优化库的接口; (5)函数lsqcurvefit、lsqnonlin和fsolve的优化选项参数PrecondBandWinth默认值由0变为inf; (6)优化选项参数TolConSQP的默认值改为1e-6; (7)输出结构中引入了参数constrviolation。 2 工具箱函数 常用函数: 输入参数中可以用options,用于所有函数,其中包括有一下参数。 (1)Display:结果显示方式,off不显示,iter显示每次迭代的信息,final为最终结果,notify只有当求解不收敛的时候才显示结果。 (2)MaxFunEvals:允许函数计算的最大次数,取值为正整数。 (3)MaxIter:允许迭代的最大次数,正整数。 (4)TolFun:函数值(计算结果)精度,正整数。 (5)TolX:自变量的精度,正整数。 而且可以用函数optimset创建和修改。 模型输入时需要注意问题: (1)目标函数最小化;

matlab循环语句

matlab 基本语句 1.循环语句for for i=s1:s3:s2 循环语句组 end 解释:首先给i赋值s1;然后,判断i是否介于s1与s2之间;如果是,则执行循环语句组,i=i+s3(否则,退出循环.);执行完毕后,继续下一次循环。 例:求1到100的和,可以编程如下: sum=0 for i=1:1:100 sum=sum+i end 这个程序也可以用while语句编程。 注:for循环可以通过break语句结束整个for循环. 2.循环语句while 例:sum=0;i=1; while(i<=100) sum=sum+i;i=i+1; end 3.if语句 if(条件) 语句 end if(条件) 语句 else 语句 end if(条件) 语句 elseif 语句 end 4.关系表达式:

=,>,<,>=,<=,==(精确等于) 5.逻辑表达式:|(或),&(且) 6.[n,m]=size(A)(A为矩阵) 这样可以得到矩阵A的行和列数 n=length(A),可以得到向量A的分量个数;如果是矩阵,则得到矩阵A的行与列数这两个数字中的最大值。 7.!后面接Dos命令可以调用运行一个dos程序。 8.常见函数: poly():为求矩阵的特征多项式的函数,得到的为特征多项式的各个系数。如 a=[1,0,0;0,2,0;0,0,3],则poly(a)=1 -6 11 -6。相当于poly(a)=1入^3+(-6)入^2+11入+(-6)。 compan():可以求矩阵的伴随矩阵. sin()等三角函数。 MATLAB在数学建模中的应用(3) 一、程序设计概述 MATLAB所提供的程序设计语言是一种被称为第四代编程语言的高级程序设计语言,其程序简洁,可读性很强,容易调试。同时,MATLAB的编程效率比C/C++语言要高得多。 MATLAB编程环境有很多。常用的有: 1.命令窗口 2.word窗口 3.M-文件编辑器,这是最好的编程环境。 M-文件的扩展名为“.m”。M-文件的格式分为两种: ①λ M-脚本文件,也可称为“命令文件”。 ② M-函数文件。这是matlab程序设计的主流。λ 保存后的文件可以随时调用。 二、MATLAB程序结构 按照现代程序设计的观点,任何算法功能都可以通过三种基本程序结构来实现,这三种结构是:顺序结构、选择结构和循环结构。其中顺序结构是最基本的结构,它依照语句的自然顺序逐条地执行程序的各条语句。如果要根据输入数据的实际情况进行逻辑判断,对不同的结果进行不同的处理,可以使用选择结构。如果需要反复执行某些程序段落,可以使用循环结构。 1 顺序结构 顺序结构是由两个程序模块串接构成。一个程序模块是完成一项独立功能的逻辑单元,它可以是一段程序、一个函数,或者是一条语句。 看图可知,在顺序结构中,这两个程序模块是顺序执行的,即先执行<程序

matlab软件的使用方法

MATLAB 软件使用简介 默认分类2007-03-15 21:26:49 阅读4106 评论8 字号:大中小订阅 MATLAB 软件使用简介 MATLAB 是一个功能强大的常用数学软件, 它不但可以解决数学中的数值计算问题, 还可以解决符号演算问题, 并且能够方便地绘出各种函数图形。MATLAB自1984年由美国的MathWorks公司推向市场以来,历经十几年的发展和竞争,现已成为国际最优秀的科技应用软件之一。这里主要以适用于Windows操作系统的MATLAB5.3版本向读者介绍MATLAB 的使用命令和内容。 一、MATLAB 的进入/退出 MA TLAB 的安装成功后, 系统会在Windows【开始】菜单的【程序】子菜单中加入启动MATLAB命令的图标, 用鼠标单击它就可以启动MATLAB系统,见图2.1。 图2.1 启动MA TLAB 启动MATLAB后, 屏幕上出现MATLAB命令窗口: 图2.2 MA TLAB命令窗口 图2.2的空白区域是MATLAB 的工作区(命令输入区), 在此可输入和执行命令。 退出MATLAB系统像关闭Word文件一样, 只要用鼠标点击MATLAB系统集成界面右上角的关闭按钮即可。 二、MATLAB 操作的注意事项 l 在MA TLAB工作区输入MATLAB命令后, 还须按下Enter键, MA TLAB才能执行你输入的MA TLAB命令, 否则MA TLAB不执行你的命令。 l MATLAB 是区分字母大小写的。 l 一般,每输入一个命令并按下Enter键, 计算机就会显示此次输入的执行结果。(以下用↙表示回车)。如果用户不想计算机显示此次输入的结果,只要在所输入命令的后面再加上一个分号“;”即可以达到目的。如: x= 2 + 3 ↙x=5 x = 2 + 3 ; ↙不显示结果5 l 在MA TLAB工作区如果一个表达式一行写不下,可以用在此行结尾处键入三个英文句号的方法达到换行的目的。如: q=5^6+sin(pi)+exp(3)+(1+2+3+4+5)/sin(x)… -5x+1/2-567/(x+y) l MATLAB 可以输入字母、汉字,但是标点符号必须在英文状态下书写。 l MATLAB 中不需要专门定义变量的类型,系统可以自动根据表达式的值或输入的值

matlab中循环语句用法

循环结构:for语句 格式: for 循环变量=表达式1:表达式2:表达式3 循环体 end 【注】:表达式1:循环变量初值, 表达式2:步长,为1时,可省略; 表达式3:循环变量终值。 或: for循环变量=矩阵表达式 循环体 end 【注】:执行过程是依次将矩阵的各列元素赋给循环变量,然后执行循环体语句,直至各列元素处理完毕。 2 while语句: 格式: while(条件) 循环体 end 【注】:条件成立时,执行循环体 3

break语句&& continue语句: break:破坏,破坏循环,终止循环的进行,跳出循环,程序将执行循环语句的下一语句。 continue:继续,循环继续,程序将跳过循环体中剩下的语句,继续下一次循环。 4 循环的嵌套—多重循环结构 5 选择结构:if-else语句 格式: if 表达式 程序模块 end 或 if 表达式 程序模块1 else 程序模块2 end 6 switch语句: 格式:

switch 表达式 case 数值1 程序模块1 case 数值2 程序模块2 case 数值3 程序模块3 ...... otherwise 程序模块n end 执行过程:首先计算表达式的值, 然后将其结果与每一个case后面的数值依次进行比较, 如果相等,则执行该case的程序模块; 如果都不相等,则执行otherwise模块中的语句。 switch语句可以替代多分支的if语句,而且switch语句简洁明了,可读性更好。 7 matlab中一些基本知识: END 注意事项 for循环可以通过break语句结束整个for循环

预测控制MATLAB仿真与设计

动态矩阵控制算法实验报告 院系:电子信学院 姓名:郝光杰 学号:172030039 专业:控制理论与控制工程 导师:俞孟蕻

MATLAB环境下动态矩阵控制实验 一、实验目的: 对于带有纯滞后、大惯性的研究对象,通过动态控制矩阵的MATLAB的直接处理与仿真实验,具有较强的鲁棒性和良好的跟踪性。输入已知的控制模型,通过对参数的选择,来取的良好的控制效果。 二、实验原理: 动态矩阵控制算法是一种基于被控对象非参数数学模型的控制算法,它是一种基于被控对象阶跃响应的预测控制算法,以对象的阶跃响应离散系统为模型,避免了系统的辨识,采用多步预估技术,解决时延问题,并按照预估输出与给定值偏差最小的二次性能指标实施控制,它适用于渐进稳定的线性对象,系统动态特性中存在非最小相位特性或纯滞后都不影响算法的直接使用。 三、实验环境: 计算机 MATLAB2016b 四、实验步骤: 影响控制效果的主要参数有: 1)采样周期T与模型长度N 在DMC中采样周期T与模型长度N的选择需要满足香农定理和被控对象的类型及其动态特性的要求,通常需要NT后的阶跃响应输出值接近稳定值。 2)预测时域长度P P对系统的快速性和稳定性具有重要影响。为使滚动优化有意义,应使P 包含对象的主要动态部分,P越小,快速性提高,稳定性变差;反之,P越大,系统实时性降低,系统响应过于缓慢。 3)控制时域长度M

M控制未来控制量的改变数目,及优化变量的个数,在P确定的情况下,M越小,越难保证输出在各采样点紧密跟踪期望输出值,系统响应速度缓慢, 可获得较好的鲁棒性,M越大,控制机动性越强,改善系统的动态性能,但是稳定性会变差。 五、实例仿真 (一)算法实现 设GP(s)=e-80s/(60s+1),采用DMC后的动态特性如图1所示,采样周期 T=20s,优化时域P=10,M=2,建模时域N=20。 MATLAB程序1: g=poly2tfd(1,[60 1],0,80);%通用传函转换为MPC模型 delt=20; %采样周期 nt=1; %输出稳定性向量 tfinal=1000; %截断时间 model=tfd2step(tfinal,delt,nt,g);%传函转换为阶跃响应模型 plant=model;%进行模型预测控制器设计 p=10; m=2; ywt=[];uwt=1;%设置输入约束和参考轨迹等控制器参数 kmpc=mpccon(plant,ywt,uwt,m,p);%模型预测控制器增益矩阵计算 tend=1000;r=1;%仿真时间 [y,u,yrn]=mpcsim(plant,model,kmpc,tend,r);%模型预测控制仿真 t=0:20:1000;%定义自变量t的取值数组 plot(t,y) xlabel(‘图一DMC控制动态响应曲线(time/s)’); ylabel(‘响应曲线’); 结果如下: Percent error in the last step response coefficient

MATLAB编程如何不用for循环

MATLAB编程如何不用for循环--以DFT变换矩阵为例 缘起:大家都知道MATLAB中用for循环编写的代码执行起来效率不高,如何用矩阵和向量的运算提升效率对每一个用matlab的人来说都是很有必要的,但是此项功夫高手一般不愿意给初学者讲,此功夫是高手和低手的分水岭,高手们更是拿此功夫在初学者面前炫耀。本人当初怀着很恭敬的心向高手请教,高手笑笑说这要我自己编。出于让后来人受益,帮助和我一样无助的求知者。本人今天话了一天时间将此问题研究下,并且将代码毫无保留的公布出来。希望大家能够受益,阿弥陀佛! 上述W矩阵的第一列代表直流成分,第二列到最后一列是信号的交流成分,可以看出倍频关系!我以前不知道DFT 可以通过矩阵表示。注意matlab中dftmtx实现上述W矩阵的时候没有用1/sqrt(N) 进行归一化!可以通过dftmtx(2)验证,没有1/sqrt(2)。 例1 DFT matrix 是Hermitian的 Nfft = 8; xn=rand(1,Nfft); y=dftmtx(Nfft)*xn.' %结果是个列向量y=dftmtx(Nfft)*x.' 和y=fft(x,Nfft)是等价的 y = xn*dftmtx(Nfft) %结果是个行向量 y=fft(xn,Nfft) %结果是个行向量 %dft变换公式,n代表时域采样点,k代表频域采样点 Y(k)=sum(x.*exp(-j*2*pi*n*k)) 相应的,dftmtx(Nfft)产生的矩阵中,第k行,n列元素=exp(-j*2*pi*k*n/Nfft),与x.'相乘正好对应fft变换后的每个频点值。

例1:双重循环求DFT N = 8; x=rand(1,N); for k=0:N-1 sum=0; % 注意每个X(k)的值不应该受上次计算的影响 for m=0:N-1 w=exp(-j*2*pi/N.*m.*k); %DFT matrix 的每一行的元素是不同的 sum=sum+x(m+1).*w; % 这个循环实际上是计算DFT matrix的每一行与信号x的内积 end X(k+1)=sum; %Matlab下标从1开始 end % 注意X 是个行向量,是个数组,我以前不知道X(k)的循环赋值的结果是个行向量 y=fft(x,N) %验证 例2:单循环求DFT %% x 是行向量的Version,结果X也是行向量 N = 8; x=rand(1,N); m=0:N-1; sum=0; for k=0:N-1 %核心思想是内积运算:x躺着,后面的必须站着 X(k+1)= x*exp(-j*2*pi/N.*m'.*k) ; % 以前这样的表达物理含义是不明确的--> X(k+1)= x*exp(-j*2*pi/N.*m.*k).' ; end y=fft(x,N) %验证 %% x 是列向量的Version,结果X是行向量,fft(x)的结果是列向量 N = 8; x=rand(1,N)'; m=0:N-1; sum=0; for k=0:N-1 % 核心思想是内积运算:x躺着,后面的必须站着 X(k+1)= exp(-j*2*pi/N.*m.*k)*x ; % 以前这样的表达物理含义是不明确的--> X(k+1)= x*exp(-j*2*pi/N.*m.*k).' ; end y=fft(x,N) %验证结果y是个列向量,X是y的转置。因为X按下标赋值的结果是个行向量! 例3:不用循环求DFT %% x 是行向量的Version,结果X也是行向量 N = 8; xn=rand(1,N); %一次去掉2个循环,不要试图一次去掉一个 n=[0:1:N-1]; k=[0:1:N-1]; WN=exp(-j*2*pi/N); nk=n'*k; %看看如何不用for循环来实现,向量的外积N-by-1 multiply 1-by-N WNnk=WN.^nk; %WNnk就是dftmtx(8),dftmtx原来是这样构造的 Xk=xn*WNnk; % 究竟nk这个向量外径是n'*k还是k'*n要看内积在哪一维执行

MatLab基本运算

MatLab & 数学建模 第一讲简介及基本运算 一、简介 MATLAB名字由MATrix和 LABoratory 两词的前三个字母组合而成。那是20世纪七十年代后期的事:时任美国新墨西哥大学计算机科学系主任的Cleve Moler教授出于减轻学生编程负担的动机,为学生设计了一组调用LINPACK和EISPACK库程序的“通俗易用”的接口,此即用FORTRAN编写的萌芽状态的MATLAB。 经几年的校际流传,在Little的推动下,由Little、Moler、Steve Bangert合作,于1984年成立了MathWorks公司,并把MATLAB正式推向市场。从这时起,MATLAB的内核采用C语言编写,而且除原有的数值计算能力外,还新增了数据图视功能。 MATLAB以商品形式出现后,仅短短几年,就以其良好的开放性和运行的可靠性,使原先控制领域里的封闭式软件包(如英国的UMIST,瑞典的LUND和SIMNON,德国的KEDDC)纷纷淘汰,而改以MATLAB为平台加以重建。在时间进入20世纪九十年代的时候,MATLAB 已经成为国际控制界公认的标准计算软件。 在欧美大学里,诸如应用代数、数理统计、自动控制、数字信号处理、模拟与数字通信、时间序列分析、动态系统仿真等课程的教科书都把MATLAB作为内容。这几乎成了九十年代教科书与旧版书籍的区别性标志。在那里,MATLAB是攻读学位的大学生、硕士生、博士生必须掌握的基本工具。 在国际学术界,MATLAB已经被确认为准确、可靠的科学计算标准软件。在许多国际一流学术刊物上,(尤其是信息科学刊物),都可以看到MATLAB的应用。 在设计研究单位和工业部门,MATLAB被认作进行高效研究、开发的首选软件工具。如美国National Instruments公司信号测量、分析软件LabVIEW,Cadence公司信号和通信分析设计软件SPW等,或者直接建筑在MATLAB之上,或者以MATLAB为主要支撑。又如HP公司的VXI硬件,TM公司的DSP,Gage公司的各种硬卡、仪器等都接受MATLAB的支持。 MATLAB具有用法简易、可灵活运用、程式结构强又兼具延展性。以下为其几个特色: ?功能强的数值运算 - 在MATLAB环境中,有超过500种数学、统计、科学及工程方面的函数可使用,函数的标示自然,使得问题和解答像数学式子一般简单明了,让使用者可全力发挥在解题方面,而非浪费在电脑操作上。 ?先进的资料视觉化功能 - MATLAB的物件导向图形架构让使用者可执行视觉数据分,并制作高品质的图形,完成科学性或工程性图文并茂的文章。 ?高阶但简单的程式环境 - 作为一种直译式的程式语言,MATLAB容许使用者在短时间内写完程式,所花的时间约为用 FORTRAN 或 C 的几分之一,而且不需要编译 (compile)及联结 (link) 即能执行,同时包含了更多及更容易使用的内建功能。 ?开放及可延伸的架构 - MATLAB容许使用者接触它大多数的数学原使码,检视运算法,更改现存函数,甚至加入自己的函数使 MATLAB成为使用者所须要的环境。 ?丰富的程式工具箱 - MATLAB的程式工具箱融合了套装前软体的优点,与一个灵活的开放但容易操作之环境,这些工具箱提供了使用者在特别应用领域所需之许多函数。现有工具箱有:符号运算(利用Maple V的计算核心执行)、影像处理、统计分析、讯号处理、神经网路、模拟分析、控制系统、即时控制、系统确认、强建控制、弧线分析、最佳化、模糊逻辑、mu分析及合成、化学计量分析。 二、MatLab界面

灰色预测模型的MATLAB 程序及检验程序

灰色预测模型的Matlab程序及检验程序%灰色预测模型程序 clear syms a b; c=[a b]'; A=[46.232.626.723.020.018.917.516.3];%原始序列B=cumsum(A);%累加 n=length(A); for i=1:(n-1) C(i)=(B(i)+B(i+1))/2; end %计算待定参数 D=A; D(1)=[]; D=D'; E=[-C;ones(1,n-1)]; c=inv(E*E')*E*D; c=c'; a=c(1); b=c(2); %预测往后预测5个数据 F=[];F(1)=A(1); for i=2:(n+5) F(i)=(A(1)-b/a)/exp(a*(i-1))+b/a; end G=[];G(1)=A(1); for i=2:(n+5) G(i)=F(i)-F(i-1); end t1=2002:2009; t2=2002:2014; G plot(t1,A,'o',t2,G) %灰色预测模型检验程序 function[q,c,p]=checkgm(x0,x1) %GM检验函数 %x0原始序列 %x1预测序列 %·返回值

%q–-相对误差 %c--·方差比 %p--小误差概率 e0=x0-x1; q=e0/x0; s1=var(x0); %qpa=mean(e0); s2=var(e0); c=s2/s1; len=length(e0); p=0; for i=1:len if(abs(e0(i))<0.6745*s1) p=p+1; end end p=p/len; end 等级相对误差q方差比C小误差概论P I级<0.01<0.35>0.95 II级<0.05<0.50<0.80 III级<0.10<0.65<0.70 IV级>0.20>0.80<0.60

(完整版)第三讲Matlab优化工具

第三讲Matlab优化工具 一、简介 在建模过程中,许多问题都可归结为“最优化(optimization)”问题,如最大利润、最小成本、最短路径等,最优化问题也称数学规划。要描述一个最优化问题,应明确三个基本要素: 决策变量(decision variables):它们是决策者所控制的变量,它们取什么值需要决策者来决策,最优化问题的求解就是找出决策变量的最优取值。 约束条件(constraints):它们是决策变量在现实世界中所受到的限制,或者说决策变量在这些限制范围之内取值才有实际意义。 目标函数(objective function):它代表决策者希望对其进行优化的那个指标,目标函数是决策变量的函数。 最优化问题的分类,按决策变量是否是时间的函数分为动态优化和静态优化。按目标函数与约束条件是否是决策变量的线性函数分为线性规划和非线性规划,按决策变量是否为整数分为整数规划和非整数规划,此外还有0-1规划、二次规划、多目标优化、最小最大优化问题等。 可行解(feasible solution):满足全部约束条件的决策向量。 可行域:全部可行解构成的集合。 最优解:使目标函数达到最优值(最大或最小值,并且有界)的可行解。 无界解:若求极大化则目标函数在可行域中无上界,若求极小化

则目标函数在可行域中无下界。 二、线性规划(Linear programming ) Matlab 中,线性规划问题的标准形式为 min .. T eq eq c x Ax b s t A x b lb x ub ?≤?=??≤≤? 其中1212(,,),(,,)T T n n c c c c x x x x ==L L 思考:最大值问题 max T c x 和不等式约束Ax b ≥怎样转化为上述标准形式?(加负号;两边同乘-1) Matlab 中解上述线性规划问题的指令: x=linprog(c,A,b,Aeq,beq,lb,ub) 或[x,fval]=linprog(c,A,b,Aeq,beq,lb,ub) 说明:当上述指令中某个输入参数缺省时应在相应位置填上空矩阵[],若从某项输入参数开始往后各项参数都缺省,则可以将其全部 省略而不用补上[]。例如线性规划问题 min , .. T c x s t Ax b ≤,可以表示 为 x=linprog(c,A,b);而问题min , .. T Ax b c x s t lb x ub ≤?? ≤≤?则必须表示为x=linprog(c,A,b,[],[],lb,ub) 例:解下列线性规划问题 1、1231231231 2min 5462032442..32300,1,2,3i z x x x x x x x x x s t x x x i =----+≤??++≤??+≤??≥=? 2、123423412123124max 4001000300200202316..3424050,0,0z x x x x x x x x x s t x x x x x x =++--++=??+≤??+≤??≤≤??≥≥≥?

基于Matlab的简易计算器

工程设计报告 设计题目:基于Matlab的简易计算器 学院: 专业: 班级: 学号: 姓名: 电子邮件: 日期:2015年12 月 成绩: 指导教师:

西安电子科技大学 电子工程学院 工 程设计 任务书 学生姓名指导教师职称 学生学号专业 题目基于Matlab 的简易计算器 任务与要求 任务如下: 利用MATLAB GUI 设计实现一个图形用户界面的计算器程序,实现: A.实现十进制数的加、减、乘、除、简单计算。 B. 科学计算函数,包括正弦、余弦、正切、余切、开方、指数等函数运行。 C. 有清除键,能清除操作。 要求如下: A .熟练掌握MatlabGUI 界面的设计与应用 B .最终计算器能够实现预期的相关功能 开始日期2015年 11月日完成日期2016年1月日 课程设计所在单位 本表格由电子工程学院网络信息中心编辑录入 https://www.wendangku.net/doc/ce15008696.html,. …………………………装…………………… … … … … 订 … … … … … … … … … … … …线 … …… …… …… …… …… … …… …… …… …… …… … …

摘要 基于Matlab GUI计算器设计时利用GUI的创建图像用户界面进行计算器设计。设计计算器时,主要是考虑到计算器的易用性、功能的常用程度进行计算器界面与功能的设计。通过调整控件和文本的布局及颜色,使界面简单大方、布局合理,达到界面友好的效果。 计算器设计时主要利用到get和set两个函数进行各个控件属性值的传递和设置。计算器实现的功能有:数字0~9和小数点的输入显示,平方开方和对数的输入显示。进行四则运算、正弦函数、余弦函数、正切函数以及反正弦函数、反余弦函数、反正切函数的计算等等。最后运行调试,实现基于MatlabGUI的计算器的设计。 关键词:MatlabGUI计算器 Abstracts Based on Matlab GUI calculator design using the user interface to create images of GUI calculator design.Design calculator, mainly considering the ease of use, function calculators calculator interface and function of the common level of design.By adjusting the control and the layout of the text and color, make the interface simple and easy, rational layout, to achieve the effect of friendly interface. Calculator design used to get and set two main function for each attribute value transfer and control Settings.Calculator the functions are: 0 ~ 9, according to input and decimal square root and logarithm of input.Arithmetic, sine function and cosine function, tangent function and the arcsine function,arccosine function, the calculation of the arctangent function and so on.Finally running debugging, implementation design based on Matlab GUI calculator. Keywords: Matlab GUI calculator

利用MATLAB进行回归分析

利用MATLAB进行回归分析 一、实验目的: 1.了解回归分析的基本原理,掌握MATLAB实现的方法; 2. 练习用回归分析解决实际问题。 二、实验内容: 题目1 社会学家认为犯罪与收入低、失业及人口规模有关,对20个城市的犯罪率y(每10万人中犯罪的人数)与年收入低于5000美元家庭的百分比1x、失业率2x和人口总数3x(千人)进行了调查,结果如下表。 (1)若1x~3x中至多只许选择2个变量,最好的模型是什么? (2)包含3个自变量的模型比上面的模型好吗?确定最终模型。 (3)对最终模型观察残差,有无异常点,若有,剔除后如何。 理论分析与程序设计: 为了能够有一个较直观的认识,我们可以先分别作出犯罪率y与年收入低于5000美元家庭的百分比1x、失业率2x和人口总数 x(千人)之间关系的散点图,根据大致分布粗略估计各因素造 3 成的影响大小,再通过逐步回归法确定应该选择哪几个自变量作为模型。

编写程序如下: clc; clear all; y=[11.2 13.4 40.7 5.3 24.8 12.7 20.9 35.7 8.7 9.6 14.5 26.9 15.7 36.2 18.1 28.9 14.9 25.8 21.7 25.7]; %犯罪率(人/十万人) x1=[16.5 20.5 26.3 16.5 19.2 16.5 20.2 21.3 17.2 14.3 18.1 23.1 19.1 24.7 18.6 24.9 17.9 22.4 20.2 16.9]; %低收入家庭百分比 x2=[6.2 6.4 9.3 5.3 7.3 5.9 6.4 7.6 4.9 6.4 6.0 7.4 5.8 8.6 6.5 8.3 6.7 8.6 8.4 6.7]; %失业率 x3=[587 643 635 692 1248 643 1964 1531 713 749 7895 762 2793 741 625 854 716 921 595 3353]; %总人口数(千人) figure(1),plot(x1,y,'*'); figure(2),plot(x2,y,'*'); figure(3),plot(x3,y,'*'); X1=[x1',x2',x3']; stepwise(X1,y) 运行结果与结论:

相关文档