万博1manbetxSimulink ---和平定义功能

2次观看(过去30天)
马里奥布鲁萨
马里奥布鲁萨 于2018年1月16日
编辑: 马里奥布鲁萨于2018年1月17日
你好,
我在Simulink中使用“S函数”块以创建和平定义的功能。万博1manbetx
如果真正的
% 代码
无效test_outputs_wrapper(const real_t * x,
real_T* y)
{
//如果(* x == 0){// x = 0未定义
/ / y [0] = -0.00001;
//}
//否则如果(* x == 1)// x = 1未定义
// {
// y [0] = 1.00001;
//}
//别的
// y [0] = 1 /((x [0] * x [0]) - x [0]);// y = 1 /(x ^ 2 -x)
y [0] = 1 / ((x [0] * x [0]) - x [0]);
} 结尾
上面的函数(标签代码内部是: Y = 1/(x^2 -x) )我正在使用 信号构建器 (方块),我设置斜坡从2到10 (y值)。
将域从未定义的值设置为x函数的平安运行右侧。
当我使用下面的代码,试图定义一个函数未定义的x值,它出错了。
如果真正的
% 代码
无效test_outputs_wrapper(const real_t * x,
real_T* y)
{
如果(* x == 0){
y [0] = -0.00001;
}
否则如果(* x == 1)
{
y [0] = 1.00001;
}
别的
y [0] = 1 / ((x [0] * x [0]) - x [0]);
} 结尾
0到10之间的范围(信号构建器)
然后一个图表下图:
如何使用S-Function定义它?
如果有一个最好的方法,我将获得认识。
提前致谢。

答案(2)

鸟
于2018年1月16日
你好马里奥,
首先,我想说你可以轻松实现你想要的 没有使用 S函数。它会更容易。我建议你在一个中实施它 Matlab功能 块您基本上写了一个包含的简单功能 如果 - elsef. .你遇到的问题和你的 解算器类型 .可能它被设置为 可变步骤求解器 它会自动调整解方程所需的步长,在每一步,它都会缩小步长,因为它可以提供有意义的解(直到1e+29)。这个可以用a来解 固定步骤求解器 并将其阶梯尺寸设置为 0.01 .那么你将有合理的尖峰 0. 1 分别。让我知道结果。

马里奥布鲁萨
马里奥布鲁萨 于2018年1月17日
编辑:马里奥布鲁萨 于2018年1月17日
嗨Birdman,
我有太多的错误,带有范围块和信号构建器块,当我更新新的配置数据时检查新模拟更多错误凸轮。有时需要关闭并重新打开MATLAB以检查新数据配置和斜率(块)行为。
Simulink是正常的吗?万博1manbetx对于exemple ::斜坡(下沉块)刚刚在我的间隔之间向我展示了一个完整的图表,当A确实放大和缩小...(奇怪的行为)时。
在改变求解器参数(固定步骤求解器)之后,我正确地获得了图形,但我使用了斜坡块信号(我提到的信号构建器的行为方面存在许多问题)。我使用了一个函数(y = 1 /((x ^ 2)-x)),无需设置未定义功能的间隔。它是由求解器参数(固定步骤求解器)制作的吗?以下是我的参数配置:
如果真正的
% 代码
无效test_Outputs_wrapper (const real_T * u,
real_T* y)
{
y [0] = 1 /(u [0] * u [0] -u [0]);
}
结尾
当我改变求解器时,求解器自身确定未定义的间隔。求解器如何使用分段功能?
我尝试使用matlab_function,我有很多奇怪的行为。不知道为什么。

社区宝藏狩猎

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!