1.matlab中s函数怎么写所谓s函数是system Function的简称,用s函数可以利用matlab的丰富资源,而不仅仅局限于simulink提供的模块,而用c或c++等语言写的s函数还可以实现对硬件端口的操作,还可以操作windows API等 。
先介绍一下simulink的仿真过程(以便理解s函数),simulink的仿真有两个阶段: 一个为初始化,这个阶段主要是设置一些参数,像系统的输入输出个数、状态初值、采样时间等;第二个阶段就是运行阶段,这个阶段里要进行计算输出、更新离散状态、计算连续状态等等,这个阶段需要反复运行,直至结束.可以使用模板文件:sfuntmp1.m来写s函数 。
2.请问用simulink的s手头上没有matlab,但是我可以给你提供一个方法 。用s-function 的离散函数编程 。
首先设置为固定仿真算法,s-function的采样周期为仿真步长的整数倍 。
设置向量x,初始值x0=[0 0 0…0],然后每个计算周期按照顺序寄存在里面,如果向量满了之后,向前移位,最后一位空出来给新的采样值 。
最后求平均,输出 。
如果你计算一下采样步长和向量x的长度,就可以求出最近1秒内的输入信号平均值 。
3.matlab中s你的问题可以化为下面向量的问题
已知a=(1,1,1),b=(-1,1,1),c=a*u,d=c*u,
c和d的夹角是50°,c和v的夹角是55°,d和v的夹角是4.9°,
u⊥v,|u|=1,|v|=1
求u,v
题中的a,b,c,d,u,v均为三维向量,*表示向量内积,|u|表示向量u的模
其中,向量b对应你以前的(m,n,p),向量u对应你以前的(h,k,l),向量v对应你以前的(u,v,w)
由上题,c=a*u,d=c*u可得c⊥u,d⊥u又u⊥v,且c,d,v有相同的起点即坐标原点,从而c,d,v在同一平面上且有相同的起点,且均与u垂直
所以c,d,v之间的夹角必定满足某个等式,回到题上也就是说,55°=50°+5°,
进一步说,你给的条件是矛盾的,所以matlab找不到解
就算你给出的条件是对的,由于你给出的前三个方程并非完全独立的,也不足以确定你想要的结果
4.MATLAB软件中Ss-function模块的程序写在一个.m文件中,在s-function的参数设置中指明该.m文件即可 。如下图所示 。我写的s-function的m文件名字为pvsim 。具体的s-function的编写你可以上百度文库中搜索s-funtion的具体内容 。
5.sSIMULINK 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-function1、使用模板文件:sfuntmp1. m该模板文件位于MATLAB根目录下toolbox/simulink/blocks目录下 。模板文件里s-function的结构十分简单,它只为不同的flag的值指定要相应调用的m文件子函数 。
比如当flag=3时,即模块处于计算输出这个仿真阶段时,相应调用的子函数为sys=mdloutputs(t,x,u) 。模板文件使用switch语句来完成这种指定,当然这种结构并不唯一,用户也可以使用if语句来完成同样的功能 。
而且在实际运用时,可以根据实际需要来去掉某些值,因为并不是每个模块都需要经过所有的子函数调用 。模板文件只是Simulink为方便用户而提供的一种参考格式,并不是编写s-function的语法要求,用户完全可以改变子函数的名称,或者直接把代码写在主函数里,但使用模板文件的好处是,比较方便,而且条理清晰 。