Simulink error: The data abscissae must be distinct and strictly monotonic.

29 次查看(过去 30 天)
Hi all,
I have constructed a simulink model, where within the model I have a MATLAB function block as you can see. Within that block, a very simple code loads data from a .mat file and interpolates using interp1.
However I get the following error when I run the model which I have managed to trace to the line in the MATLAB function block where the interpolation occurs:
An error occurred while running the simulation and the simulation was terminated
Caused by:
  • The data abscissae must be distinct and strictly monotonic.
Component:Simulink | Category:Block error
This is simple enough, as one would assume that my x vector in the interp1 function includes non-monotonic data. But the problem is that it doesn't! I have tested that by running the code in the MATLAB function block by itself as a normal matlab file, and also used unique to tripple check and it works perfectly. I also checked where the current folder to ensure that the file is taken from the right place. So I really do not know why the interp1 function presents this problem when I am running it in Simulink. It must be something that I don't understand.
Any suggestions?
Kind Regards,
KMT.
P.S. Attached you can find the files that I am using. Just download and run if you need to.

采纳的回答

Daniel M
Daniel M 2019-10-17
编辑:Daniel M 2019-10-17
None of the variables in the matfile are monotonic.
all(sign(diff(Tga))==1) % ans = 0
all(sign(diff(Tm1))==1) % ans = 0
all(sign(diff(Tm2))==1) % ans = 0
all(sign(diff(thx))==1) % ans = 0
x = -10:10;
all(sign(diff(x))==1) % ans = 1
Perhaps try unwrap, as the values of thx seem to be between -pi and pi.
  5 个评论
Daniel M
Daniel M 2019-10-17
I have solved it. If you unwrap thx such that it become monotonic, now there is a duplicate! It occurs because thx has entries for 3.1416 and -3.1416 (and unwrapped they become the same). So I removed the second entry.
Add this code to your matlab function after you load the data:
thx(201) = [];
Tga(201) = [];
thx = unwrap(thx);
And this function shouldn't have any more problems. And the simulink program generates an error further along the simulation (hey... it's still progress!).

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Manual Performance Optimization 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by