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

62 ビュー (過去 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 Center および File ExchangeManual Performance Optimization についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by