Как да извикам променлива на matlab от S функция?

Работя върху S функция в simulink. В работното пространство на MATLAB има налични някои променливи. Искам да им се обадя.

Така че в MATLAB:

a=3;

и във функцията S (написана на C/C++):

double a = CallFromMATLABWorkSpace(a);  //Something like this.

Как да направя това? Има нещо като mexCallMATLAB, но не е ясно как трябва да използвам това в тази ситуация.


person Daan    schedule 30.09.2013    source източник


Отговори (2)


За да получите данни от работно пространство, използвайте функцията mexGetVariable.

Това обаче е малко необичайно нещо. Защо данните не се предават като параметър към S-функцията?

person Phil Goddard    schedule 30.09.2013

От това, което мога да видя в документацията за mexCallMATLAB, както и взаимодействие с изходния код на C++, би изглеждало нещо като следното:

Да кажем, че имате функция на MatLab MyDoubleFunction, която приема една скаларна двойна стойност и връща скаларна двойна стойност. Бихте направили следното, ако искате да предадете на функцията стойност 4.0 и да видите какъв е отговорът:

//setup the input args
mxArray* input_args[1] = {mxCreateDoubleScalar(4.0)};
mxArray** output_args; //will be allocated during call to mexCallMATLAB

//make the call to the Matlab function
if (mexCallMATLAB( 1 /* number of output arguments */,
                   output_args,
                   1 /* number of input arguments */,
                   &input_args,
                   "MyDoubleFunction"))
{
    //error if we get to this code block since it returned a non-zero value
}

//inspect the output arguments
double answer = mxGetScalar(*output_args);
person Jason    schedule 30.09.2013
comment
Вторият и четвъртият аргумент за mexCallMATLAB трябва да са от тип mxArray *...[]. Във вашия код те трябва да имат & пред тях. - person Navan; 01.10.2013