2016-05-10 2 views
0

Есть ли способ сделать тоиспользование scatteredInterpolant переменного во встроенных функциях MatLab в Simulink

Surface = scatteredInterpolant(measurement_xz(:,1)*1E-3,measurement_xz(:,2)*1E-3,measurement_xz(:,3)); 

где measurement_xz некоторые данные в сценарии запуска для моей Simulink модели, а затем использовать Surface во встроенной функции MatLab в Simulink модель, т.е.

/// встроенные функции MATLAB

function V = fcn(x,z) 
V = Surface(x,z); 

? Когда я, то есть попытаться использовать Surface в качестве параметра для V как

function V = fcn(x,z,Surface) 
V = Surface(x,z); 

с Surface набора в качестве параметра в портах и ​​данных менеджера я получаю ошибку

Выражение «поверхность» для начального значения данных «Поверхность» должна оценить числовое или логическое значение.

+0

Что такое встроенная функция matlab, я никогда не слышал об этом. Я предполагаю, что вы говорите об одном из них: функция обратного вызова, блок интерпретируемых функций MATLAB или блок функции MATLAB? – Daniel

+0

Я имел в виду функциональный блок matlab – VGD

ответ

1

То, что вы пытаетесь сделать, не поддерживается блоком функций Matlab, MATLAB не может сгенерировать для него код. Проблемы:

  • Вы пытаетесь получить доступ к переменной Surface которая не видна в области видимости
  • scatteredInterpolant не поддерживается вообще для генерации кода (по крайней мере, в моей версии MATLAB, может быть улучшена в последнее время Версии).

Чтобы исправить это на уровне кода, вы можете переключиться на интерпретируемый код MATLAB. Это можно сделать либо переключением на блок Interpreded MATLAB, либо с использованием coder.extrinsic. Это быстрое и простое исправление, но я рекомендую не делать этого, потому что это, вероятно, приведет к медленной модели. Вместо этого я рекомендую переключиться на lookup table, который также способен интерполировать.

Смежные вопросы