How to generate function handle automatically from the cell array?

3 vues (au cours des 30 derniers jours)
Akbar
Akbar le 12 Avr 2018
Commenté : Akbar le 13 Avr 2018
I have a 2x1 cell called "dx", which contains 1x3 cells:
'X * k * m' '*' '-1'
'X * k * m' '*' 'Y_XS'
I want this "dx" cell to be converted into a function. How can I do that? The generated function should look like this:
function dX = myFunc(t,X,k,m,Y_XS)
R = X(2) * k * X(1)/(X(1)+m);
dX = [-R;
Y_XS * R];
  5 commentaires
Akbar
Akbar le 13 Avr 2018
Modifié(e) : Akbar le 13 Avr 2018
Thank You very much for helping me. I'm developing a script, at the Moment the cell Array that i have is the very first Version, it might change later.
1. No, the size is not always same.
2. Lets assume yes, for simplicity.
3. Yes
4. No
5. Please check this, I have edited the question. Basically I'm trying to create ODE function. x is a variable and others are constants which are available on workspace. I have nothing of type symbolic.
Akbar
Akbar le 13 Avr 2018
Modifié(e) : Akbar le 13 Avr 2018
FYI: I'm reading simulink model which simulates ODE. The Task is to get the Parameters of ODE and create a function inside matlab. So Im getting those Parameters into the cell Array called "dx". Now I want to create a function somehow.

Connectez-vous pour commenter.

Réponse acceptée

Stephen23
Stephen23 le 13 Avr 2018
Modifié(e) : Stephen23 le 13 Avr 2018
@ashadako: you have since edited your question and completely changed the function specification. This answer give the original specification: you can make the required changes yourself.
The trick is to simply arrange the strings as required, and then use str2func to get a function handle:
dx = {...
'X * k * m' '*' '-1'
'X * k * m' '*' 'Y_XS'};
isn = isnan(str2double(dx(:,3)));
tmp = dx;
tmp(:,4) = {';'};
tmp = tmp(:,4:-1:1).';
str = [tmp{:}];
var = sprintf(',%s',dx{isn,3});
str = sprintf('@(t,X,k,m,%s)[%s];',var(2:end),str(2:end));
fun = str2func(str);
This gives an anonymous function, which you can simply call with the required inputs:
>> fun(1,2,3,4,5,6)
ans =
-24
120
  1 commentaire
Akbar
Akbar le 13 Avr 2018
Thank You very much @Stephen Cobeldick. I will try this out.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Simulation Setup dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by