matlab中的rand函数

matlab中的rand函数
matlab中的rand函数

matlab中的rand函数

matlab中的rand函数(用于产生随机数)

均匀分布的随机数或矩阵

语法

Y = rand(n)

Y = rand(m,n)

Y = rand([m n])

Y = rand(m,n,p,...)

Y = rand([m n p...])

Y = rand(size(A))

rand

s = rand('state')

描述

rand函数产生由在(0, 1)之间均匀分布的随机数组成的数组。

Y = rand(n) 返回一个n x n的随机矩阵。如果n不是数量,则返回错误信息。

Y = rand(m,n) 或Y = rand([m n]) 返回一个m x n的随机矩阵。

Y = rand(m,n,p,...) 或Y = rand([m n p...]) 产生随机数组。

Y = rand(size(A)) 返回一个和A有相同尺寸的随机矩阵。

1,rand(3)*-2 rand(3)是一个3*3的随机矩阵(数值范围在0~1之间)

然后就是每个数乘上-2

2 ,用matlab随机产生60个1到365之间的正数1+fix(365*rand(1,60));3,用rand函数随机取100个从-1到1的数x1,x2,...,x = rand(1,100) * 2 - 1

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中的自定义函数与调用

Matlab自定义函数 1、函数文件+调用命令文件:需单独定义一个自定义函数的M文件; 2、函数文件+子函数:定义一个具有多个自定义函数的M文件; 3、Inline:无需M文件,直接定义; 4、Syms+subs:无需M文件,直接定义; 5、字符串+subs:无需M文件,直接定义. 6、匿名函数 7、直接通过@符号定义. 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',t,y); 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的数值运算内核的,所以它的运算速度较快,程序效率更高。缺点是,该方法只能对数值进行代入,不支持符号代入,且对定义后的函数不能进行求导等符号运算。 内联函数定义方式是将f作为一个内部函数调用。其特点是:调用方式最接近于我们平时对函数的定义,使程序更具可读性。同时由于它是基于Matlab的数值计算内核的,所以它的运算速度较快,程序更有效率。 这种定义方式的缺点: 定义一个内联函数用去的内存空间比相同条件下其他的方法要大得多。 该方法只能对数值进行代入,不支持符号代入,并且对于定义后的函数不能进行求导等符号运算。 例:通过命令clear清除工作空间的所有变量后,执行如下指令 Clear Clc f=’x^2’; Syms x g; g=x^2; h=inline(‘x^2’,’x’); whos 4、Syms+subs:无需M文件,直接定义; 用syms定义一个符号表达式,用subs调用: Syms f x%定义符号 f=1/(1+x^2);%定义符号表达式也是符号

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中s-function的参数设置,初始化设置,中文介绍,例子详细

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)是偏移量。 下面结合sfuntmpl.m中的代码来讲具体的结构: switch flag, %判断flag,看当前处于哪个状态 case 0, [sys,x0,str,ts]=mdlInitializeSizes; flag=0表示处于初始化状态,此时用函数mdlInitializeSizes进行初始化,此函数在 sfuntmpl.m的149行 我们找到他,在初始化状态下,sys是一个结构体,用它来设置模块的一些参数,各个参数详细说明如下 size = simsizes;%用于设置模块参数的结构体用simsizes来生成 sizes.NumContStates = 0;%模块连续状态变量的个数 sizes.NumDiscStates = 0;%模块离散状态变量的个数 sizes.NumOutputs = 0;%模块输出变量的个数 sizes.NumInputs = 0;%模块输入变量的个数 sizes.DirFeedthrough = 1;%模块是否存在直接贯通(直接贯通我的理解是输入能 %直接控制输出) sizes.NumSampleTimes = 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个,我们就只需改上面那一段代码为:

MATLAB中S函数编辑流程及相关

S函数编辑流程及相关 1. S函数模板编辑环境进入: 在MA TLAB主界面中直接输入:edit sfuntmpl 即可弹出S函数模板编辑的M文件环境,修改即可。 在MA TLAB主界面中直接输入:sfundemos,即可调出S 函数的许多编程例子。 2. S函数模板的相关基础: 1)M文件S函数的引导语句为: t x f p u sys Function [p x str ts flag , ,1 2 ,...) , , ,0 , ] ,( , S函数默认的四个输入参数:t ,x ,u ,flag S函数默认的四个输出函数:sys ,x0 ,str ,ts 各个参数的含义如下: T :代表当前的仿真时间,该输入决定了下一个采样时间; X :表示状态向量,行向量,引用格式:X(1),X(2) U :表示输入向量; Flag :控制在每一个仿真阶段调用哪一个子函数的参数,由SIMULINK在调用时自动取值; Sys :通用的返回变量,返回的数值决定Flag值,mdlUpdates 里:列向量,引用格式:Sys(1,1),Sys(2,1);mdlOutputs里:行向量,引用格式:Sys =x. X0 :初始的状态值;列向量,引用格式:X0=[ 0;0;0 ]

Str :空矩阵,无具体含义; Ts :包含模块采样时间和偏差的矩阵。[period, offset] 当Ts为-1时,表示与输入信号同采样周期。 2)S函数工作方式: Flag = 0时,调用mdlInitializeSizes函数,定义S函数的基本特性,包括采样时间,连续或者离散状态的初始条件和Sizes 数组; Flag = 1时,调用mdlDerivatives函数,计算连续状态变量的微分方程;求所给表达式的等号左边状态变量的积分值的过程。 Flag = 2时,调用mdlUpdate函数,用于更新离散状态,采样时间和主时间步的要求; Flag = 3时,调用mdlOutputs函数,计算S函数的输出; Flag = 4时,调用mdlGetTimeOfNextV arHit函数,计算下一个采样点的绝对时间,这个方法仅仅是使用户在mdlInitializeSize 里说明一个可变的离散采样时间; Flag = 9时,调用mdlTerminate函数,实现仿真任务的结束。 3)S函数仿真过程: ①初始化:mdlInitializeSizes,初始化S函数 ●初始化SimStruct,包含了S函数的所有信息; ●设置输入、输出端口数; ●设置采样时间; ●分配存储空间。

MATLAB_M文件与M函数

M文件与M函数 Matlab输入命令的常用方式有两种:一种是直接在Matlab的命令窗门中逐条输入Matlab 命令;二是m文件工作方式。当命令行很简单时,使用逐条输入方式还是比较方便的。但当命令行很多时(比如说几十行乃至全成百上千行命令),显然再使用这种方式输入MATLAB 命令,就会显得杂乱无章,不易于把握程序的具体走向,并且给程序的修改和维护带来了很大的麻烦。这时,建议采用Matlab命令的第二种输入形式m文件工作方式。 m文件工作方式,指的是将要执行的命令全部写在一个文本文件中,这样既能使程序显得简洁明了,又便于对程序的修改与维护。m文件直接采用Matlab命令编写,就像在Matlab 的命令窗口直接输入命令一样,因此调试起来也十分方便,并且增强了程序的交互性。 m文件与其他文本文件一样,可以在任何文本编辑器中进打编辑、存储、修改和读取。利用m文件还可以根据白己的需要编写一些函数,这些函数也可以橡Matlab提供的函数一样进行调用。从某种意义上说,这也是对MATLAB的二次开发。 m文件有两种形式:一种是命令方式或称脚本方式;另一种就是函数文件形式。两种形式的文件扩展名均是.m。 1、M文件 当遇到输入命令较多以及要重复输入命令的情况时,利用命令文件就显得很方便了。将所有要执行的命令按顺序放到一个扩展名为.m的文本文件中,每次运行时只需在MATLAB 的命令窗口输入m文件的文件名就可以了。需要注意的是,m文件最好直接放在Matlab 的默认搜索路径下(一般是Matlab安装目录的子目录work中),这样就不用设置m文件的路径了,否则应当用路径操作指令path重新设置路径。另外,m文件名不应该与Matlab的内置函数名以及工具箱中的函数重名,以免发生执行错误命令的现象。Matlab对命令文件的执行等价于从命令窗口中顺序执行文件中的所有指令。命令文件可以访问Matlab工作空间里的任何变量及数据。命令文件运行过程中产生的所有变量都等价于从Matlab工作空间中创建这些变量。因此,任何其他命令文件和函数都可以自由地访问这些变量。这些变量一旦产生就一直保存在内存中,只有对它们重新赋值,它们的原有值才会变化。关机后,这里变量也就全部消失了。另外,在命令窗口中运行clear命令,也可以把这些变量从工作空间中删去。当然,在Matlab的工作空间窗口中也可以用鼠标选择想要删除的变量,从而将这些变量从工作空间中删除。 接下来,编写一个名为test.m的命令文件,用来计算矩阵1到100的和,并把它放到变量s中。 第一步创建新的M-文件。在Matlab主菜单上选择菜单命令File→New→M-File

利用matlab编写S函数求解微分方程

利用matlab编写S函数求解微分方程

自动化专业综合设计报告 设计题目:利用matlab编写S函数求解微分方程 所在实验室:自动化系统仿真实验室 指导教师:郭卫平 学生姓名律迪迪 班级文自0921 学号200990519114 成绩评定:

一、设计目的 了解使用simulink的扩展工具——S-函数,s函数可以利用matlab的丰富资源,而不仅仅局限于simulink提供的模块,而用c或c++等语言写的s函数还可以实现对硬件端口的操作,还可以操作windows API等的,它的魅力在于完美结合了simulink框图简洁明快的特点和编程灵活方便的优点,提供了增强和扩展sinulink能力的强大机制,同时也是使用RTW实现实时仿真的关键。 二、设计要求 求解解微分方程 y’=y-2x/y

y(0)=1 要求利用matlab编写S函数求解 三、设计内容(可加附页) 【步骤1】获取状态空间表达式。 在matlab中输入 dsolve(‘Dy=y-2*x/y’,’y(0)=1’,’x’) 得到 y=(2*x+1).^(1/2); 【步骤2】建立s函数的m文件。 利用21·用S函数模板文件。 以下是修改之后的模板文件sfuntmpl.m的内容。function [sys,x0,str,ts] = sfuntmpl(t,x,u,flag) %SFUNTMPL General M-file S-function template % With M-file S-functions, you can define you own ordinary differential % equations (ODEs), discrete system equations, and/or just about % any type of algorithm to be used within a Simulink block diagram. %

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各种随机函数生成器

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.360docs.net/doc/985759360.html,/question/30033707.html) matlab生成随机数据 matlab本身提供很多的函数来生成各种各样的随机数据: normrnd 可以生成一定均值和标准差的正态分布 gamrnd 可以生成gamma分布的伪随机数矩阵 chi2rnd 可以生成卡方分布的伪随机数矩阵 trnd 可以生成t分布的伪随机数矩阵 frnd 可以生成f分布的伪随机数矩阵 raylrnd 可以生成rayleigh分布的伪随机数矩阵

matlab中s函数编写心得(转)(最新整理)

matlab中s函数编写心得(转) Part I: 所谓s函数是system Function的简称, 用它来写自己的simulink模块. s函数可以用matlab、C、C++、Fortran、Ada等语言来写,这儿我只介绍怎样用matlab语言来写吧(主要是它比较简单)< xmlnamespace prefix ="o" ns ="urn:schemas- microsoft-com:office:office" /> 先讲讲为什么要用s函数,我觉得用s函数可以利用matlab的丰富资源,而不仅仅局限于simulink提供的模块,而用c或c++等语言写的s函数还可以实现对硬件端口的操作,还可以操作windows API等 先介绍一下simulink的仿真过程(以便理解s函数),simulink 的仿真有两个阶段:一个为初始化,这个阶段主要是设置一些参数,像系统的输入输出个数、状态初值、采样时间等;第二个阶段就是运行阶段,这个阶段里要进行计算输出、更新离散状态、计算连续状态等等,这个阶段需要反复运行,直至结束. 在matlab的workspace里输入edit sfuntmpl(这是matlab自己提供的s函数模板),我们看它来具体分析s函数的结构.

1. 函数的函数头 函数的第一行: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)是偏移量 2. 函数分析 下面结合sfuntmpl.m中的代码来讲具体的结构: switch flag, %判断flag,看当前处于哪个状态 case 0, [sys,x0,str,ts]=mdlInitializeSizes; // 解释说明 flag=0表示当前处于初始化状态,此时调用函数mdlInitializeSizes进行初始化,此函数在该文件的第149行定义. 其中的参数sys是一个结构体,它用来设置模块的一些参数,各个参 数详细说明如下 size = simsizes;%用于设置模块参数的结构体用simsizes来生

matlab中的S函数

S函数的简介及编写 摘自恒润科技S-function的编写 1. S函数模板编辑环境进入: 在MATLAB主界面中直接输入:edit sfuntmpl 即可弹出S函数模板编辑的M文件环境,修改即可。 在MATLAB主界面中直接输入:sfundemos,即可调出S 函数的许多编程例子。 2. S函数模板的相关基础: 1)M文件S函数的引导语句为: x t flag f u Function [p sys x str ts p , ,1 2 ,...) , , ,0 , ] ,( , S函数默认的四个输入参数:t ,x ,u ,flag S函数默认的四个输出函数:sys ,x0 ,str ,ts 各个参数的含义如下: T :代表当前的仿真时间,该输入决定了下一个采样时间; X :表示状态向量,行向量,引用格式:X(1),X(2) U :表示输入向量; Flag :控制在每一个仿真阶段调用哪一个子函数的参数,由SIMULINK在调用时自动取值; Sys :通用的返回变量,返回的数值决定Flag值,mdlUpdates里:列向量,引用格式:Sys(1,1),Sys(2,1);mdlOutputs里:行向量,引用格式:Sys =x. X0 :初始的状态值;列向量,引用格式:X0=[ 0;0;0 ] Str :空矩阵,无具体含义;

Ts :包含模块采样时间和偏差的矩阵。[period, offset] 当Ts为-1时,表示与输入信号同采样周期。 2)S函数工作方式: Flag = 0时,调用mdlInitializeSizes函数,定义S函数的基本特性,包括采样时间,连续或者离散状态的初始条件和Sizes数组; Flag = 1时,调用mdlDerivatives函数,计算连续状态变量的微分方程;求所给表达式的等号左边状态变量的积分值的过程。 Flag = 2时,调用mdlUpdate函数,用于更新离散状态,采样时间和主时间步的要求; Flag = 3时,调用mdlOutputs函数,计算S函数的输出; Flag = 4时,调用mdlGetTimeOfNextVarHit函数,计算下一个采样点的绝对时间,这个方法仅仅是使用户在mdlInitializeSize 里说明一个可变的离散采样时间; Flag = 9时,调用mdlTerminate函数,实现仿真任务的结束。 3)S函数仿真过程: ①初始化:mdlInitializeSizes,初始化S函数 ●初始化SimStruct,包含了S函数的所有信息; ●设置输入、输出端口数; ●设置采样时间; ●分配存储空间。 ②数值积分:mdlDerivatives ●用于连续状态的求解和非采样过零点;

rand系列函数

1,rand生成均匀分布的伪随机数。分布在(0~1)之间 主要语法:rand(m,n)生成m行n列的均匀分布的伪随机数 rand(m,n,'double')生成指定精度的均匀分布的伪随机数,参数还可以是'single' rand(RandStream,m,n)利用指定的RandStream(我理解为随机种子)生成伪随机数rand(n):生成0到1之间的n阶随机数方阵 rand(m,n):生成0到1之间的m×n的随机数矩阵 2,randn生成标准正态分布的伪随机数(均值为0,方差为1) 主要语法:和上面一样 3, randi生成均匀分布的伪随机整数 主要语法:randi(iMax)在闭区间[1,iMax]生成均匀分布的伪随机整数 randi(iMax,m,n)在闭区间[1,iMax]生成mXn型随机矩阵 randi([iMin,iMax],m,n)在闭区间[iMin,iMax]生成mXn型随机矩阵 4,randperm随机打乱一个数字序列 randperm(n):产生一个1到n的随机顺序。 >> randperm(10) ans = 6 4 8 9 3 5 7 10 2 1 p = randperm(n,k) 返回一行从1到n的整数中的k个,而且这k个数也是不相同的。randperm完成的是不重复的重排采样(k-permutations),如果结果中的数需要重复多次出现的情况,则可以用:randi(n,1,k)。 5,randerr函数 randerr(20,7)产生什么矩阵? 产生一个20×7的矩阵,矩阵每一行随机有一个元素为1,其余的为0 out2 = randerr(8,7,[0 2; .25 .75]) 每行出现零个错误的概率是25% 出现2个错误的概率是75%(值为1表示出现错误) (1)产生随机矩阵,并返回制定范围内的元素 >a = randi([-50 50], 1, 100); >b = find(a > 20 & a < 40)2 (2)产生一个元素为0和1,size为100×5的随机矩阵,返回元素全为1的行。 >a = randi([0, 1], 100, 5) >b=find(all(a,2))3 (3)随机产生10个12位的0、1二进制序列,要求每个序列中包含7个1和5个0的形式。%程序如下 >N =10; >data = randerr(N, 12, 7)'; >data = data( : )'; >str1 = dec2bin(data); >str2 = reshape(str1, 12, N); >seque = str2'

(完整版)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自定义函数的五种方法 [转] 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在函数的求解方法

MatLab & 数学建模第四讲数值计算

一、方程求解 求解单个代数方程 MATLAB具有求解符号表达式的工具,如果表达式不是一个方程式(不含等号),则在求解之前函数solve将表达式置成等于0。 >> solve( ' a*x^2+b*x+c ' ) % solve for the roots of the eqution ans= [1/2/a*(-b+(b^2-4*a*c)^1/2)] [1/2/a*(-b-(b^2-4*a*c)^1/2)] 结果是符号向量,其元素是方程的2个解。如果想对非缺省x变量求解,solve 必须指定变量。 >> solve( ' a*x^2+b*x+c ' , ' b ' ) % solve for b ans= -(a*x^2+c)/x 带有等号的符号方程也可以求解。 >> f=solve( ' cos(x)=sin(x) ' ) % solve for x f= 1/4*pi >> t=solve( ' tan(2*x)=sin(x) ' ) t= [ 0] [acos(1/2+1/2*3^(1/2))] [acos(1/2=1/2*3^(1/2))] 并得到数值解。 >> numeric(f) ans=

0.7854 >> numeric(t) ans= 0 + 0.8314i 1.9455 注意在求解周期函数方程时,有无穷多的解。在这种情况下,solve对解的搜索范围限制在接近于零的有限范围,并返回非唯一的解的子集。 如果不能求得符号解,就计算可变精度解。 >> x=solve( ' exp(x)=tan(x) ' ) x= 1.306326940423079 代数方程组求解 可以同时求解若干代数方程,语句solve(s1,s2,.....,sn)对缺省变量求解n个方程,语句solve(s1,s2,...,sn,' v1,v2,...,vn ')对n个' v1,v2,...vn '的未知数求解n个方程。 solve(f) 解符号方程式f。 solve(f1,…,fn) 解由f1,…,fn组成的联立方程式。 我们先定义以下的方程式: >>eq1 = 'x-3=4'; % 注意也可写成'eq1=x-7' >>eq2 = 'x*2-x-6=0'; % 注意也可写成'eq2=x*2-x-6' >>eq3 = 'x2+2*x+4=0'; >>eq4 = '3*x+2*y-z=10'; >>eq5 = '-x+3*y+2*z=5'; >>eq6 = 'x-y-z=-1'; >>solve(eq1) ans=

matlab(Simulink)中S-function函数编写规则

matlab(Simulink)中S-function函数编写规则 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 sf untmpl(这是matlab自己提供的s函数模板),我们看它来具体分析s函数的结构。它的第一行是这样的:f unction [sys,x0,str,ts]=sf untmpl(t,x,u,f lag) 先讲输入与输出变量的含义:t是采样时间,x是状态变量,u是输入(是做成simulink模块的输入),f lag是仿真过程中的状态标志(以它来判断当前是初始化还是运行等);sys输出根据f lag的不同而不同(下面将结合f l ag来讲sys的含义),x0是状态变量的初始值,str是保留参数(mathworks公司还没想好该怎么用它,嘻嘻,一般在初始化中将它置空就可以了,str=[]),ts是一个1×2的向量,ts(1)是采样周期,ts(2)是偏移量。 下面结合sf untmpl.m中的代码来讲具体的结构: switch f lag, %判断f lag,看当前处于哪个状态 case 0, [sys,x0,str,ts]=mdlInitializeSizes; f l ag=0表示处于初始化状态,此时用函数mdlInitializeSizes进行初始化,此函数在sf untmpl.m的149行 我们找到他,在初始化状态下,sys是一个结构体,用它来设置模块的一些参数,各个参数详细说明如下 size = simsizes;%用于设置模块参数的结构体用simsizes来生成 sizes.NumContStates = 0;%模块连续状态变量的个数 sizes.NumDiscStates = 0;%模块离散状态变量的个数 sizes.NumOutputs = 0;%模块输出变量的个数 sizes.NumInputs = 0;%模块输入变量的个数 sizes.DirFeedthrough = 1;%模块是否存在直接贯通(直接贯通我的理解是输入能%直接控制输出) sizes.NumSample Times = 1;%模块的采样时间个数,至少是一个 sys = simsizes(sizes); %设置完后赋给sys输出 举个例子,考虑如下模型: dx/dt=f c(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个,我们就只需改上面那一段代码为: (一般连续状态与离散状态不会一块用,我这儿是为了方便说明) sizes.NumContStates=1;sizes.NumDiscStates=1;sizes.NumOutputs=1;sizes.NumInpu ts=1; 其他的可以不变。继续在mdlInitializeSizes函数中往下看: x0 = []; %状态变量设置为空,表示没有状态变量,以我们上面的假设,可改 %为x0=[0,0](离散和连续的状态变量我们都设它初值为0) str = []; %这个就不用说了,保留参数嘛,置[]就可以了,反正没什么用,可 %能7.0会给它一些意义 ts = [0 0]; %采样周期设为0表示是连续系统,如果是离散系统在下面的mdlGet %TimeOfNextV arHit函数中具体介绍 嘻嘻,总算讲完了初始化,后面的应该快了 在sf untmpl的106行继续往下看: case 1, sys=mdlDerivatives(t,x,u); f l ag=1表示此时要计算连续状态的微分,即上面提到的dx/dt=f c(t,x,u)中的dx/dt,找到 mdlDerivatives函数(在193行)如果设置连续状态变量个数为0,此处只需sys=[]; 就可以了(如sf untmpl中一样),按我们上述讨论的那个模型,此处改成 sys=f c(t,x(1),u)或sys=A*x(1)+B*u %我们这儿x(1)是连续状态变量,而x(2)是离散的,这儿只用到连续的,此时的输出sys就是微分 继续,在sf untmpl的112行: case 2, sys=mdlU pdate(t,x,u);

相关文档
最新文档