我怎么能使用matlab函数fcn块吗

31日视图(30天)
你好,
例如当我写基本的弹簧阻尼方程,我有错误。在fcn块,写(1 / m2) * (k1 * (u (3) - u (1)) + k2 * (u (3) - u (5)) + c1 * (u (4) - u (2)) + c2 * (u (4) - u (6)))。我怎么能使用matlab函数fcn块吗?
函数y = fcn (u)
m2 = 40;
c1 = 1000;
c2 = 0;
k1 = 13000;
k2 = 220000;
y = (1 / m2) * (k1 * (u (3) - u (1)) + k2 * (u (3) - u (5)) + c1 * (u (4) - u (2)) + c2 * (u (4) - u (6)));
结束
5个评论
titor7
titor7 2023年2月17日
我造型季度汽车悬架系统。步信号移动汽车前进的力量。
通常情况下,如果我会fcn u1 (x1)的位移函数和范围,这将是这样的。

登录置评。

接受的答案

Sulaymon Eshkabilov
Sulaymon Eshkabilov 2023年2月17日
有一个丢失块从导数的阶跃输入信号。注意,使用导数块不推荐使用,可能导致不稳定的结果。
另一个重要的观点是,阻尼系数c = 0,然后如果c2 = c1,系统响应会变得阻尼否则振动相当长一段时间。你应该调整刚度和MATLAB Fcn块adamping系数值。
相对公差也收紧了(1)的军医在模型中设置。
参阅附上的两个修正模型。
愿一切都好!
这里是仿真结果:
S = sim卡(“M_Fcn_万博1manbetxSimulink.slx”);
警告:评估时发生一个错误在“loc_createToolchain / MATLAB工具箱/编码器/ autosar / rtwTargetInfo。p:识别函数或变量“autosarroot”。
这个自定义注册不加载。
警告:解决模拟模型中遇到的困难的M_Fcn_万博1manbetxSimulink1.0000000000000038时间。万博1manbetx仿真软件将继续模拟与警告。请检查错误的模型。
警告:解决无法减少步长在不违反最小步长为3.55271 e15汽油在时间1连续1次。解算器将继续仿真步长限制在3.55271 e15汽油和使用一个有效的相对误差公差为0.0135238,大于指定的相对误差公差为0.0001。这通常是由高系统的刚度。请检查系统或提高解算器连续数分钟的步骤违反参数。
情节(S.ScopeData {1} . values。时间,S.ScopeData {1} .Values.Data,的r -)

更多的答案(4)

Sulaymon Eshkabilov
Sulaymon Eshkabilov 2023年2月17日
MATLAB Fcn块可以嵌入-请看附呈仿真软件模型的练习做了一些调整。万博1manbetx它的工作原理非常好。有一个importnat的观点是,在MATLAB fcn忽视语法——MATLAB fcn块的看到下面的语法:
函数y = fcn (u1, u2, u3,愉快,u5, u6)
m2 = 40;
c1 = 1000;
c2 = 0;
k1 = 13000;
k2 = 220000;
y = (1 / m2) * (k1 *(就是u1) + k2 * (u3-u5) + c1 * (u4-u2) + c2 * (u4-u6));
结束
1评论
titor7
titor7 2023年2月17日
范围的工作,但我想每个u1, u2, u3……它应该是这样。

登录置评。


山姆翟
山姆翟 2023年2月17日
@daglar7
我认为这个应该是
在这个博客上有一篇文章“ 季度汽车建模 “若昂Marabisa。
您可以参考使用的模块建模。
也看看这个教程:
1评论
titor7
titor7 2023年2月17日
我知道如何做这种造型。我只是想这样做也使用matlab函数。无论如何感谢你。

登录置评。



保罗
保罗 2023年2月18日
嗨titor7,
在原始模型显示错误的原因 这样的评论 是因为仿真软件没有足够万博1manbetx的信息来确定尺寸y的Matlab函数的输出块。
这个问题可以通过两种方式解决。“干净”的方法是双击Matlab功能块,转到功能选项卡,然后单击“编辑数据。”On the Symbols pane click on 'y' and in the Property Inspector change the Size from - 1, which means inherited, to 1. Do the same for the other Matlab Function block.
最快速的方法是将一行代码添加到Matlab功能块强制解析器承认y是一个标量。像这样
函数y = fcn (u)
y = 0;% y定义为一个标量
m2 = 40;
c1 = 1000;
c2 = 0;
k1 = 13000;
k2 = 220000;
y = (1 / m2) * (k1 * (u (3) - u (1)) + k2 * (u (3) - u (5)) + c1 * (u (4) - u (2)) + c2 * (u (4) - u (6)));
结束
函数y = fcn (u)
y = 0;% y定义为一个标量
m1 = 290;
c1 = 1000;
k1 = 13000;
% y = (1 / m1) [(k1 * (u1-u3)) + (c1 * (u2-u4)];
y = (1 / m1) * (k1 * (u (1) - u (3))) + (c1 * (u (2) - u (4)));
结束
你仍然必须解决如何近似阶跃函数的导数,但至少现在模型的更新和运行。

s manbetx 845

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!