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

조회 수: 61 (최근 30일)
KostasK
KostasK 2019년 10월 17일
편집: KostasK 2019년 10월 17일
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!).
KostasK
KostasK 2019년 10월 17일
편집: KostasK 2019년 10월 17일
Ok, I understand. Thanks very much for your help!

댓글을 달려면 로그인하십시오.

추가 답변 (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