simlink里面MATLAB Function ‘xxx‘ not supported for code generation.
matlab function :
function [xdot, U] = fcn(x,n,mp,rp,V_c,beta_c)
[xdot,U] = otter(x,n,mp,rp,V_c,beta_c);
end
1、现象-----运行程序出现下面错误:
2、原因:
simulink代码生成的过程中,有些函数是不支持内部代码生成的,需要将其定义为外部函数,使用coder.extrinsic声明一下即可,详细的你可以参考一下matlab的帮助文档doc coder.extrinsic外部函数
添加下面代码:
coder.extrinsic('otter');
3、继续运行,前面错误已经没有了,又报下面错误:
Function output 'Xdot' cannot be an mxArray in this context. Consider preinitializing the output variable with a known type
4、错误提示的很明显了,参数的类型问题,从3中的外部函数文档里面可以找到:
使用 mxArray
外部函数的输出是一个 mxArray - 也称为 MATLAB 数组。对 mxArrays 有效的操作只有下列几个:
- 将 mxArrays 存储在变量中
- 将 mxArrays 传递给函数,并从函数中返回它们
- 在运行时将 mxArrays 转换为已知类型
要在其他操作中使用外部函数返回的 mxArrays,必须先将它们转换为已知类型,如将 mxArray 转换为已知类型中所述。
将 mxArray 转换为已知类型
要将 mxArray 转换为已知类型,请将 mxArray 指定给已定义类型的变量。在运行时,mxArray 将被转换为其指定给的变量的类型。但是,如果 mxArray 中的数据与该变量的类型不一致,将会发生运行时错误。
以如下代码为例:
function y = foo %#codegen
coder.extrinsic('rat');
[N D] = rat(pi);
y = min(N, D);
这里,顶层函数 foo 调用外部函数 rat,后者返回两个 mxArrays,分别代表 pi 的有理分式逼近式的分子 N 和分母 D。虽然可以将这两个 mxArrays 传递给另一个 MATLAB 函数(本例中为 min),但不能将 min 返回的 mxArray 指定给输出 y。
如果在 Simulink® 模型中的 MATLAB Function 模块中运行此函数 foo,仿真过程中代码将生成以下错误:
Function output ‘y’ cannot be of MATLAB type.
要解决此问题,请按如下方式将 y 定义为您希望 min 返回的值的类型和大小,本例中为双精度标量值:
function y = foo %#codegen
coder.extrinsic('rat');
[N D] = rat(pi);
y = 0; % Define y as a scalar of type double
y = min(N,D);
5、最后修改的函数如下:
function [xdot1, U1] = fcn(x,n,mp,rp,V_c,beta_c)
coder.extrinsic('otter');
[xdot,U] = otter(x,n,mp,rp,V_c,beta_c);
xdot1=zeros(12,1);
U1=0;
xdot1=xdot;
U1=U;
end
simlink里面MATLAB Function ‘xxx‘ not supported for code generation.相关推荐
- dll function 'xxx' not found
function 'xxx' not found 原因: 声明和实现的参数不一致,包括数量,变量名和返回值. MYLIBDLL char* testchar(int plus1); char* tes ...
- 【Matlab 控制】利用 Matlab Function 绘制分段函数
利用 Switch block 利用 Matlab Function block function [mean, stdev] = fcn(vals) % #codegen% calculates a ...
- Simulink中的某一个模块用了我自己定义的MATLAB function模块,但是出现的结果是:The block ‘**/matlab function/sfunction‘ is in an
Simulink中的某一个模块用了我自己定义的MATLAB function模块,但是出现的结果是:The block '/matlab function/sfunction' is in an in ...
- 如何保存一个函数_如何表达一个“分段函数”之学习Matlab Function模块
前言 本节内容介绍用"Matlab Function Model"实现"分段函数" 1. 先介绍MATLAB Function 模块 如下图所示可以获得 M ...
- c #include如何找到文件_使用 MATLAB Function 模块集成 C 代码
检索 使用 MATLAB Function 模块集成 C 代码 从 Simulink 模型中调用 C 代码 您可以使用 MATLAB Function 模块从 Simulink® 模型中调用外部 ...
- matlab编写数学公式计算,关于MATLAB Function实现数学运算的相关介绍
描述 其实也就是使用 Simulink 库里相应的模块,以及使用 Stateflow 流程图向导.在这一篇,我们介绍使用MATLAB Function的方式. 其实,如果想在 Simulink 里嵌套 ...
- C编译报错: implicit declaration of function xxx is invalid in C99 [-Wimplicit-function-declaration]
C编译报错: implicit declaration of function xxx is invalid in C99 [-Wimplicit-function-declaration] 代码文件 ...
- Matlab Function输入输出
1.Simulink中Matlab Function函数的输入输出除支持常见基本数据类型如uint8,single, boolean等外,还支持自定义结构体,但需在Edit Data中找到Input和 ...
- simulink中MATLAB function模块数据维度不正确问题
1.首先打开MATLAB function模块 2.函数->Edit Data 3.选中数据维度不正确的变量->大小(size)进行更改(默认-1)->结束
- MATLAB中assignment模块,Simulink Matlab Function 模块使用问题求教
将 M 文件中的代码拷贝到Matlab Function模块中直接使用会出现错误 代码如下: function out =abscontroller(in) alpha =in(1); ...
最新文章
- linux/centos 解决Tomcat内存溢出,centostomcat
- reload端口 tomcat_CentOS 7配置tomcat https并改端口为443
- 【java】高并发之限流 RateLimiter使用
- 面试题 01.09. 字符串轮转
- fis 前端构建工具
- iOS 蓝牙扫描设备注意 2021-10-12
- VARCHART XGantt 应用程序支持简介
- mysql间隙锁_解决MySQL可重复读——详解间隙锁
- 立秋后注意脚部保暖 试试量身定制合脚鞋
- php twitter api,使用PHP通过twitter api获取twitter的推文信息
- Linux服务器下安装vsftpd,搭建文件服务器
- armbian 斐讯n1_树莓派/斐讯N1/ARMBIAN/安装HOME ASSISTANT
- Cisco:DHCP自动获取IP地址
- 腾讯文智自然语言处理介绍与情感分析API调用
- CS61A Proj 3
- 《Microduino实战》——3.4 重新认识软件与硬件
- python的字符串切片操作
- 一分钟教你如何使用edge浏览器玩4399小游戏
- [译]用R语言做挖掘数据《四》
- 根据自定义类属性导出Excel
热门文章
- matlab——整数规划
- Summary——CrowdPose: Efficient Crowded Scenes Pose Estimation and A New Benchmark
- JSP 银行网上账户管理系统myeclipse编程java网页
- 退款java_APP支付 + 退款(JAVA实现)
- 【扩展作业分享】JAVA, 数据结构与算法, 操作系统,大数据可视化,游戏制作
- Steam游戏信息爬取-热销榜价格好评率折扣评论
- 国防科技大学计算机考研资料汇总
- 6.2.1.1UE maximum output power - EIRP and TRP——翻译
- 变压器励磁模型 Matlab simulink 可用于模拟电压暂降等电能质量问题
- oracle卸数的perl脚本,卸载cpan安装的所有perl模块