首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Simulink无法确定块“MATLAB函数”的大小和/或输出类型。

Simulink无法确定块“MATLAB函数”的大小和/或输出类型。
EN

Stack Overflow用户
提问于 2018-11-18 20:02:58
回答 2查看 5.4K关注 0票数 1

我有一个小的Simulink模型如下:

而感应式代码:

代码语言:javascript
复制
function [xdot,y] = fcn(x,u)

    % define your constants
    g = 9.81;
    m = 0.05;
    R = 1;
    L = 0.01;
    C = 0.0001; 
    x1 = 0.012;
    x2 = 0;
    x3 = 0.84;

    % nonlinear set of equations
    xdot = [x2; g-((C/m)*(x3/x1)^2); -((R/L) +(((2*C)/L)*(((x2*x3)/((x1)^2)))))] + [0;0;1/L]*u;

    y = x';   

但是,当我尝试运行时,Simulink会生成以下错误:

数据'y‘的推断大小(’13‘)与指定大小(’标量‘)不匹配。组件:MATLAB函数类:编码器错误Simulink无法确定块“MATLAB函数”的输出大小和/或类型,原因是块体中的错误或底层分析的局限性。这些错误可能是不准确的。修正指定的错误,或显式指定所有块输出的大小和/或类型。

我搜索了一些可变大小输入和输出文档,选中了“可变大小”复选框,并将上限输入为1 3。

当我再次尝试跑步时,我得到:

表示数据'y‘最大值的表达式’1-3‘必须计算成标量。

我不知道如何解决这个错误。我也看上去像这里,但还是不能让它工作。任何帮助都将不胜感激。

EN

Stack Overflow用户

回答已采纳

发布于 2018-11-18 22:15:59

您可能会发现,您的代码将通过进行以下更改来工作,

  • 您没有可变大小的数据,可以将所有这些选项设置为默认值。
  • (正如其他答案中所指出的,)您需要改变输入x进入方程的方式,因为目前它还没有被用来计算xdot
  • x1x2x3移动为Integrator块初始条件的3×1矢量.(假设这就是他们的真实情况。)

通过这些更改,块应该检测到x信号是3乘1(因为Integrator块有3个初始值),因此xdot输出是3乘1,y输出是1乘3。

为了安全起见,您还可以考虑在函数的顶部放置以下2行代码。

代码语言:javascript
复制
xdot = zeros(3,1);
y = zeros(1,3);

在块初始化期间,将使用这些行来告诉编译器输出信号的大小。

注意:你为什么要让y成为一个1乘3的载体?这是非常不寻常的,我怀疑你真的希望它是一个3乘1的向量(如果你想输出状态),或者你应该把x的值加起来得到y,在这种情况下,它只是一个标量。

与上面的内容无关,但您也可以考虑为块设置常量参数,这样就可以在不编辑函数的情况下更改它们。

票数 3
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53364909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档