matlab函数

Simulink仿真入门到精通(十) S函数

无人久伴 提交于 2020-02-02 23:26:01
10.1 S函数概述 S函数也称为Simulink中的系统函数,是用来描述模块的Simulink宏函数,支持M、C等多种语言。当Simulink默认的模块不能满足用户的需求时,用户可以通过S函数自己打造一个模块,实现自定义的算法或期待的动作。 10.2 S函数的类型 S函数有多种类型,按照语言分类有M、C、C++、Fortran等编写的; 按照所支持功能多少分类,包括Level1和Level2; 按照执行方式分类,可分为直接解释运行的M S函数和编译为Mex文件后执行的C Mex S函数。 Level1 M S函数输入输出端口最多位1且数据维数固定,Level2 M S函数的输入输出端口个数可以为多个,数据维数也可以动态改变。 编写一个既能用于仿真又能用于代码生成的算法时,需要给S函数编写同名的TLC文件。 由于M语言需要调用MATLAB解释器,故C Mex S函数运行速度比M S函数更快。 10.3 S函数的要素 一个Simulink模块包括输入、输出以及内部的状态量。除了3要素之外,还有一个无处不在的时间量。 所谓状态量,根据系统性质分为连续系统中的微分量和离散系统中的差分量。 dx/dt=f(t,x,u) y=g(t,x,u) 10.4 S函数的组成及执行顺序 执行顺序: main { 初始化模型; 计算下一个采样时间点(大步长); while(未到达仿真终止时间) {

MATLAB 常用形态学操作函数

a 夏天 提交于 2020-02-02 00:13:23
常用形态学操作函数(转自:http://blog.sina.com.cn/s/blog_4c52e9e20100e5if.html) 1、dilate函数 该函数能够实现二值图像的膨胀操作,有以下形式: BW2=dilate(BW1,SE) BW2=dilate(BW1,SE,…,n) 其中:BW2=dilate(BW1,SE)表示使用二值结构要素矩阵SE队图像数据矩阵BW1执行膨胀操作。输入图像BW1的类型为double或unit8,输出图像BW2的类型为unit8。BW2=dilate(BW1,SE,…,n)表示执行膨胀操作n次。 2、erode 函数 该函数能够实现二值图像的腐蚀操作,有以下形式: BW2= erode(BW1,SE) BW2= erode(BW1,SE,…,n) 其中:BW2= erode(BW1,SE)表示使用二值结构要素矩阵SE队图像数据矩阵BW1执行腐蚀操作。输入图像BW1的类型为double或unit8,输出图像BW2的类型为unit8。BW2= erode(BW1,SE,…,n)表示执行腐蚀操作n次。 3、bwmorph函数 该函数的功能是能实现二值图像形态学运算。它的格式如下: ① BW2=bwmorph(BW1,operation) ② BW2=bwmorph(BW1,operation,n) 其中:对于格式①

基础学习笔记之opencv(24):imwrite函数的使用

断了今生、忘了曾经 提交于 2020-02-01 20:14:59
http://www.cnblogs.com/tornadomeet/archive/2012/12/26/2834336.html   前言   OpenCV中保存图片的函数在c++版本中变成了imwrite(),这应该是向matlab中图像处理的的一些函数风格靠近吧。保存图片这个功能还是很重要的,比如说在写科研论文的时候需要把一些中间图片给贴出来,这样就可以在程序中间利用该函数保存图片了。甚至还可以将这些保存的图片供后续的matlab处理。本文就简单介绍下OpenCV中imwrite()函数的用法。不过个人感觉这个函数功能还是不够强大,使用时有很多限制。   开发环境:QtCreato2.5.1+OpenCV2.4.3    实验基础   本次实验主要是测试imwrite()函数的2个功能:   1. 测试其是否能够保存Mat图像中截取的一部分图像,比如说用Rect矩阵截取大的图像中的一部分,由于此时两者只是用了自己的文件头,数据是共享的(没有采用copyTo()函数或者clone()函数复制),所以这种测试想法很正常。   2. 测试imwrite()函数的第3个参数的使用。   在针对第1个测试时,是给定一张原图,截取一部分,然后保存。针对第2个功能是采用OpenCV官网文件中的一个例子,创建一个alpha表,然后保存为png格式的图片,压缩参数自设定。  

matlab - 一些小函数

对着背影说爱祢 提交于 2020-02-01 01:11:44
1、将乱序数组按序排列 —— sort 因为只用到1维,就写1维的情况,剩下等用到后再摸索。 代码如下, 输入数组 A ,得到的数组 B 为排序后数组,数组 I 为数组 B 中数据在原数组 A 中的位置。 % ================================================================================= % sort 使用 % ================================================================================= A = randi(10,1,10) % 随机生成10个整数,可以用自己需要的数据 [B,I] = sort(A) % 对数据 A 进行排序,得到排好序的数组 B 及B中数据原位置编号数组 I . % ================================================================================= % 结果 % ================================================================================= A = 10 1 8 9 9 1 4 3 9 5 B = 1 1 3 4 5 8 9 9 9

Matlab优化工具箱和模拟退火算法

霸气de小男生 提交于 2020-01-31 10:33:45
Matlab优化工具箱主要有以下4种求解器: 1.最小值优化 2.多目标最小值优化 3.方程求解器 4.最小二乘(曲线拟合)求解器 一.最小值优化: 1.标量最小值优化:使用函数fminbnd 例:对边长为3m的正方形铁板,在4个角处剪去相等的正方形,以制成方形无盖水槽,问如何剪才能使水槽的容积最大? 方程:V=(3-2x)^2x function f = myfun1(x) f = -(3-2*x).^2 * x; % 由于fminbnd只能用来计算最小值,所以这里加负号 x = fminbnd(@myfun1,0,1.5) % x = fminbnd(fun,x1,x2):返回标量函数fun在条件x1 < x < x2下取最小值时自变量x的值 y= -myfun1(x) % 调用myfun1函数来计算水槽的最大容积 2.无约束最小值优化:使用函数fminunc和fminsearch 例:求函数f(x)=3x1^2+2x1x2+x2^2最小值 function f = myfun2(x) f = 3*x(1)^2 + 2*x(1)*x(2) + x(2)^2; % 目标函数 x0 = [1,1]; % 初始值,可以是标量,向量,矩阵,即从这个值开始找,不熟悉的话可以多试几次,取最优的 [x,fval] = fminunc(@myfun2,x0) % x为自变量,fval为函数值

Matlab学习笔记(四)——编程基础

旧街凉风 提交于 2020-01-31 10:21:49
4.1 M文件 所谓M文件就是将处理问题的各种命令融合到一个文件中,该文件以.m为扩展名,然后由MATLAB系统进行编译,得出相应的运行结果,具有相当大的可开发性和扩展性。M文件有脚本文件的函数文件两种。脚本文件不需要输入参数也不输出参数,按照文件中指定的顺序执行命令序列。而函数文件则接受其他数据作为输入参数,并且可以返回数据 4.1.1 M文件编辑器 函数定义行 用于定义函数名称,定义输入输出变量的数量、顺序。脚本式M文件没有此行 完整函数定义为 function[out1,out2,out3…]=funName(in1,in2,in3…) 其中输入变量用圆括号,变量间用英文逗号分隔。输出变量用方括号,无输出可用空括号或无括号和等号 无输出的函数定义行可为 function funName (in1,in2,in3) H1行 紧跟着函数定义行,因为它是Help文件的第一行,所以叫做H1行,用%开始 MATLAB可以通过命令把M文件上的帮助信息显示在命令窗口。因此建议写M文件时建立帮助文本 H1行是函数功能的概括性描述,在命令窗口提示符下输入命令可以显示H1行文本 help filename或者look for filename Help文本 这是为帮助建立的文本,可以是连续多行的注释文本。只能在命令窗口观看 帮助文本遇到之后的第一个非注释行结束,函数中的其他注释行不被显示 注释

MATLAB小常识4

↘锁芯ラ 提交于 2020-01-30 10:20:05
20.pchip函数 分段三次埃尔米特 ( Hermite )多项式    new_y = pchip(x,y,new_x) ;   x : 已知样本点的横坐标   y : 已知样本点的纵坐标   new_x : 要插入处对应的横坐标   new_y : 要插入处计算得到的纵坐标 21.spline函数 三次样条 插值    new_y = spline(x,y,new_x) ;   x : 已知样本点的横坐标   y : 已知样本点的纵坐标   new_x : 要插入处对应的横坐标   new_y : 要插入处对应的纵坐标 22.plot函数    plot(x1,y1,x2,y2)   线方式: -实线 :点线 -.虚点线 --波折线   点方式: .圆点 +加号 *星号 xX形 o小圆   颜色:y黄 r红 g绿 b蓝 w白 k黑 m紫 c青   eg .   new_y1 = pchip(x,y,new_x);   new_y2 = spline(x,y,new_x);   plot(x,y,'ok',new_x,new_y1,'-r',new_x,new_y2,'-b'); 23.legend函数    legend(string1,string2,string3....);   分别将字符串1,字符串2,字符串3...标注到图中,每个字符串对应的图标为画图时的图标 24

MATLAB 常用函数 size()Zeros() ones() inf() ceil()等取整函数 randperm() find() sum() cumsum()

左心房为你撑大大i 提交于 2020-01-30 01:52:08
1.size():获取矩阵的行数和列数 1、s=size(A),当只有一个输出参数时,返回一个行向量,该行向量的第一个元素是矩阵的行数,第二个元素是矩阵的列数。 2、[r,c]=size(A),当有两个输出参数时,size函数将矩阵的行数返回到第一个输出变量r,将矩阵的列数返回到第二个输出变量c。 3、size(A,n)如果在size函数的输入参数中再添加一项n,并用1或2为n赋值,则 size将返回矩阵的行数或列数。其中r=size(A,1)该语句返回的时矩阵A的行数, c=size(A,2) 该语句返回的时矩阵A的列数。 ———————————————— CSDN博主「幸福在路上wellbeing」 https://blog.csdn.net/xingfuyusheng/article/details/88674860 2.Zeros用法 zeros函数——生成零矩阵 A=zeros(2,3) zeros zeros A = 0 0 0 0 0 0 B=zeros(3) B = 0 0 0 0 0 0 0 0 0 源于百度百科 3.ones ones函数——生成全1阵 4.inf inf为无穷大量+∞,-inf为无穷小量-∞ 比如1 / 0的结果就是inf 5.ceil等取整函数 ceil函数的作用是朝正无穷方向取整,即将m/n的结果向正无穷方向取整,如m/n=3.12

朝花夕拾之Matlab矩阵运算

不羁岁月 提交于 2020-01-29 15:21:44
矩阵运算 1. 加、减运算 运算符:“+”和“-”分别为加、减运算符。 运算规则:对应元素相加、减,即按线性代数中矩阵的“十”,“一”运算进行。 例1-22 >>A=[1, 1, 1; 1, 2, 3; 1, 3, 6] >>B=[8, 1, 6; 3, 5, 7; 4, 9, 2] >>A+B=A+B >>A-B=A-B 结果显示:A+B= 9 2 7 4 7 10 5 12 8 A-B= -7 0 -5 -2 -3 -4 -3 -6 4 2. 乘法 运算符:* 运算规则:按线性代数中矩阵乘法运算进行,即放在前面的矩阵的各行元素,分别与放在后面的矩阵的各列元素对应相乘并相加。 1.两个矩阵相乘 例1-23 >>X= [2 3 4 5; 1 2 2 1]; >>Y=[0 1 1; 1 1 0; 0 0 1; 1 0 0]; Z=X*Y 结果显示为: Z= 8 5 6 3 3 3 2.矩阵的数乘:数乘矩阵 上例中:a=2*X 则显示:a = 4 6 8 10 2 4 4 2 向量的点乘(内积):维数相同的两个向量的点乘。 数组乘法: A.*B表示A与B对应元素相乘。 3 .向量点积 函数 dot 格式 C = dot(A,B) %若A、B为向量,则返回向量A与B的点积,A与B长度相同;若为矩阵,则A与B有相同的维数。 C = dot(A,B,dim) %在dim维数中给出A与B的点积

matlab在信号实验中的运用二:信号的频域初探

我与影子孤独终老i 提交于 2020-01-29 03:28:56
傅里叶变换 时域和频域是反应一个信号的两个方面,时域刻画信号在某一时刻的幅值情况,而频域则表现信号的在某一种变化程度(频率)上的分量。 根据时域的离散与周期的不同傅里叶变换可以分成四种,时域或频域的离散对应着另一个域是周期的,而非周期则对应另一个域是连续的。 连续非周期:符号法 在matlab里使用syms可以定义符号变量,与矩阵变量不同,不需要我们手动对其值进行初始化,符号变量可以更好地刻画完整的函数(而不是以矩阵保留某一部分函数值),在函数形式变换、方程求解等等方面很方便。fourier函数可以对符号表达式进行傅里叶变换,并可以求出变换后的表达式, 以如下函数为例 syms t; y=sin(0.5*pi*t)/(pi*t); %2sinc(0.5t) Y=fourier(y) %进行傅里叶变换 figure(1); ezplot(y); %原函数 ylim([-0.5 1]); figure(2); ezplot(Y,[-pi,pi]); %变换后函数 原函数: 傅里叶变换以后: 门函数与sinc函数是一组傅里叶变换对,这是信号中常用的一组变换。可以看到matlab为我们计算了傅里叶变换后的函数表达式,如果Y=fourier(y) 不加‘;’结尾,可以在命令行输出该表达式: 注意: 1、ezplot函数自变量是函数表达式,只能以表达式的形式画图