永发信息网

请教Matlab关于S函数多输入和多输出的问题

答案:3  悬赏:70  手机版
解决时间 2021-03-04 03:38
要编写一个s函数,有两个输入,三个输出,输入为参考电流Is和电角度angle,输出为三相电流Ia,Ib,Ic,问:
1、函数的外部使用MUX模块将Is和angle连接起来一同接入s-function函数模块吗?
2、此函数的s-function parameter怎么设置?(Is和angle外部的子系统计算结果给定)
3、对于函数程序中的所涉及的五个参数如何声明?(我的这个老说我没定义Is)
function [sys,x0,str,ts] = test_0105(t,x,u,flag,Is,angle)
switch flag,
case 0,
[sys,x0,str,ts,Ia,Ib,Ic]=mdlInitializeSizes;
case 1,
sys=mdlDerivatives(t,x,u);

case 2,
sys=mdlUpdate(t,x,u);

case 3,
sys=mdlOutputs(t,x,u,Is,angle);

case 4,
sys=mdlGetTimeOfNextVarHit(t,x,u);
case 9,
sys=mdlTerminate(t,x,u);

otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
function [sys,x0,str,ts,Ia,Ib,Ic]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 3;
sizes.NumInputs = 2;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1; % at least one sample time is needed
sys = simsizes(sizes);
function [Ia,Ib,Ic]=mdlOutputs(t,x,u,Is,angle)
pos=angle-floor(angle/2/pi)*2*pi;
if pos<pi/3
Ia=Is;Ib=-Is;Ic=0;
elseif pos<2*pi/3
Ia=Is;Ib=0;Ic=-Is;
elseif pos<pi
Ia=0;Ib=Is;Ic=-Is;
elseif pos<4*pi/3
Ia=-Is;Ib=Is;Ic=0;
elseif pos<5*pi/3
Ia=-Is;Ib=0;Ic=Is;
else
Ia=0;Ib=-Is;Ic=Is;
end
最佳答案
7.1.1 分段线性插值

所谓分段线性插值就是通过插值点用折线段连接起来逼近原曲线,这也是计算机绘制图形的基本原理。实现分段线性插值不需编制函数程序,MATLAB自身提供了内部函数interp1其主要用法如下:

interp1(x,y,xi) 一维插值

◆ yi=interp1(x,y,xi)

对一组点(x,y) 进行插值,计算插值点xi的函数值。x为节点向量值,y为对应的节点函数值。如果y 为矩阵,则插值对y 的每一列进行,若y 的维数超出x 或 xi 的维数,则返回NaN。

◆ yi=interp1(y,xi)

此格式默认x=1:n ,n为向量y的元素个数值,或等于矩阵y的size(y,1)。

◆ yi=interp1(x,y,xi,’method’)

method用来指定插值的算法。默认为线性算法。其值常用的可以是如下的字符串。

● nearest 线性最近项插值。

● linear 线性插值。

● spline 三次样条插值。

● cubic 三次插值。

所有的插值方法要求x是单调的。x 也可能并非连续等距的。

正弦曲线的插值示例:

>> x=0:0.1:10;

>> y=sin(x);

>> xi=0:0.25:10;

>> yi=interp1(x,y,xi);

>> plot(x,y,’0’,xi,yi)

则可以得到相应的插值曲线(读者可自己上机实验)。

Matlab也能够完成二维插值的运算,相应的函数为interp2,使用方法与interpl基本相同,只是输入和输出的参数为矩阵,对应于二维平面上的数据点,详细的用法见Matlab联机帮助。

7.1.2 最小二乘法拟合

在科学实验的统计方法研究中,往往要从一组实验数据中寻找出自变量x 和因变量y之间的函数关系y=f(x) 。由于观测数据往往不够准确,因此并不要求y=f(x)经过所有的点 ,而只要求在给定点上误差按照某种标准达到最小,通常采用欧氏范数作为误差量度的标准。这就是所谓的最小二乘法。在MATLAB中实现最小二乘法拟合通常采用polyfit函数进行。

函数polyfit是指用一个多项式函数来对已知数据进行拟合,我们以下列数据为例介绍这个函数的用法:

>> x=0:0.1:1;

>> y=[ -0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2 ]

为了使用polyfit,首先必须指定我们希望以多少阶多项式对以上数据进行拟合,如果我们指定一阶多项式,结果为线性近似,通常称为线性回归。我们选择二阶多项式进行拟合。

>> P= polyfit (x, y, 2)

P=

-9.8108 20.1293 -0.0317

函数返回的是一个多项式系数的行向量,写成多项式形式为:

为了比较拟合结果,我们绘制两者的图形:

>> xi=linspace (0, 1, 100); %绘图的X-轴数据。

>> Z=polyval (p, xi); %得到多项式在数据点处的值。

当然,我们也可以选择更高幂次的多项式进行拟合,如10阶:

>> p=polyfit (x, y, 10);

>> xi=linspace (0, 1,100);

>> z=ployval (p, xi);

读者可以上机绘图进行比较,曲线在数据点附近更加接近数据点的测量值了,但从整体上来说,曲线波动比较大,并不一定适合实际使用的需要,所以在进行高阶曲线拟合时,“越高越好”的观点不一定对的。

7.2 符号工具箱及其应用

在数学应用中,常常需要做极限、微分、求导数等运算,MATLAB称这些运算为符号运算。MATLAB的符号运算功能是通过调用符号运算工具箱(Symbolic Math Toolbox)内的工具实现,其内核是借用Maple数学软件的。MATLAB的符号运算工具箱包含了微积分运算、化简和代换、解方程等几个方面的工具,其详细内容可通过MATLAB系统的联机帮助查阅,本节仅对它的常用功能做简单介绍。

7.2.1 符号变量与符号表达式

MATLAB符号运算工具箱处理的对象主要是符号变量与符号表达式。要实现其符号运算,首先需要将处理对象定义为符号变量或符号表达式,其定义格式如下:

格式1: sym (‘变量名’) 或 sym (‘表达式’)

功能: 定义一个符号变量或符号表达式。

例如:

>> sym (‘x’) % 定义变量x为符号变量

>> sym(‘x+1’) % 定义表达式x+1为符号表达式

格式2: syms 变量名1 变量名2 …… 变量名n

功能: 定义变量名1、变量2 ……、变量名 n为符号变量。

例如:

>> syms a b x t % 定义a,b, x,t 均为符号变量

7.2.2 微积分运算

1、极限

格式:limit (f, t, a, ‘left’ or ‘right’)

功能:求符号变量t 趋近a 时,函数f 的(左或右)极限。‘left’ 表示求左极限,‘right’ 表示求右极限,省略时表示求一般极限;a省略时变量t 趋近0; t省略时默认变量为x ,若无x则寻找(字母表上)最接近字母x 的变量。

例如:求极限的命令及结果为:

>> syms x t

>> limit ((1+2*t/x)^(3*x) , x, inf )

ans=

exp(6*t)

再如求函数x / |x| ,当时的左极限和右极限,命令及结果为:

>> syms x

>> limit(x/abs(x), x, 0, ’left’) ans = -1

>> limit(x/abs(x),x, 0, ’right’) ans = 1

2、导数

格式: diff (f,t,n)

功能: 求函数f 对变量 t的n 阶导数。当n省略时,默认 n=1;当t省略时,默认变量x, 若无x时则查找字母表上最接近字母x 的字母。

例如:求函数f=a*x^2+b*x+c对变量 x的一阶导数, 命令及结果为

>> syms a b c x

>> f=a*x^2+b*x+c;

>> diff(f)

ans=

2*a*x+b

求函数f 对变量b的一阶导数(可看作求偏导), 命令及结果为

>> diff(f,b) ans=x

求函数f 对变量x的二阶导数, 命令及结果为

>> diff(f,2) ans=2*a

3、积分

格式: int(f,t,a,b)

功能: 求函数f 对变量 t从a 到b的定积分. 当a和b省略时求不定积分;当t省略时, 默认变量为(字母表上)最接近字母x的变量。

例如:求函数f=a*x^2+b*x+c对变量x不定积分, 命令及结果为

>> syms a b c x

>> f=a*x^2+b*x+c;

>> int(f)

ans=

1/3*a*x^3+1/2*b*x^2+c*x

求函数f 对变量b不定积分, 命令及结果为

>> int(f,b)

ans=

a*x^2*b+1/2*b^2*x+c*b

求函数f 对变量x 从 1到5的定积分, 命令及结果为

>> int(f,1,5)

ans=

124/3*a+12*b+4*c

4、级数求和

格式: symsum (s,t,a,b)

功能:求表达式s中的符号变量t从第a项到第b项的级数和。

例如: 求级数的前三项的和, 命令及结果为

>> symsum(1/x,1,3) ans=11/6

7.2.3 化简和代换

MATLAB符号运算工具箱中,包括了较多的代数式化简和代换功能,下面仅举出部分常见运算。

simplify 利用各种恒等式化简代数式

expand 将乘积展开为和式

factor 把多项式转换为乘积形式

collect 合并同类项

horner 把多项式转换为嵌套表示形式

例如:进行合并同类项执行

>> syms x

>> collect(3*x^3-0.5*x^3+3*x^2)

ans=

5/2*x^3+3*x^2)

进行因式分解执行

>> factor(3*x^3-0.5*x^3+3*x^2)

ans=

1/2*x^2*(5*x+6)

7.2.4 解方程

1、代数方程

格式:solve (f,t)

功能:对变量t 解方程f=0,t 缺省时默认为x 或最接近字母x 的符号变量。

例如:求解一元二次方程f=a*x^2+b*x+c的实根,

>> syms a b c x

>> f=a*x^2+b*x+c;

>> solve (f,x)

ans=

[1/2/a*(-b+(b^2-4*a*c)^ (1/2))]

[1/2/a*(-b-(b^2-4*a*c)^ (1/2))]

2、微分方程

格式:dsolve(‘s’, ’s1’, ’s2’,…, ’x’)

其中s为方程;s1,s2,……为初始条件,缺省时给出含任意常数c1,c2,……的通解;x为自变量,缺省时默认为t 。

例如:求微分方程的通解

>> dsolve(‘Dy=1+y^2’)

ans=

tan(t+c1)

7.3 优化工具箱及其应用

在工程设计、经济管理和科学研究等诸多领域中,人们常常会遇到这样的问题:如何从一切可能的方案中选择最好、最优的方案,在数学上把这类问题称为最优化问题。这类问题很多,例如当设计一个机械零件时如何在保证强度的前提下使重量最轻

或用量最省(当然偷工减料除外);如何确定参数,使其承载能力最高;在安排生产时,如何在现有的人力、设备的条件下,合理安排生产,使其产品的总产值最高;在确定库存时如何在保证销售量的前提下,使库存成本最小;在物资调配时,如何组织运输使运输费用最少。这些都属于最优化问题所研究的对象。

MATLAB的优化工具箱被放在toolbox目录下的optim子目录中,其中包括有若干个常用的求解函数最优化问题的程序。MATLAB的优化工具箱也在不断地完善。不同版本的MATLAB,其工具箱不完全相同。在MATLAB5.3版本中,对优化工具箱作了全面的改进。每个原有的常用程序都重新编制了一个新的程序。除fzero和fsolve外都重新起了名字。这些新程序使用一套新的控制算法的选项。与原有的程序相比,新程序的功能增强了。在MATLAB5.3和6.0版本中,原有的优化程序(除fzero和fsolve外)仍然保留并且可以使用,但是它们迟早会被撤消的。鉴于上述情况,本书将只介绍那些新的常用的几个优化程序。
全部回答
我也是做BLDC模型遇到这个问题,总是说Is没有定义。我们可以交流下qq76770042
MATLAB 7.0/Simulink 6.0建模仿真开发与高级工程应用 simulink 动态系统与仿真基础 这两本书讲S-FUN比较不错。可以看下。 如果要深入学习S-FUN,只能去看MATLAB的帮助文档,没有其他的什么好办法。 还有,用simulink的要点是尽量使用已有的系统提供的模块来构建自己所需的模块,虽然这样可能看上去使用的模块多,但是你自己编写的S-FUN在效率上肯定比不上系统提供的模块,所以还是组合比自己写好。 并且S-FUN只能编写单输入单输出的模块,局限太大。你还可以研究下Simulink Embeded Function,这个模块里面可以写代码,和MATLAB基本一样,而且支持生成多输入多输出系统。不过要版本高一点的Simulink才支持这个模块。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
下列关于贷款转让的说法,不正确的是()。A.主
有什么点击手机广告赚钱的安卓软件么
天宝堂药店怎么去啊,有知道地址的么
买了一双阿迪达斯的鞋穿了几次明显感觉右脚偏
3、8、15、26、37、50
武进区横林磊鼎机械配件厂地址有知道的么?有
下图是生物体内几种有机物组成以及它们各自功
我家跟别人的矛盾
梦想的反义词是什么
创维电视接的有线电视,放的好好的,总是跳到
怡景洗衣店怎么去啊,有知道地址的么
一个女孩有眼界什么意思
逃避等于拒绝
重庆市住宅小区车库物管能出租做洗车店吗
老良早餐店地址在哪,我要去那里办事
推荐资讯
玉井九秋莲什么意思
贝贝乐儿童乐园(钱清镇店)地址有知道的么?有
笔记本电脑中双显卡好吗
家之源房产梅岭店我想知道这个在什么地方
在进行“馒头在口腔中的变化”这个实验时,水
电信营业 厅的人都是干什么的,查个流量都查不
我怎么知道的英文
unity和await之间的区别
甜蜜素吃了对身体有害吗
以太网是怎么回事
为啥电性有两个信号,什么情况?
水字笔画顺序
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?