当前位置:文档之家› matlab中s函数使用

matlab中s函数使用

matlab中s函数使用
matlab中s函数使用

函数是system Function的简称,用它来写自己的simulink模块。(够简单吧,^_^,详细的概念介绍大伙看帮助吧)可以用matlab、C、C++、Fortran、Ada等语言来写,这儿我只介绍怎样用matlab语言来写吧(主要是它比较简单)。

先讲讲为什么要用s函数,我觉得用s函数可以利用matlab的丰富资源,而不仅仅局限于simulink提供的模块,而用c或c++等语言写的s函数还可以实现对硬件端口的操作,还可以操作windows API等的。

先介绍一下simulink的仿真过程(以便理解s函数),simulink的仿真有两个阶段:一个为初始化,这个阶段主要是设置一些参数,像系统的输入输出个数、状态初值、采样时间等;第二个阶段就是运行阶段,这个阶段里要进行计算输出、更新离散状态、计算连续状态等等,这个阶段需要反复运行,直至结束。

在matlab的workspace里打edit sfuntmpl(这是matlab自己提供的s函数模板),我们看它来具体分析s函数的结构。它的第一行是这样的:function

[sys,x0,str,ts]=sfuntmpl(t,x,u,flag) .

先讲输入与输出变量的含义:t是采样时间,x是状态变量,u是输入(是做成simulink模块的输入),flag是仿真过程中的状态标志(以它来判断当前是初始化还是运行等);sys输出根据flag 的不同而不同(下面将结合flag来讲sys的含义),x0是状态变量的初始值,str是保留参数(mathworks公司还没想好该怎么用它,嘻嘻,一般在初始化中将它置空就可以了,str=[]),ts是一个1×2的向量,ts(1)是采样周期,ts(2)是偏移量。

下面结合中的代码来讲具体的结构:

switch flag, %判断flag,看当前处于哪个状态

case 0,

[sys,x0,str,ts]=mdlInitializeSizes;

flag=0表示处于初始化状态,此时用函数mdlInitializeSizes进行初始化,此函数在的149行,我们找到他,在初始化状态下,sys是一个结构体,用它来设置模块的一些参数,各个参数详细说明如下

size = simsizes;%用于设置模块参数的结构体用simsizes来生成

= 0;%模块连续状态变量的个数

= 0;%模块离散状态变量的个数

= 0;%模块输出变量的个数

= 0;%模块输入变量的个数

= 1;%模块是否存在直接贯通(直接贯通我的理解是输入能 %直接控制输出)

= 1;%模块的采样时间个数,至少是一个

sys = simsizes(sizes); %设置完后赋给sys输出

举个例子,考虑如下模型:

dx/dt=fc(t,x,u) 也可以用连续状态方程描述:dx/dt=A*x+B*u

x(k+1)=fd(t,x,u) 也可以用离散状态方程描述:x(k+1)=H*x(k)+G*u(k)

y=fo(t,x,u) 也可以用输出状态方程描述:y=C*x+D*u

设上述模型连续状态变量、离散状态变量、输入变量、输出变量均为1个,我们就只需改上面那一段代码为:

(一般连续状态与离散状态不会一块用,我这儿是为了方便说明)

=1;=1;=1;

ts=1;

其他的可以不变。继续在mdlInitializeSizes函数中往下看:

x0 = []; %状态变量设置为空,表示没有状态变量,以我们上面的假设,可改为x0=[0,0](离散和连续的状态变量我们都设它初值为0)

str = []; %这个就不用说了,保留参数嘛,置[]就可以了,反正没什么用,可能会给它一些意义

ts = [0 0]; %采样周期设为0表示是连续系统,如果是离散系统在下面的

mdlGet %TimeOfNextVarHit函数中具体介绍。

嘻嘻,总算讲完了初始化,后面的应该快了

在sfuntmpl的106行继续往下看:

case 1,

sys=mdlDerivatives(t,x,u);

!

flag=1表示此时要计算连续状态的微分,即上面提到的dx/dt=fc(t,x,u)中的dx/dt,找到mdlDerivatives函数(在193行)如果设置连续状态变量个数为0,此处只需sys=[]; 就可以了(如sfuntmpl中一样),按我们上述讨论的那个模型,此处改成 sys=fc(t,x(1),u)或sys=A*x(1)+B*u %我们这儿x(1)是连续状态变量,而x(2)是离散的,这儿只用到连续的,此时的输出sys就是微分

继续,在sfuntmpl的112行:

case 2,

sys=mdlUpdate(t,x,u);

flag=2表示此时要计算下一个离散状态,即上面提到的x(k+1)=fd(t,x,u),找到mdlUpd ate 函数(在206行)它这儿sys=[];表示没有离散状态,我们这而可以改成 sys=fd(t,x(2),u)或

sys=H*x(2)+G*u;%sys即为x(k+1)

看来后面几个一两句话就可了,呵呵,在sfuntmpl的118行

case 3,

sys=mdlOutputs(t,x,u);

flag=3表示此时要计算输出,即y=fo(t,x,u),找到mdlOutputs函数(在218行),如上,如果sys=[]表示没有输出,我们改成sys=fo(t,x,u)或sys=C*x+D*u %sys此时为输出y 好像快完了,嘻嘻,在sfuntmpl的124行

case 4,

?

sys=mdlGetTimeOfNextVarHit(t,x,u);

flag=4表示此时要计算下一次采样的时间,只在离散采样系统中有用(即上文的mdlInit ializeSizes中提到的ts设置ts(1)不为0)

连续系统中只需在mdlGetTimeOfNextVarHit函数中写上sys=[];这个函数主要用于变步长的设置,具体实现大家可以用edit vsfunc看这个例子

最后一个,在sfuntmpl的130行

case 9,

sys=mdlTerminate(t,x,u);

flag=9表示此时系统要结束,一般来说写上在mdlTerminate函数中写上sys=[]就可,如果你在结束时还要设置什么,就在此函数中写

关于sfuntmpl这个s函数的模板讲完了。

s函数还可以带用户参数,下面给个例子,和simulink下的gain模块功能一样,大伙自己看吧,我睡觉去了,累了。

function [sys,x0,str,ts] = sfungain(t,x,u,flag,gain)

switch flag,

&

case 0,

sizes = simsizes;

= 0;

= 0;

= 1;

= 1;

= 1;

= 1;

sys = simsizes(sizes);

x0=[];

str=[];

ts=[0,0];

case 3,

sys=gain*u;

case {1,2,4,9},

sys = [];

end

做好了s函数后,simulink--user-defined function下拖一个S-Function到你的模型,就可以用了,在simulink----user-defined function还有个s-Function Builder,他可以生成用c语言写的s函数在matlab的workspace下打sfundemos,可以看到很多演示s函数的程序。

matlab中S函数的编程问题

程序如下:

;

function sys=mdlOutputs(t,x,u,n)

sys(1)=6;

for m=1:100

n(m)=m*;

end

sys(1)=-6;

想用for循环做一个延时,生成一个脉冲序列,高电平为6低电平为-6,可输出波形总是输出-6,没有变化。还有为什么两个全写成sys就提示前面的sys不被使用。请高手指教

问题补充:

高手,我首先感谢你的热心帮忙!并已生成了幅值是6的脉冲序列!可是我还要再问你一个问题,以前没说清楚,这个脉冲是随时按照下面的式子改变占空比的。

a=p1*311sin(100*pi*(k+1))+p2*u(k)+p3*i(k)+p4.

得到的a是6保持的时间,p1=*10^(-6),p2=*10^(-6),p3=*10^(-6),p4=*10^(-6)都是常数,u(k),i(k)是S函数的两个输入,311sin(100*pi*(k+1))是下一采样时刻的正弦值。脉冲的周期是T=.能不能再改改您的回答。谢谢了!我把剩余的分数28分全给你了。能再帮帮我吗,我是个新手,您估计也早看出了,matlab的基本东西都不会,可是这个任务真的太急了。谢谢谢谢了!!!

提问者:ch_567 - 一级

~

最佳答案

function [sys,x0,str,ts]=mdlInitializeSizes

sizes = simsizes;

= 0;

= 4;

= 1;

= 2;

= 0;

= 0;

sys = simsizes(sizes);

x0 = [0 6 1 0];%x(1)时间0开始;x(2)幅值;x(3)切换标志位;x(4)周期标志位; *

str = [];

ts = [];

function sys=mdlUpdate(t,x,u)

T=;%周期设置

k=x(4);

s=x(2);

i=x(3);

if mod(i,2)==1

p1=*10^(-6);

p2=*10^(-6);

?

p3=*10^(-6);

p4=*10^(-6);

m=u(1);

n=u(2);

a=p1*311*sin(100*pi*(k+1))+p2*m+p3*n+p4;

t3=T*k+a;

end

if mod(i,2)==0

t3=T*k;

end

t1=x(1);

t2=t;

if (t1<=t3) & (t2>t3)%寻找切换时间点

s=-s;

i=i+1;

if mod(i,2)==0

k=k+1;

end

end

sys=[t2 s i k];

function sys=mdlOutputs(t,x,u)

[

sys=[x(2)];

因为时间关系,没有仔细斟酌,程序不是很简洁,但是可以用。

~

matlab中s函数编写(转)

2010-03-25 14:40

matlab中s函数编写

s函数是system Function的简称,用它来写自己的simulink 模块。(够简单吧,^_^,详细的概念介绍大伙看帮助吧)可以用matlab、C、C++、Fortran、Ada等语言来写,这儿我只介绍怎样用matlab语言来写吧(主要是它比较简单)

先讲讲为什么要用s函数,我觉得用s函数可以利用matlab的丰富资源,而不仅仅局限于simulink提供的模块,而用c或c++等语言写的s函数还可以实现对硬件端口的操作,还可以操作windows API等的

先介绍一下simulink的仿真过程(以便理解s函数),simulink的仿真有两个阶段:一个为初始化,这个阶段主要是设置一些参数,像系统的输入输出个数、状态初值、采样时间等;第二个阶段就是运行阶段,这个阶段里要进行计算输出、更新离散状态、计算连续状态等等,这个阶段需要反复运行,直至结束。

在matlab的workspace里打edit sfuntmpl(这是matlab自己提供的s 函数模板),我们看它来具体分析s函数的结构。它的第一行是这样的:function [sys,x0,str,ts]=sfuntmpl(t,x,u,flag)

先讲输入与输出变量的含义:t是采样时间,x是状态变量,u是输入(是做成

simulink模块的输入),flag是仿真过程中的状态标志(以它来判断当前是初始化还是运行等);sys输出根据flag的不同而不同(下面将结合flag来讲sys的含义),x0是状态变量的初始值,str是保留参数(mathworks公司还没想好该怎么用它,嘻嘻,一般在初始化中将它置空就可以了,str=[]),ts是一个1×2的向量,ts(1)是采样周期,ts(2)是偏移量。

下面结合中的代码来讲具体的结构:

switch flag, %判断flag,看当前处于哪个状态case 0,

[sys,x0,str,ts]=mdlInitializeSizes;

flag=0表示处于初始化状态,此时用函数mdlInitializeSizes进行初始化,此函数在的149行

我们找到他,在初始化状态下,sys是一个结构体,用它来设置模块的一些参数,各个参数详细说明如下

size = simsizes;%用于设置模块参数的结构体用simsizes来生成

= 0;%模块连续状态变量的个数

= 0;%模块离散状态变量的个数

= 0;%模块输出变量的个数

= 0;%模块输入变量的个数

= 1;%模块是否存在直接贯通(直接贯通我的理解是输入能 %直接控制输出) = 1;%模块的采样时间个数,至少是一个

sys = simsizes(sizes); %设置完后赋给sys输出

举个例子,考虑如下模型:

dx/dt=fc(t,x,u) 也可以用连续状态方程描述:

dx/dt=A*x+B*u

x(k+1)=fd(t,x,u) 也可以用离散状态方程描述:

x(k+1)=H*x(k)+G*u(k)

y=fo(t,x,u) 也可以用输出状态方程描述:y=C*x+D*u 设上述模型连续状态变量、离散状态变量、输入变量、输出变量均为1个,我们就只需改上面那一段代码为:

(一般连续状态与离散状态不会一块用,我这儿是为了方便说明)

=1;=1;=1;

ts=1;

其他的可以不变。继续在mdlInitializeSizes函数中往下看:

x0 = []; %状态变量设置为空,表示没有状态变量,以我们上面的假设,可改 %为x0=[0,0](离散和连续的状态变量我们都设它初值为0)

str = []; %这个就不用说了,保留参数嘛,置[]就可以了,反正没什么用,可 %能会给它一些意义

ts = [0 0]; %采样周期设为0表示是连续系统,如果是离散系统在下面的mdlGet %TimeOfNextVarHit函数中具体介绍

嘻嘻,总算讲完了初始化,后面的应该快了

在sfuntmpl的106行继续往下看:

case 1,

sys=mdlDerivatives(t,x,u);

flag=1表示此时要计算连续状态的微分,即上面提到的dx/dt=fc(t,x,u)中的

dx/dt,找到 mdlDerivatives函数(在193行)如果设置连续状态变量个数为0,此处只需sys=[]; 就可以了(如sfuntmpl中一样),按我们上述讨论的那个模型,此处改成 sys=fc(t,x(1),u)或sys=A*x(1)+B*u %我们这儿x(1)是连续状态变量,而x(2)是离散的,这儿只用到连续的,此时的输出sys就是微分

继续,在sfuntmpl的112行:

case 2,

sys=mdlUpdate(t,x,u);

flag=2表示此时要计算下一个离散状态,即上面提到的x(k+1)=fd(t,x,u),找到mdlUpd ate函数(在206行)它这儿sys=[];表示没有离散状态,我们这而可以改成 sys=fd(t,x(2),u)或sys=H*x(2)+G*u;%sys即为x(k+1)看来后面几个一两句话就可了,呵呵,在sfuntmpl的118行

case 3,

sys=mdlOutputs(t,x,u);

flag=3表示此时要计算输出,即y=fo(t,x,u),找到mdlOutputs函数(在218行),如上,如果sys=[]表示没有输出,我们改成sys=fo(t,x,u)或

sys=C*x+D*u %sys此时为输出y

好像快完了,嘻嘻,在sfuntmpl的124行

case 4,

sys=mdlGetTimeOfNextVarHit(t,x,u);

flag=4表示此时要计算下一次采样的时间,只在离散采样系统中有用(即上文的mdlInit ializeSizes中提到的ts设置ts(1)不为0)

连续系统中只需在mdlGetTimeOfNextVarHit函数中写上sys=[];这个函数主要用于变步长的设置,具体实现大家可以用edit vsfunc看这个例子

最后一个,在sfuntmpl的130行

case 9,

sys=mdlTerminate(t,x,u);

flag=9表示此时系统要结束,一般来说写上在mdlTerminate函数中写上sys=[]就可,如果你在结束时还要设置什么,就在此函数中写

关于sfuntmpl这个s函数的模板讲完了。

s函数还可以带用户参数,下面给个例子,和simulink下的gain模块功能一样,大伙自己看吧,我睡觉去了,累了

function [sys,x0,str,ts] = sfungain(t,x,u,flag,gain)

switch flag,

case 0,

sizes = simsizes;

= 0;

= 0;

= 1;

= 1;

= 1;

= 1;

sys = simsizes(sizes);

x0=[];

str=[];

ts=[0,0];

case 3,

sys=gain*u;

case {1,2,4,9},

sys = [];

end

做好了s函数后,simulink--user-defined function下拖一个S-Function到你的模型,就可以用了在simulink----user-defined function还有个

s-Function Builder,他可以生成用c语言写的s函数在matlab的workspace 下打sfundemos,可以看到很多演示s函数的程序

SIMULINK s-function的设计

Simulink为用户提供了许多内置的基本库模块,通过这些模块进行连接而构成系统的模型。对于那些经常使用的模块进行组合并封装可以构建出重复使用的新模块,但它依然是基于Simulink原来提供的内置模块。

而Simulink s-function是一种强大的对模块库进行扩展的新工具。

(一)、s-function的概念

s-function是一个动态系统的计算机语言描述,在MATLAB里,用户可以选择用m文件编写,也可以用c或mex文件编写,在这里只给大家介绍如何用m文件编写s-function。

S-function提供了扩展Simulink模块库的有力工具,它采用一种特定的调用语法,使函数和Simulink解法器进行交互。

S-function最广泛的用途是定制用户自己的Simulink模块。它的形式十分通

用,能够支持连续系统、离散系统和混合系统。

(二)、建立m文件s-function

1、使用模板文件:sfuntmp1. m 格式: [sys,x0]=function(t,x,u,flag) 该模板文件位于MATLAB根目录下toolbox/simulink/blocks目录下。

模板文件里s-function的结构十分简单,它只为不同的flag的值指定要相应调用的m文件子函数。比如当flag=3时,即模块处于计算输出这个仿真阶段时,相应调用的子函数为sys=mdloutputs(t,x,u)。

模板文件使用switch语句来完成这种指定,当然这种结构并不唯一,用户也可以使用if语句来完成同样的功能。而且在实际运用时,可以根据实际需要来去掉某些值,因为并不是每个模块都需要经过所有的子函数调用。

模板文件只是Simulink为方便用户而提供的一种参考格式,并不是编写

s-function的语法要求,用户完全可以改变子函数的名称,或者直接把代码写在主函数里,但使用模板文件的好处是,比较方便,而且条理清晰。

使用模板编写s-function,用户只需把s-函数名换成期望的函数名称,如果需要额外的输入参量,还需在输入参数列表的后面增加这些参数,因为前面的4个参数是simulink调用s-function时自动传入的。对于输出参数,最好不做修改。接下去的工作就是根据所编s-function要完成的任务,用相应的代码去替代模板里各个子函数的代码即可。

Simulink在每个仿真阶段都会对s-function进行调用,在调用时,Simulink 会根据所处的仿真阶段为flag传入不同的值,而且还会为sys这个返回参数指定不同的角色,也就是说尽管是相同的sys变量,但在不同的仿真阶段其意义却不相同,这种变化由simulink自动完成。

m文件s-function可用的子函数说明如下:

mdlInitializeSizes(flag=0):定义s-function模块的基本特性,包括采样时间、连续或者离散状态的初始条件和sizes数组。

mdlDerivatives(flag=1):计算连续状态变量的微分方程。

mdlUpdate(flag=2):更新离散状态、采样时间和主时间步的要求。mdlOutputs(flag=3):计算s-function的输出。

mdlGetTimeOfNextVarHit(flag=4):计算下一个采样点的绝对时间,这个方法仅仅是在用户在mdlInitializeSizes 里说明了一个可变的离散采样时间。

概括说来,建立s-function可以分成两个分离的任务:

初始化模块特性包括输入输出信号的宽度,离散连续状态的初始条件和采样时间。

将算法放到合适的s-function子函数中去。

2 、定义s-function的初始信息

为了让Simulink识别出一个m文件s-function,用户必须在s-函数里提供有关s-函数的说明信息,包括采样时间、连续或者离散状态个数等初始条件。这一部分主要是在mdlInitializeSizes子函数里完成。

Sizes数组是s-function函数信息的载体,它内部的字段意义为:NumContStates(sys(1)):连续状态的个数(状态向量连续部分的宽度)NumDiscStates(sys(2)):离散状态的个数(状态向量离散部分的宽度)

NumOutputs(sys(3)):输出变量的个数(输出向量的宽度)

NumInputs(sys(4)):输入变量的个数(输入向量的宽度)

DirFeedthrough(sys(5)):有不连续根的数量

NumSampleTimes(sys(6)):采样时间的个数,有无代数循环标志

如果字段代表的向量宽度为动态可变,则可以将它们赋值为-1。

注意DirFeedthrough是一个布尔变量,它的取值只有0和1两种,0表示没有直接馈入,此时用户在编写mdlOutputs子函数时就要确保子函数的代码里不出现输入变量u;1表示有直接馈入。

NumSampleTimes表示采样时间的个数,也就是ts变量的行数,与用户对ts的定义有关。

需要指出的是,由于s-function会忽略端口,所以当有多个输入变量或多个输出变量时,必须用mux模块或demux模块将多个单一输入合成一个复合输入向量或将一个复合输出向量分解为多个单一输出。

3、输入和输出参量说明

S-function默认的4个输入参数为t、x、u和flag,它们的次序不能变动,代表的意义分别为:

t:代表当前的仿真时间,这个输入参数通常用于决定下一个采样时刻,或者在多采样速率系统中,用来区分不同的采样时刻点,并据此进行不同的处理。x:表示状态向量,这个参数是必须的,甚至在系统中不存在状态时也是如此。它具有很灵活的运用。

u:表示输入向量。

flag:是一个控制在每一个仿真阶段调用哪一个子函数的参数,由Simulink在调用时自动取值。

S-function默认的4个返回参数为sys、x0、它们的次序不能变动,代表的意义分别为:

sys:是一个通用的返回参数,它所返回值的意义取决于flag的值。

x0:是初始的状态值(没有状态时是一个空矩阵[]),这个返回参数只在flag 值为0时才有效,其他时候都会被忽略。

一、有一系统如下:

dx1=x2

dx2=*sin(x(1))-2*x(2)+u

求出系统在单位阶跃输入下的x1的状态变化曲线,假设x1,x2初值为0。function [sys,x0]=dong(t,x,u,flag)

if flag==0

sys=[2;0;2;1;0;0];

x0=[0;0];

elseif flag==1

sys=[x(2);*sin(x(1))-2*x(2)+u];

elseif flag==3

sys=[x(1);x(2)];

else

sys=[];

end

`

S函数

S函数是扩展Simulink功能的强有力工具,它使用户可以利用MATLAB、C语言、C++语言等程序创建自己定义的Simulink模块。例如,对一个工程的几个不同的控制系统进行设计,而此时已经用M文件建立了一个动态模型,在这种情况下,可以将模型加入到S函数中,然后使用独立的Simulink模型来模拟这些控制系统。S函数还可以改善仿真的效率,尤其是在带有代数环的模型中。S函数使用一种特殊的调用规则来使得用户可以与Simulink的内部解法器进行交互,这种交互通Simulink内部解法器与内置的模块之间的交互非常相似。而且可以适用于不同性质的系统,例如连续系统、离散系统以及混合系统。

7.7.1 S函数模块

S函数模块在functions & Tables模块库中,用此模块可以创建包含S函数的Simulink模型。图7.7.1显示了一个含有S函数的简单模型。S函数模块的对话框如图所示,它有两个区:S

函数文件名区和S函数的参数区。S函数文件名区要填写S函数的文件名。S函数参数区要填写S函数所需要的参数。参数并列给出,各参数间以逗号分隔。如图7.7.2所示。表示了S函数的参数为:,矩阵[1 2;3 4]和字符串‘miles’。

图7.7.1 包含S函数的模型

图7.7.2 S函数模块的对话框

7.7.2 S函数的工作原理

S函数具有一套不同的调用方法,可以在仿真的不同阶段完成不同的调用任务。在模型仿真的不同阶段,Simulink会对模型中S函数模块选择适当的方法来完成调用。S函数可以完成的任务大体分为以下几种。

(1) 初始化。在进入仿真循环之间,Simulink首先初始化S函数,主要完成任务:

→初始化包含S函数信息的仿真结构SimStruct。

→设置输入输出端口的数目和维数。

→设置模块的采样时间。

→分派内存区和sizes数组。

(2) 计算下一个采样点。若用户使用了可变采样时间的模块,在这一阶段需要计算下一个采样点时间,也就是说要计算下一个时间步长。

(3) 计算主时间步的输出量。此调用结束后,所有模块的输出端口对当前的时间步都是有效的。

(4) 更新主时间步的离散状态。

(5) 积分计算。这一步只有当模型带有连续状态或带有非采样过零点时才有效。若S函数带有连续状态,则Simulink以较小的时间步长来调用S函数的输出和微分方法;若S函数具有非采样过零点,Simulink将以较小的时间步来计算S函数的输出和过零点部分。

7.7.3 S函数中的几个概念

S函数中有几个关键的概念需要详细解释,对这几个概念的深入理解对正确使用S函数是非常重要的。

(1) 直接馈入

^

所谓的直接馈入是指模块的输出或采样时间是由它的一个输入端口的值直接控制。判断S函数地输入端口是否有直接馈入的判据有:

→输出函数(mdlOutpits或者flag=3)是一个参数包含u的函数。

→若改S函数是一个可变采样时间的S函数,且下一个采样时间点的计算中要用到输入参数u时,也可以判断此S函数为直接馈入型。

(2) 动态尺寸的输入

S函数可以支持任意维的输入,此时,输入的维数是由输入变量的维数动态确定的。同时,输入变量的维数也决定了连续和离散状态量的个数以及输出变量的维数。

M文件S函数只能有一个输入端口,并且输入端口只能接收一维信号。然而,信号可以是变宽度的。在一个M文件S函数里,为了指定输入的宽度是动态的,可以指定sizes结构的适当区域的值为-1。也可以在S函数调用的时候使用length(u)来确定实际输入的宽度。若指定宽度值为0,则输入端口会从S函数模块中去掉。

例如,图7.7.3所示表示了在同一个模型中使用同一个S函数模块的两种情况,前者的S函数模块是由一个三元素向量驱动,后者则是由一个标量输出模块信号驱动,为了表明S函数函数模块的输入是动态的,两个S函数模块是完全相同的Simulink自适应地使用合适的尺寸来调用函数。类似地,若其它模块属性如输出变量数和状态数也被指定为动态尺寸的,Simulink将会定义这些变量与输入变量同维。

图7.7.3 同一个模型中使用同一个S函数模块的两种情况

(3) 采样时间的设置与采样延迟

M文件S函数和C语言S函数都在指定S函数的运行时间上有高度的自适应度。Simulink为采样时间提供了下面的几种选着。

→连续采样时间:适用于具有连续状态和非采样过零点的S函数。这种S函数的输出按最小时间步改变。

→连续但固定最小步长的采样时间:适用于需要在每一个主仿真时间步执行,但在最小仿真步内值不改变的。

→ 离散采样时间:若S函数得行为发生具有离散时间间隔的函数,用户可以定义一个采样时间来规定Simulink何时调用函数。而且用户还可以定义一个延迟时间offset来延迟采样点,但offset 的值不能超过采样周期。

若用户定义了一个离散采样时间,则Simulink就会在所定义的每个采样点调用S函数的mdlOutpit和mdlUpdate方法。

→可变采样时间:相邻采样点的时间间隔可变得离散采样时间。在这种采样时间的情况下,S 函数要在每一步仿真的开始,计算下一个采样点的时刻。

→继承采样时间:在有些情况下,S函数模块自身没有特定的采样时间,它本身的状态是连续的还是离散的完全取决于系统中的其它模块。此时,该S函数模块的采样时间属性可以设为继承。例如gain模块就是一个继承输入信号采样时间的例子。一般,一个模块可以从以下几个方式来继承采样时间:

◎继承驱动模块的采样时间;

◎ 继承目标模块的采样时间;

◎继承系统中最快的采样时间。

7.7.4 S函数动画

基于S函数地动画就是一个由没有状态函数、没有输出变量的S函数生成的动画。因此它们只能作常规显示。这种S函数有两个主要部分:初始化部分和更新部分。

$

→在初始化过程中要创建图形窗口及动画对象;

→在更新过程中,动画对象的属性将作为S函数模块的输入函数,且它的变化导致动画对象的运动可能会以其它形式变化。

(1) 动画的初始化

S函数动画的初始化语句包括S函数的初始化和图形的初始化。采样时间应设置为较小的数值以便动画可以看起来更加连续。但同时也不能太小,因为那会使得仿真过程运行起来太慢。

首先需要检验与当前S函数模块相联系的动画图形是否已打开。这里使用的方法是将当前模块的路径保存到图形的UserData参数中。此时使用gcd函数是一种比较安全的方法,因为在S函数的执行过程中,gcd总会返回S函数模块的路径。完成此任务的MATLAB命令可为如下形式:if(findobj(‘UserData’,gcb))

% 若模型已经打开,则不作任何事

else

{……} % 初始化图形

end

其中的初始化图形语句可由figure命令实现,例如

'

h_fig=figure(‘Position’,[x_pos,y_pos,width,height]…

然后,将当前S函数模块的路径保存到图形UserData中,这样对图形的存在性检验才会正常工作。下面的语句可以用来设置UserData:

set(h_fig,’UserData’,gcb);

使用MATLAB绘图命令绘制动画图形。接着保存这些图形元素的句柄。例如,要绘制由向量x_array 和y_array定义的曲线,使用下面的语句:

hdl=plot(x_array,y_array);

图形初始化的最后一步是保存这些仿真元素的句柄。这里使用的方法是将这些元素成组地保存到一个MATLAB变量中,并把此变量保存到S函数模块的UserData中。UserData中可以保存MATLAB的任何变量,包括单元数组合结构。假设要绘制两个图形元素的动画,而它们的句柄名分别为hd1和hd2,下面的语句会把它们保存到一个结构中。

=hd1;

=hd2;

set_param(gcd,’UserData’,t_data);

(2) 动画的更新

由于设置采样时间为正数,所以动画S函数可以被看成是离散模块。Simulink将以flag=2在采样时间执行S函数。更新函数会从S函数模块UserData中读取即将改变得图形对象的句柄。例如,如果句柄以结构变量的形式储存,则它们可以写成如下形式。

T_data=get_param(gcd,’UserData’);

hd1=;

hd2=;

然后计算改变得对象属性的新值,并使用set命令更新属性。

Set(handle,propertyName,propertyValue);

其中handle为对象的句柄,propertyName为有即将改变得对象属性的对象名构成的MATLAB 字符串。propertyValue为新的属性值。

例7.7.1 在本例中,将创建一个在半球形槽内往复滚动的圆盘的动画。

分析:假设圆盘在槽内做无滑动的滚动,则系统的运动方程为

其中:, g为重力加速度,的动力学关系为

图7.7.4为此系统运动方程的Simulink模型,它用一个动画S函数模块来显示圆盘运动。

图7.7.4 例的Simulink模型

S函数为一个M文件,其程序代码如下,执行后的动画图形如图7.7.5所示。

function [sys,x0,str,ts] = s_anm81s(t,x,u,flag)

% S-file animation example 1

% This example demonstrates buidling an animation

% using a single S-file with no callbacks.

%

~

% Based on , supplied with SIMULINK

% Copyright (c) 1990-96 by The MathWorks, Inc.

%

switch flag,

case 0, % Initialization

[sys,x0,str,ts]=mdlInitializeSizes;

case 1, % Derivatives

sys=mdlDerivatives(t,x,u);

case 2,

sys=mdlUpdate(t,x,u);

case 3,

sys=mdlOutputs(t,x,u); % Compute output vector

case 4, % Compute time of next sample sys=mdlGetTimeOfNextVarHit(t,x,u);

case 9, % Finished. Do any needed sys=mdlTerminate(t,x,u);

otherwise % Invalid input

error([’Unhandled flag = ’,num2str(flag)]);

end

%********************************************************

%* mdlInitializeSizes *

:

%********************************************************

function [sys,x0,str,ts]=mdlInitializeSizes()

% Return the sizes of the system vectors, initial

% conditions, and the sample times and offets.

sizes = simsizes; % Create the sizes structure

= 0;

= 0;

= 0;

= 1;

= 0;

= 1;

?

sys = simsizes(sizes);

x0 = []; % There are no states

str = []; % str is always an empty matrix

% Update the figure every sec

ts = [ 0]; %initialize the array of sample times.

% Initialize the figure

% The handles of the disk and index mark are stored

% in the block’s UserData.

if(findobj(’UserData’,gcb))

% Figure is open, do nothing

:

else

h_fig = figure(’Position’,[200 200 400 300], ...

’MenuBar’,’none’,’NumberTitle’,’off’, ...

’Resize’,’off’, ...

’Name’,[gcs,’ Rolling Disk’]) ;

set(h_fig,’UserData’,gcb) ; % Save name of current block

% in the figure’s UserData.

% This is used to detect

% that a rolling disk figure

% is already open for the

% current block, so that

(

% only one instance of the

% figure is open at a time

% for a given instance of the

% block.

r = 2 ;

R = 12 ;

q = r ;

thp = 0::pi ;

xp = R*cos(thp);

yp = -R*sin(thp) ;

xp = [xp,-R,-(R+q),-(R+q),(R+q), (R+q),R] ;

]

yp = [yp,0,0,-(R+q),-(R+q),0,0] ;

cl_x = [0,0] ;

cl_y = [0,-R] ;

% Make the disk

thp = 0::*pi ;

xd = r*cos(thp);

yd = r*sin(thp) ;

hd = fill(xp,yp,[,,]); % Draw trough

hold on ; % So it won’t get erased

set(hd,’erasemode’,’none’);

axis(’equal’);axis(’off’);

#

hd0 = plot(cl_x,cl_y,’k--’); % Draw the centerline

set(hd0,’erasemode’,’none’);

% During this initialization pass, create the disk

% (hd2) and the index mark (hd3).

theta = 0 ;

xc = (R-r)*sin(theta); % Find center of disk

yc = - (R-r)*cos(theta) ;

(完整版)MATLAB常用函数大全

一、MATLAB常用的基本数学函数 abs(x):纯量的绝对值或向量的长度 angle(z):复数z的相角(Phase angle) sqrt(x):开平方 real(z):复数z的实部 imag(z):复数z的虚部 conj(z):复数z的共轭复数 round(x):四舍五入至最近整数 fix(x):无论正负,舍去小数至最近整数 floor(x):地板函数,即舍去正小数至最近整数ceil(x):天花板函数,即加入正小数至最近整数rat(x):将实数x化为分数表示 rats(x):将实数x化为多项分数展开 sign(x):符号函数(Signum function)。 当x<0时,sign(x)=-1; 当x=0时,sign(x)=0; 当x>0时,sign(x)=1。 rem(x,y):求x除以y的馀数 gcd(x,y):整数x和y的最大公因数 lcm(x,y):整数x和y的最小公倍数 exp(x):自然指数 pow2(x):2的指数 log(x):以e为底的对数,即自然对数或 log2(x):以2为底的对数 log10(x):以10为底的对数 二、MATLAB常用的三角函数 sin(x):正弦函数 cos(x):余弦函数

tan(x):正切函数 asin(x):反正弦函数 acos(x):反馀弦函数 atan(x):反正切函数 atan2(x,y):四象限的反正切函数 sinh(x):超越正弦函数 cosh(x):超越馀弦函数 tanh(x):超越正切函数 asinh(x):反超越正弦函数 acosh(x):反超越馀弦函数 atanh(x):反超越正切函数 三、适用於向量的常用函数有: min(x): 向量x的元素的最小值 max(x): 向量x的元素的最大值 mean(x): 向量x的元素的平均值 median(x): 向量x的元素的中位数 std(x): 向量x的元素的标准差 diff(x): 向量x的相邻元素的差 sort(x): 对向量x的元素进行排序(Sorting)length(x): 向量x的元素个数 norm(x): 向量x的欧氏(Euclidean)长度sum(x): 向量x的元素总和 prod(x): 向量x的元素总乘积 cumsum(x): 向量x的累计元素总和cumprod(x): 向量x的累计元素总乘积 dot(x, y): 向量x和y的内积 cross(x, y): 向量x和y的外积 四、MATLAB的永久常数

matlab中常见函数功用

⊙在matlab中clear,clc,clf,hold作用介绍 clear是清变量, clc只清屏, clf清除图形窗口上的旧图形, hold on是为了显示多幅图像时,防止新的窗口替代旧的窗口。 ①format:设置输出格式 对浮点性变量,缺省为format short. format并不影响matlab如何计算和存储变量的值。对浮点型变量的计算,即单精度或双精度,按合适的浮点精度进行,而不论变量是如何显示的。对整型变量采用整型数据。整型变量总是根据不同的类(class)以合适的数据位显示,例如,3位数字显示显示int8范围-128:127。 format short, long不影响整型变量的显示。 format long 显示15位双精度,7为单精度(scaled fixed point) format short 显示5位(scaled fixed point format with 5 digits) format short eng 至少5位加3位指数 format long eng 16位加至少3位指数 format hex 十六进制 format bank 2个十进制位 format + 正、负或零 format rat 有理数近似 format short 缺省显示 format long g 对双精度,显示15位定点或浮点格式,对单精度,显示7位定点或浮点格式。 format short g 5位定点或浮点格式 format short e 5位浮点格式 format long e 双精度为15位浮点格式,单精度为7为浮点格式 ②plot函数 基本形式 >> y=[0 0.58 0.70 0.95 0.83 0.25]; >> plot(y) 生成的图形是以序号为横坐标、数组y的数值为纵坐标画出的折线。 >> x=linspace(0,2*pi,30); % 生成一组线性等距的数值 >> y=sin(x); >> plot(x,y) 生成的图形是上30个点连成的光滑的正弦曲线。 多重线 在同一个画面上可以画许多条曲线,只需多给出几个数组,例如 >> x=0:pi/15:2*pi; >> y=sin(x); >> w=cos(x);

matlab各种函数的用法

1 Text函数的用法: 用法 text(x,y,'string')在图形中指定的位置(x,y)上显示字符串string text(x,y,z,'string') 在三维图形空间中的指定位置(x,y,z)上显示字符串string 2, plot([0,z1,z12],'-b','LineWidth',3)[ ]里面表示数组. 3, x,y均为矩阵,plot命令就是画出x,y矩阵对应的二维平面的点形成的曲线。y(:,1)中逗号前是行,逗号后是列,冒号表示从几到几。所以y(:,1)表示第一列的所有元素。如果是y(3:5,1)则表示第一列的第3到第5行对应的元素。只要你的y矩阵有100列,那你当然可以将1改成100。同理,x矩阵也可以这样。 4 sym的意思是symbol,就是后面括号里面是个代数式,要进行符号运算,class()判断对象是什么类型。 5 matlab控制运算精度用的是digits和vpa这两个函数 xs = vpa(x,n) 在n位相对精度下,给出x的数值型符号结果xs xs = vpa(x) 在digits指定的精度下,给出x的数值型符号结果xs

digits用于规定运算精度,比如: digits(20); 这个语句就规定了运算精度是20位有效数字。但并不是规定了就可以使用,因为实际编程中,我们可能有些运算需要控制精度,而有些不需要控制。vpa就用于解决这个问题,凡是用需要控制精度的,我们都对运算表达式使用vpa函数。例如: digits(5); a=vpa(sqrt(2)); 这样a的值就是1.4142,而不是准确的1.4880 又如: digits(5); a=vpa(sqrt(2)); b=sqrt(2); 这样a的值是1.4142,b没有用vpa函数,所以b是1.4880...... 6

matlab随机信号分析常用函数

随机信号分析常用函数及示例 1、熟悉练习使用下列MATLAB函数,给出各个函数的功能说明和内部参数的意 义,并给出至少一个使用例子和运行结果。 rand(): 函数功能:生成均匀分布的伪随机数 使用方法: r = rand(n) 生成n*n的包含标准均匀分布的随机矩阵,其元素在(0,1)内。 rand(m,n)或rand([m,n]) 生成的m*n随机矩阵。 rand(m,n,p,...)或rand([m,n,p,...]) 生成的m*n*p随机矩数组。 rand () 产生一个随机数。 rand(size(A)) 生成与数组A大小相同的随机数组。 r = rand(..., 'double')或r = rand(..., 'single') 返回指定类型的标准随机数,其中double指随机数为双精度浮点数,single 指随机数为单精度浮点数。 例:r=rand(3,4); 运行结果: r= 0.4235 0.4329 0.7604 0.2091 0.5155 0.2259 0.5298 0.3798 0.3340 0.5798 0.6405 0.7833 randn(): 函数功能:生成正态分布伪随机数 使用方法: r = randn(n) 生成n*n的包含标准正态分布的随机矩阵。 randn(m,n)或randn([m,n]) 生成的m*n随机矩阵。 randn(m,n,p,...)或randn([m,n,p,...]) 生成的m*n*p随机矩数组。 randn () 产生一个随机数。 randn(size(A)) 生成与数组A大小相同的随机数组。 r = randn(..., 'double')或r = randn(..., 'single') 返回指定类型的标准随机数,其中double指随机数为双精度浮点数,single 指随机数为单精度浮点数。 例:

matlab函数用法

A a abs 绝对值、模、字符的ASCII码值 acos 反余弦 acosh 反双曲余弦 acot 反余切 acoth 反双曲余切 acsc 反余割 acsch 反双曲余割 align 启动图形对象几何位置排列工具 all 所有元素非零为真 angle 相角 ans 表达式计算结果的缺省变量名 any 所有元素非全零为真 area 面域图 argnames 函数M文件宗量名 asec 反正割 asech 反双曲正割 asin 反正弦 asinh 反双曲正弦 assignin 向变量赋值 atan 反正切 atan2 四象限反正切 atanh 反双曲正切 autumn 红黄调秋色图阵 axes 创建轴对象的低层指令 axis 控制轴刻度和风格的高层指令 B b bar 二维直方图 bar3 三维直方图 bar3h 三维水平直方图 barh 二维水平直方图 base2dec X进制转换为十进制 bin2dec 二进制转换为十进制 blanks 创建空格串 bone 蓝色调黑白色图阵 box 框状坐标轴 break while 或for 环中断指令 brighten 亮度控制 C c

capture (3版以前)捕获当前图形 cart2pol 直角坐标变为极或柱坐标 cart2sph 直角坐标变为球坐标 cat 串接成高维数组 caxis 色标尺刻度 cd 指定当前目录 cdedit 启动用户菜单、控件回调函数设计工具cdf2rdf 复数特征值对角阵转为实数块对角阵ceil 向正无穷取整 cell 创建元胞数组 cell2struct 元胞数组转换为构架数组 celldisp 显示元胞数组内容 cellplot 元胞数组内部结构图示 char 把数值、符号、内联类转换为字符对象chi2cdf 分布累计概率函数 chi2inv 分布逆累计概率函数 chi2pdf 分布概率密度函数 chi2rnd 分布随机数发生器 chol Cholesky分解 clabel 等位线标识 cla 清除当前轴 class 获知对象类别或创建对象 clc 清除指令窗 clear 清除内存变量和函数 clf 清除图对象 clock 时钟 colorcube 三浓淡多彩交叉色图矩阵 colordef 设置色彩缺省值 colormap 色图 colspace 列空间的基 close 关闭指定窗口 colperm 列排序置换向量 comet 彗星状轨迹图 comet3 三维彗星轨迹图 compass 射线图 compose 求复合函数 cond (逆)条件数 condeig 计算特征值、特征向量同时给出条件数condest 范-1条件数估计 conj 复数共轭 contour 等位线 contourf 填色等位线 contour3 三维等位线

自动控制常见MATLAB函数的应用

自动控制常见MATLAB 函数的应用 1、在matlab 中采用roots 函数求解多项式的根,采用conv 函数实 现多项式的积,相互连接的模块的模型求解也相当简单(1)、串联连接命令G=G1*G2(2)、并联连接命令G=G 1±G2(3)、反馈连接命令G=feedback (G1,G2,Sign )(sign 用来表示系统是正反馈或负反馈,sign=-1为负反馈) 例如:① 程序如下: >>p=[1304]; >>roots(p) ans = -3.3553 0.1777+1.0773i 0.1777-1.0773i ②、用matlab 实现: 程序如下: >>p=[321];q=[14]; >>n=conv(p,q) n = 31494③、一个传递函数模型,可以由下面的命令输入:32()34p s s s =++2 ()(321)(4)n s s s s =+++325()345 s G s s s s +=+++

>>num=[15];den=[1345]; >>G=tf(num,den) Transfer function: s +5 --------------------- s^3+3s^2+4s +5 ④、如下图所示,前向传递函数为G (S ) ,反馈回路传递函数为H(S),利用feedback 计算系统的闭环传递函数 程序如下: >>numg=[1];deng=[50000]; >>numh=[11];denh=[12]; >>[num,den]=feedback(numg,deng,numb,denh,-1); >>[num,den]=feedback(numg,deng,numh,denh,-1); >>G=tf(num,den) () R S ???→

MATLAB各种“窗函数”定义及调用

MATLAB窗函数大全 1.矩形窗(Rectangle Window)调用格式:w=boxcar(n),根据长度n 产生一个矩形窗w。 2.三角窗(Triangular Window)调用格式:w=triang(n),根据长度n 产生一个三角窗w。 3.汉宁窗(Hanning Window)调用格式:w=hanning(n),根据长度n 产生一个汉宁窗w。 4.海明窗(Hamming Window)调用格式:w=hamming(n),根据长度n 产生一个海明窗w。 5.布拉克曼窗(Blackman Window)调用格式:w=blackman(n),根据长度n 产生一个布拉克曼窗w。 6.恺撒窗(Kaiser Window)调用格式:w=kaiser(n,beta),根据长度n 和影响窗函数旁瓣的β参数产生一个恺撒窗w。 窗函数: 1.矩形窗:利用w=boxcar(n)的形式得到窗函数,其中n为窗函数的长度,而返回值w为一个n阶的向量,它的元素由窗函数的值组成。‘w=boxcar(n)’等价于‘w=ones(1,n)’. 2.三角窗:利用w=triang(n)的形式得到窗函数,其中n为窗函数的长度,而返回值w为一个n阶的向量,它的元素由窗函数的值组成。 w=triang(N-2)等价于bartlett(N)。

3.汉宁窗:利用w=hanning(n)得到窗函数,其中n为窗函数的长度,而返回值w 为一个n 阶的向量,包含了窗函数的n个系数。 4.海明窗:利用w=hamming(n)得到窗函数,其中n为窗函数的长度,而返回值w 为一个n 阶的向量,包含了窗函数的n个系数。它和汉宁窗的主瓣宽度相同,但是它的旁瓣进一步被压低。 5.布拉克曼窗:利用w=blackman(n)得到窗函数,其中n为窗函数的长度,而返回值w为一个n阶的向量,包含了窗函数的n个系数。它的主瓣宽度是矩形窗主瓣宽度的3倍,为12*pi/N,但是它的最大旁瓣值比主瓣值低57dB。 6.切比雪夫窗:它是等波纹的,利用函数w=chebwin(N,R)方式设计出N阶的切比雪夫2窗函数,函数的主瓣值比旁瓣值高RdB,且旁瓣是等波纹的。 7.巴特里特窗:利用w=bartlett(n)的形式得到窗函数,其中n为窗函数的长度,而返回值w为一个n阶的向量,包含了窗函数的n个系数。 8.凯塞窗:利用w=kaiser(n,beta)的形式得到窗函数。

matlab 常用函数汇总

matlab 常用函数汇总 编程2008-07-10 21:45:20 阅读46 评论0 字号:大中小订阅matlab常用函数 图形注释 Title 图形标题 Xlabel X轴标记 Ylabel Y轴标记 Text 文本注释 Gtext 用鼠标放置文本 Grid 网格线 MATLAB编程语言 Function 增加新的函数 Eval 执行由MA TLAB表达式构成的字串 Feval 执行由字串指定的函数 Global 定义全局变量 程序控制流 If 条件执行语句 Else 与if命令配合使用 Elseif 与if命令配合使用 End For,while和if语句的结束 For 重复执行指定次数(循环) While 重复执行不定次数(循环) Break 终止循环的执行 Return 返回引用的函数 Error 显示信息并终止函数的执行 交互输入 Input 提示用户输入 Keyboard 像底稿文件一样使用键盘输入 Menu 产生由用户输入选择的菜单 Pause 等待用户响应 Uimenu 建立用户界面菜单 Uicontrol 建立用户界面控制 一般字符串函数 Strings MATLAB中有关字符串函数的说明 Abs 变字符串为数值 Setstr 变数值为字符串 Isstr 当变量为字符串时其值为真 Blanks 空串 Deblank 删除尾部的空串 Str2mat 从各个字符串中形成文本矩阵 Eval 执行由MA TLAB表达式组成的串 字符串比较 Strcmp , , , 比较字符串 Findstr 在一字符串中查找另一个子串

Upper 变字符串为大写 Lower 变字符串为小写 Isletter 当变量为字母时,其值为真 Isspace 当变量为空白字符时,其值为真 字符串与数值之间变换 Num2str 变数值为字符串 Int2str 变整数为字符串 Str2num 变字符串为数值 Sprintf 变数值为格式控制下的字符串 Sscanf 变字符串为格式控制下的数值 十进制与十六进制数之间变换 Hex2num 变十六进制为IEEE标准下的浮点数Hex2dec 变十六制数为十进制数 Dec2hex 变十进制数为十六进制数 建模 Append 追加系统动态特性 Augstate 变量状态作为输出 Blkbuild 从方框图中构造状态空间系统Cloop 系统的闭环 Connect 方框图建模 Conv 两个多项式的卷积 Destim 从增益矩阵中形成离散状态估计器Dreg 从增益矩阵中形成离散控制器和估计器Drmodel 产生随机离散模型 Estim 从增益矩阵中形成连续状态估计器Feedback 反馈系统连接 Ord2 产生二阶系统的A、B、C、D Pade 时延的Pade近似 Parallel 并行系统连接 Reg 从增益矩阵中形成连续控制器和估计器Rmodel 产生随机连续模型 Series 串行系统连接 Ssdelete 从模型中删除输入、输出或状态ssselect 从大系统中选择子系统 模型变换 C2d 变连续系统为离散系统 C2dm 利用指定方法变连续为离散系统 C2dt 带一延时变连续为离散系统 D2c 变离散为连续系统 D2cm 利用指定方法变离散为连续系统 Poly 变根值表示为多项式表示 Residue 部分分式展开 Ss2tf 变状态空间表示为传递函数表示 Ss2zp 变状态空间表示为零极点表示

Matlab中的函数

abs 绝对值、模、字符的ASCII码值? acos 反余弦? acosh 反双曲余弦? acot 反余切? acoth 反双曲余切? acsc 反余割? acsch 反双曲余割? align 启动图形对象几何位置排列工具? all 所有元素非零为真? angle 相角? ans 表达式计算结果的缺省变量名? any 所有元素非全零为真? area 面域图? argnames 函数M文件宗量名? asec 反正割? asech 反双曲正割? asin 反正弦? asinh 反双曲正弦? assignin 向变量赋值? atan 反正切? atan2 四象限反正切? atanh 反双曲正切? autumn 红黄调秋色图阵? axes 创建轴对象的低层指令? axis 控制轴刻度和风格的高层指令? B b? bar 二维直方图? bar3 三维直方图? bar3h 三维水平直方图? barh 二维水平直方图? base2dec X进制转换为十进制? bin2dec 二进制转换为十进制? blanks 创建空格串? bone 蓝色调黑白色图阵? box 框状坐标轴?

break while 或for 环中断指令? brighten 亮度控制? C c? capture (3版以前)捕获当前图形? cart2pol 直角坐标变为极或柱坐标? cart2sph 直角坐标变为球坐标? cat 串接成高维数组? caxis 色标尺刻度? cd 指定当前目录? cdedit 启动用户菜单、控件回调函数设计工具? cdf2rdf 复数特征值对角阵转为实数块对角阵? ceil 向正无穷取整? cell 创建元胞数组? cell2struct 元胞数组转换为构架数组? celldisp 显示元胞数组内容? cellplot 元胞数组内部结构图示? char 把数值、符号、内联类转换为字符对象? chi2cdf 分布累计概率函数? chi2inv 分布逆累计概率函数? chi2pdf 分布概率密度函数? chi2rnd 分布随机数发生器? chol Cholesky分解? clabel 等位线标识? cla 清除当前轴? class 获知对象类别或创建对象? clc 清除指令窗? clear 清除内存变量和函数? clf 清除图对象? clock 时钟? colorcube 三浓淡多彩交叉色图矩阵? colordef 设置色彩缺省值? colormap 色图? colspace 列空间的基? close 关闭指定窗口? colperm 列排序置换向量?

MATLAB各种随机函数生成器

2009年03月20日星期五 03:25 P.M. rand(n):生成0到1之间的n阶随机数方阵 rand(m,n):生成0到1之间的m×n 的随机数矩阵 (现成的函数) 另外: Matlab随机数生成函数 betarnd 贝塔分布的随机数生成器 binornd 二项分布的随机数生成器 chi2rnd 卡方分布的随机数生成器 exprnd 指数分布的随机数生成器 frnd f分布的随机数生成器 gamrnd 伽玛分布的随机数生成器 geornd 几何分布的随机数生成器 hygernd 超几何分布的随机数生成器 lognrnd 对数正态分布的随机数生成器 nbinrnd 负二项分布的随机数生成器 ncfrnd 非中心f分布的随机数生成器 nctrnd 非中心t分布的随机数生成器 ncx2rnd 非中心卡方分布的随机数生成器 normrnd 正态(高斯)分布的随机数生成器 poissrnd 泊松分布的随机数生成器 raylrnd 瑞利分布的随机数生成器 trnd 学生氏t分布的随机数生成器 unidrnd 离散均匀分布的随机数生成器 unifrnd 连续均匀分布的随机数生成器 weibrnd 威布尔分布的随机数生成器 (From:https://www.doczj.com/doc/a812777292.html,/question/30033707.html) matlab生成随机数据 matlab本身提供很多的函数来生成各种各样的随机数据: normrnd 可以生成一定均值和标准差的正态分布 gamrnd 可以生成gamma分布的伪随机数矩阵 chi2rnd 可以生成卡方分布的伪随机数矩阵 trnd 可以生成t分布的伪随机数矩阵 frnd 可以生成f分布的伪随机数矩阵 raylrnd 可以生成rayleigh分布的伪随机数矩阵

matlab中所有函数解析_太全了

A a abs 绝对值, 模 acos 反余弦 acosh 反双曲余弦 acot 反余切 acoth 反双曲余切 acsc 反余割 acsch 反双曲余割 all 所有元素均非零则为真alpha 透明控制 angle 相角 ans 最新表达式的运算结果any 有非零元则为真 area 面域图 asec 反正割 asech 反双曲正割 asin 反正弦 asinh 反双曲正弦 atan 反正切 atan2 四象限反正切 atanh 反双曲正切 autumn 红、黄浓淡色 axis 轴的刻度和表现 B b bar 直方图 binocdf 二项分布概率 binopdf 二项分布累积概率binornd 产生二项分布随机数组blanks 空格符号 bode 给出系统的对数频率曲线bone 蓝色调浓淡色阵 box 坐标封闭开关 break 终止最内循环brighten 控制色彩的明暗 butter ButterWorth低通滤波器 C c caxis (伪)颜色轴刻度 cd 设置当前工作目录 cdf2rdf 复数对角型转换到实块对角型 ceil 朝正无穷大方向取整 cell 创建单元数组 char 创建字符串数组或者将其他类型 变量转化为字符串数组 charfcn Maple函数 Children 图形对象的子对象 clabel 等高线标注 class 判别数据类别 clc 清除指令窗中显示内容 clear 从内存中清除变量和函数 clf 清除当前图形窗图形 close 关闭图形窗 collect 合并同类项 Color 图形对象色彩属性 colorbar 显示色条 colorcube 三浓淡多彩交错色 colordef 定义图形窗色彩 colormap 设置色图 comet 彗星状轨迹图 comet3 三维彗星动态轨迹线图compass 射线图;主用于方向和速度 cond 矩阵条件数 conj 复数共轭 continue 将控制转交给外层的for或while 循环 contour 等高线图

(完整版)matlab函数大全最完整版

MATLAB函数大全 Matlab有没有求矩阵行数/列数/维数的函数? ndims(A)返回A的维数 size(A)返回A各个维的最大元素个数 length(A)返回max(size(A)) [m,n]=size(A)如果A是二维数组,返回行数和列数nnz(A)返回A中非0元素的个数 MATLAB的取整函数:fix(x), floor(x) :,ceil(x) , round(x) (1)fix(x) : 截尾取整. >> fix( [3.12 -3.12]) ans = 3 -3 (2)floor(x):不超过x 的最大整数.(高斯取整) >> floor( [3.12 -3.12]) ans =

3 -4 (3)ceil(x) : 大于x 的最小整数>> ceil( [3.12 -3.12]) ans = 4 -3 (4)四舍五入取整 >> round(3.12 -3.12) ans = >> round([3.12 -3.12]) ans =

3 -3 >> 如何用matlab生成随机数函数 rand(1) rand(n):生成0到1之间的n阶随机数方阵rand(m,n):生成0到1之间的m×n的随机数矩阵(现成的函数) 另外: Matlab随机数生成函数 betarnd 贝塔分布的随机数生成器 binornd 二项分布的随机数生成器 chi2rnd 卡方分布的随机数生成器 exprnd 指数分布的随机数生成器 frnd f分布的随机数生成器 gamrnd 伽玛分布的随机数生成器 geornd 几何分布的随机数生成器 hygernd 超几何分布的随机数生成器

Matlab的常用函数及指令简单介绍

摘要本文从计算机语言、数学建模、网络控制系统仿真与结构化思维等方面阐述了半年来学习Matlab的心得体会与感想。由于个人知识有限在部分细节问题的理解上可能存有偏差还请老师批评指正不吝赐教。关键词Matlab语言数学建模软件网络控制系统仿真 结构化思维 - 1 - 学习Matlab快半个学期了虽然还有很多问题不是很清楚但通过实践学习我对于Matlab总算有个整体的理解而且每次上机操作都会有一定的收获和感想下面就谈谈我个人对于Matlab的一些看法。 Matlab语言 Matlab和其它语言不一样我这个学期学习的是C语言另外对于Action Script、HTML、php语言也接触过一些。C语言主要是面向过程的它的灵活性比较强可根据自己的意图编辑程序但所耗费的时间和精力比较大。例如定义变量就分为int、float、char等类型十分麻烦而Action Script与php就显得比较随意不必纠结于哪一种类型的变量比如定义Var number3Var playtrue即可。相对于前两者而言Matlab则显得更为灵活与快捷它是一门解释性语言能自动将高级语言翻译成机器语言。比如求tf2当t012345时tf的值。如果使用C语言则需要定义变量调用math函数还要应用for循环、输出函数而Matlab则不然只需输入t0:5f2.t然后回车即可。另外Matlab还配有许多常用公式操作起来十分方便例如想求出223tftftytyty在10y10y时的零输入响应应用dsolve 函数只需输入xdsolveD2y3Dy2y0y01Dy01 回车即得结果x3exp-t-2exp-2t。或许也正是Matlab语言简洁、优化的特点才使得它在学术界被广泛应用吧。 数学建模 对于数学建模而言Matlab是一款相当不错的建模辅助工具因为Matlab中有统计函数线性分析函数插值函数非线性分析函数等等这些数模必备的函数而且Matlab强大的绘图功能可使很多数学演算过程变得可视化。这些对于分析问题都很有帮助。虽然我们学习的Matlab是电子信息工程方向的但在下个学期班里的大部分同学都要参加数模竞赛

MATLAB中常用的函数

[转]MATLAB 主要函数(一) (2008-05-11 17:09:43) 转载 标签: 分类:IT matlab 函数 杂谈 MATLAB主要函数指令表(按功能分类)原贴地址:https://www.doczj.com/doc/a812777292.html,/casularm/archive/2007/04/20/1572638.aspx 1常用指令(General Purpose Commands) 1.1通用信息查询(General information) demo 演示程序 help 在线帮助指令 helpbrowser 超文本文档帮助信息 helpdesk 超文本文档帮助信息 helpwin 打开在线帮助窗 info MATLAB 和MathWorks 公司的信息 subscribe MATLAB 用户注册 ver MATLAB 和TOOLBOX 的版本信息 version MATLAB 版本 whatsnew 显示版本新特征 1.2工作空间管理(Managing the workspace) clear 从内存中清除变量和函数 exit 关闭MATLAB load 从磁盘中调入数据变量 pack 合并工作内存中的碎块 quit 退出MATLAB save 把内存变量存入磁盘 who 列出工作内存中的变量名

whos 列出工作内存中的变量细节 workspace 工作内存浏览器 1.3管理指令和函数(Managing commands and functions) edit 矩阵编辑器 edit 打开M 文件 inmem 查看内存中的P 码文件 mex 创建MEX 文件 open 打开文件 pcode 生成P 码文件 type 显示文件内容 what 列出当前目录上的M、MAT、MEX 文件 which 确定指定函数和文件的位置 1.4搜索路径的管理(Managing the seach patli) addpath 添加搜索路径 rmpath 从搜索路径中删除目录 path 控制MATLAB 的搜索路径 pathtool 修改搜索路径 1.5指令窗控制(Controlling the command window) beep 产生beep 声 echo 显示命令文件指令的切换开关 diary 储存MATLAB 指令窗操作内容 format 设置数据输出格式 more 命令窗口分页输出的控制开关 1.6操作系统指令(Operating system commands) cd 改变当前工作目录 computer 计算机类型 copyfile 文件拷贝 delete 删除文件 dir 列出的文件 dos 执行dos 指令并返还结果

Matlab中的randperm和randsample函数用法对比

Matlab中的randperm和randsample函数用法对比 构建替代数据的时候,一种常见的思路是打乱原数据的排列次序,通过随机置换原数据的排列次序从而产生和原数据系列统计特征(如均值、方差、分布)一致的随机数据。具体到Matlab中,此思路的实现会涉及到两个命令:randperm和randsample p.s. 相关的重新排序命令还包括: 1 2 3 4 5 6 7 8 9 Reordering Algorithms amd Approximate minimum degree permutation colamd Column approximate minimum degree permutation colperm Sparse column permutation based on nonzero count dmperm Dulmage-Mendelsohn decomposition ldl Block LDL' factorization for Hermitian indefinite matrices randperm Random permutation symamd Symmetric approximate minimum degree permutation symrcm Sparse reverse Cuthill-McKee ordering 1、RANDPERM 根据Matlab文档,randperm最常用的用法是是返回一个从1-n的包含n个数的随机排列(每个数字只出现一次)——以行向量的形式 1 p = randperm(n) returns a row vector containing a random permutation of the integers from 1 to n inclusive 如果希望从1-n的数字序列里面随机返回k个数,则可以使用 1 p = randperm(n,k) 其中,这k个数之间彼此也是不相同的。可见,randperm能够产生不重复的随机排列,结合原数据, 可写成类似下面的形式: 1 new = old( randperm( size(old,1) ) , : ); 这样新数组中的各行就被重排了。如果各列也需要重排,则可以嵌套使用。 Matlab文档中还说,randperm完成的是不重复的重排采样(k-permutations),如果结果中的数需要 重复多次出现的情况,则可以用: 1 randi(n,1,k) randperm和rand、randi、randn一样,其随机数的生成是收到rng命令控制的,因此,可通过该命令影响随机数据流rand stream的情况。 2、RANDSAMPLE randsample的命令组合比randperm要复杂,事实上这个命令内部也有对randperm的调用。因此,在适当的情况下,使用randperm的速度理论上比randsample快。(事实上也快很多) randsample的命令格式: 1 2 3 4 5 6 y = randsample(n,k) y = randsample(population,k) y = randsample(n,k,replacement) y = randsample(population,k,replacement) y = randsample(n,k,true,w) y = randsample(population,k,true,w)

Matlab自定义函数的五种方法

Matlab自定义函数的五种方法 [转] n 1、函数文件+调用命令文件:需单独定义一个自定义函数的M文件; n 2、函数文件+子函数:定义一个具有多个自定义函数的M文件; n 3、Inline:无需M文件,直接定义; n 4、Syms+subs: 无需M文件,直接定义; n 5、字符串+subs:无需M文件,直接定义. 1、函数文件+调用函数文件:定义多个M文件: % 调用函数文件:myfile.m clear clc for t=1:10 y=mylfg(t); fprintf(‘%4d^(1/3)=%6.4f\n’,t,y); end %自定义函数文件: mylfg.m function y=mylfg(x) %注意:函数名(mylfg)必须与文件名(mylfg.m)一致 Y=x^(1/3); 注:这种方法要求自定义函数必须单独写一个M文件,不能与调用的命令文件写在同一个M文件中。 2、函数文件+子函数:定义一个具有多个子函数的M 文件

%命令文件:funtry2.m function []=funtry2() for t=1:10 y=lfg2(t) fprintf(‘%4d^(1/3)=%6.4f\n’); End function y=lfg2(x) Y= x^(1/3); %注:自定义函数文件funtry2.m中可以定义多个子函数function。子函数lfg2只能被主函数和主函数中的其他子函数调用。 3、Inline:无需M文件,直接定义; %inline命令用来定义一个内联函数:f=inline(‘函数表达式’, ‘变量1’,’变量2’,……)。 调用方式:y=f(数值列表) %注意:代入的数值列表顺序应与inline()定义的变量名顺序一致。 例如: f=inline(‘x^2+y’,’x’,’y’); z=f(2,3) Ans=7 注:这种函数定义方式是将它作为一个内部函数调用。特点是,它是基于Matlab 的数值运算内核的,所以它的运算速度较快,程序效率更高。缺点是,该方法只能对数值进行代入,不支持符号代入,且对定义后的函数不能进行求导等符号运算。 例: Clear Clc

MatLab常用函数大全

1、求组合数 C,则输入: 求k n nchoosek(n,k) 例:nchoosek(4,2) = 6. 2、求阶乘 求n!.则输入: Factorial(n). 例:factorial(5) = 120. 3、求全排列 perms(x). 例:求x = [1,2,3]; Perms(x),输出结果为: ans = 3 2 1 3 1 2 2 3 1 2 1 3 1 2 3 1 3 2 4、求指数 求a^b:Power(a,b) ; 例:求2^3 ; Ans = pow(2,3) ; 5、求行列式 求矩阵A的行列式:det(A); 例:A=[1 2;3 4] ; 则det(A) = -2 ; 6、求矩阵的转置 求矩阵A的转置矩阵:A’ 转置符号为单引号. 7、求向量的指数 求向量p=[1 2 3 4]'的三次方:p.^3 例: p=[1 2 3 4]' A=[p,p.^2,p.^3,p.^4] 结果为:

注意:在p 与符号”^”之间的”.”不可少. 8、求自然对数 求ln(x):Log(x) 例:log(2) = 0.6931 9、求矩阵的逆矩阵 求矩阵A 的逆矩阵:inv(A) 例:a= [1 2;3 4]; 则 10、多项式的乘法运算 函数conv(p1,p2)用于求多项式p1和p2的乘积。这里,p1、p2是两个多项式系数向量。 例2-2 求多项式43810x x +-和223x x -+的乘积。 命令如下: p1=[1,8,0,0,-10]; p2=[2,-1,3]; c=conv(p1,p2) 11、多项式除法 函数[q ,r]=deconv(p1,p2)用于多项式p1和p2作除法运算,其中q 返回多项式p1除以p2的商式,r 返回p1除以p2的余式。这里,q 和r 仍是多项式系数向量。 例2-3 求多项式43810x x +-除以多项式223x x -+的结果。 命令如下: p1=[1,8,0,0,-10]; p2=[2,-1,3]; [q,r]=deconv(p1,p2) 12、求一个向量的最大值 求一个向量x 的最大值的函数有两种调用格式,分别是:

Matlab中常用的函数集

sort (排序) xlsread ( exl文件导入) load (txt 文件,mat文件等导入) 附录Ⅰ工具箱函数汇总 Ⅰ.1 统计工具箱函数 表Ⅰ-1 概率密度函数 函数名对应分布的概率密度函数 betapdf 贝塔分布的概率密度函数 binopdf 二项分布的概率密度函数 chi2pdf 卡方分布的概率密度函数 exppdf 指数分布的概率密度函数 fpdf f分布的概率密度函数 gampdf 伽玛分布的概率密度函数 geopdf 几何分布的概率密度函数 hygepdf 超几何分布的概率密度函数normpdf 正态(高斯)分布的概率密度函数lognpdf 对数正态分布的概率密度函数nbinpdf 负二项分布的概率密度函数 ncfpdf 非中心f分布的概率密度函数nctpdf 非中心t分布的概率密度函数 ncx2pdf 非中心卡方分布的概率密度函数poisspdf 泊松分布的概率密度函数 raylpdf 雷利分布的概率密度函数 tpdf 学生氏t分布的概率密度函数unidpdf 离散均匀分布的概率密度函数unifpdf 连续均匀分布的概率密度函数weibpdf 威布尔分布的概率密度函数 表Ⅰ-2 累加分布函数 函数名对应分布的累加函数 betacdf 贝塔分布的累加函数 binocdf 二项分布的累加函数 chi2cdf 卡方分布的累加函数 expcdf 指数分布的累加函数 fcdf f分布的累加函数 gamcdf 伽玛分布的累加函数 geocdf 几何分布的累加函数 hygecdf 超几何分布的累加函数

logncdf 对数正态分布的累加函数 nbincdf 负二项分布的累加函数 ncfcdf 非中心f分布的累加函数 nctcdf 非中心t分布的累加函数 ncx2cdf 非中心卡方分布的累加函数 normcdf 正态(高斯)分布的累加函数 poisscdf 泊松分布的累加函数 raylcdf 雷利分布的累加函数 tcdf 学生氏t分布的累加函数 unidcdf 离散均匀分布的累加函数 unifcdf 连续均匀分布的累加函数 weibcdf 威布尔分布的累加函数 表Ⅰ-3 累加分布函数的逆函数 函数名对应分布的累加分布函数逆函数 betainv 贝塔分布的累加分布函数逆函数 binoinv 二项分布的累加分布函数逆函数 chi2inv 卡方分布的累加分布函数逆函数 expinv 指数分布的累加分布函数逆函数 finv f分布的累加分布函数逆函数 gaminv 伽玛分布的累加分布函数逆函数 geoinv 几何分布的累加分布函数逆函数hygeinv 超几何分布的累加分布函数逆函数logninv 对数正态分布的累加分布函数逆函数nbininv 负二项分布的累加分布函数逆函数ncfinv 非中心f分布的累加分布函数逆函数nctinv 非中心t分布的累加分布函数逆函数 ncx2inv 非中心卡方分布的累加分布函数逆函数icdf norminv 正态(高斯)分布的累加分布函数逆函数poissinv 泊松分布的累加分布函数逆函数 raylinv 雷利分布的累加分布函数逆函数 tinv 学生氏t分布的累加分布函数逆函数unidinv 离散均匀分布的累加分布函数逆函数unifinv 连续均匀分布的累加分布函数逆函数weibinv 威布尔分布的累加分布函数逆函数 表Ⅰ-4 随机数生成器函数

相关主题
文本预览
相关文档 最新文档