直接将自变量写成向量的形式,比如:
a=[1
2
3];
y=a^2
得到
y=[1
4
9];
matlab中设置精度的方法和 *** 作步骤如下:
1、首先,打开计算机,进入软件,将看到以下界面。依次单击上方菜单栏中的“File”-->“Preference”,如下图所示。
2、其次,完成上述步骤后,将看到以下界面。 单击红色框中的“Command Window”,如下图所示。
3、接着,完成上述步骤后,将看到以下界面。 在“Numeric format”后选择“long”选项,如下图所示。
4、最后,完成上述步骤后,将看到以下界面,只需在此处输入8即可,如下图所示。这样,问题就解决了。
syms x a b >> assume(a>b) >> assume(b>0) >> s=int('log(ax-b)',b/a,1) Warning: Explicit integral could not be found s = int(log(ax - b), x == b/a1) 就是说,得不出明确结果matlab中修改变量类型方法如下:uint8 ,uint16, uint32,uint64都是无符号整型,只能是整数,8,16指存储数据时占用的内存容量,8是一个字节, int8, int16,int32 ,int64 是整数变量,征服均可,要想改变变量的类型,比如原来a是int8的,变成int16,写int16(a)就可以了。而MATLAB变量要先定义,才能修改类型。定义符号类型变量方法如下:sym x 或者 syms x 。
计算过程当中的存储数值的变量可以不必定义,随时需要,随时定义,但是有时候如果变量很多,那么最好提前声明,声明的时候,可以直接赋予0值,并且注释,这样方便以后区分,避免混淆。函数是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)是偏移量。
下面结合sfuntmplm中的代码来讲具体的结构:
switch flag, %判断flag,看当前处于哪个状态
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
flag=0表示处于初始化状态,此时用函数mdlInitializeSizes进行初始化,此函数在 sfuntmplm的149行
我们找到他,在初始化状态下,sys是一个结构体,用它来设置模块的一些参数,各个参数详细说明如下
size = simsizes;%用于设置模块参数的结构体用simsizes来生成
sizesNumContStates = 0;%模块连续状态变量的个数
sizesNumDiscStates = 0;%模块离散状态变量的个数
sizesNumOutputs = 0;%模块输出变量的个数
sizesNumInputs = 0;%模块输入变量的个数
sizesDirFeedthrough = 1;%模块是否存在直接贯通(直接贯通我的理解是输入能 %直接控制输出)
sizesNumSampleTimes = 1;%模块的采样时间个数,至少是一个
sys = simsizes(sizes); %设置完后赋给sys输出
举个例子,考虑如下模型:
dx/dt=fc(t,x,u) 也可以用连续状态方程描述:dx/dt=Ax+Bu
x(k+1)=fd(t,x,u) 也可以用离散状态方程描述:x(k+1)=Hx(k)+Gu(k)
y=fo(t,x,u) 也可以用输出状态方程描述:y=Cx+Du
设上述模型连续状态变量、离散状态变量、输入变量、输出变量均为1个,我们就只需改上面那一段代码为:
(一般连续状态与离散状态不会一块用,我这儿是为了方便说明)
sizesNumContStates=1;sizesNumDiscStates=1;sizesNumOutputs=1;sizesNumInpu
ts=1;
其他的可以不变。继续在mdlInitializeSizes函数中往下看:
x0 = []; %状态变量设置为空,表示没有状态变量,以我们上面的假设,可改 %为x0=[0,0](离散和连续的状态变量我们都设它初值为0)
str = []; %这个就不用说了,保留参数嘛,置[]就可以了,反正没什么用,可 %能70会给它一些意义
ts = [0 0]; %采样周期设为0表示是连续系统,如果是离散系统在下面的mdlGet %TimeOfNextVarHit函数中具体介绍
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)