How do I generate executable code from imported data?

1 Ansicht (letzte 30 Tage)
Johannes
Johannes am 27 Nov. 2023
Kommentiert: Dyuman Joshi am 29 Nov. 2023
I have an xlsx file with various data for the calculation I'd like to conduct with my Matlab code. This file also contains the relevant formulas. Is there a way to import those formulas from xlsx (having them as a string) and convert them to normal code thats executable?
  5 Kommentare
Johannes
Johannes am 27 Nov. 2023
Bearbeitet: Johannes am 27 Nov. 2023
I made a test script for the function. My minimum code example looks like this:
clear all
close all
clc
Flushmatrix = readtable('Spülmatrix2.xlsx','PreserveVariableNames',true);
%%
psat = 1.5;
p_fmin = psat+1;
v = 330;
%%
a = Flushmatrix(1,9);
a = string(table2cell(a));
%%
fh = str2func(a)
fh(v, psat, p_fmin)
The xlsx file contains the variables and functions. I attached it to this comment. The problem is that the function is not callable like this. If I try to run it with my preset variables, it gives this error:
Undefined function
'((table2array(Flushmatrix(1,3))*(v/1000)+table2array(Flushmatrix(1,4)))*log(psat)+(table2array(Flushmatrix(1,5))*v+table2array(Flushmatrix(1,6))))/1000'
for input arguments of type 'double'.
Error in str2func_Test (line 16)
fh(v, psat, p_fmin)
Dyuman Joshi
Dyuman Joshi am 27 Nov. 2023
Sorry, I was away from my PC due to some other work. Please check my answer below.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Dyuman Joshi
Dyuman Joshi am 27 Nov. 2023
You need to add the @(list_of_independent_variables) before the formulae.
Flushmatrix = readtable('Spülmatrix2.xlsx','PreserveVariableNames',true)
Flushmatrix = 3×9 table
Spülen Produkt K1 [s/mL] K2 [s] K3 [s/mL] K4 [s] K5 K6 Funktion ____________ ________ _________ _________ _________ ________ _____ ____ _____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ {'standard'} {'Bier'} -0.23643 -0.040387 0.7205 0.039548 NaN NaN {'@(Flushmatrix, v, psat) ((table2array(Flushmatrix(1,3))*(v/1000)+table2array(Flushmatrix(1,4)))*log(psat)+(table2array(Flushmatrix(1,5))*v+table2array(Flushmatrix(1,6))))/1000'' } {'standard'} {'CSD' } -0.17236 -0.038639 0.47643 0.037187 NaN NaN {'@(Flushmatrix, v, psat) ((table2array(Flushmatrix(2,3))*(v/1000)+table2array(Flushmatrix(2,4)))*log(psat)+(table2array(Flushmatrix(2,5))*v+table2array(Flushmatrix(2,6))))/1000'' } {'sanft' } {'Bier'} 175.4 -1666 -345.6 3823 3.032 -305 {'@(Flushmatrix, v, psat, p_fmin) ((table2array(Flushmatrix(3,3))*p_fmin+table2array(Flushmatrix(3,4)))*(v/1000)^2+(table2array(Flushmatrix(3,5))*p_fmin+table2array(Flushmatrix(3,6)))*(v/1000)+(table2array(Flushmatrix(3,7))*p_fmin+table2array(Flushmatrix(3,8))))/1000'}
%values for variables
psat = 1.5;
p_fmin = psat+1;
v = 330;
%Value from the formula copied and pasted
((table2array(Flushmatrix(1,3))*(v/1000)+table2array(Flushmatrix(1,4)))*log(psat)+(table2array(Flushmatrix(1,5))*v+table2array(Flushmatrix(1,6))))/1000
ans = 0.2378
%formula from the table read
a = Flushmatrix(1,9);
a = string(table2cell(a))
a = "@(Flushmatrix, v, psat) ((table2array(Flushmatrix(1,3))*(v/1000)+table2array(Flushmatrix(1,4)))*log(psat)+(table2array(Flushmatrix(1,5))*v+table2array(Flushmatrix(1,6))))/1000'"
%convert the string to a function handle
fh = str2func(a)
fh = function_handle with value:
@(Flushmatrix,v,psat)((table2array(Flushmatrix(1,3))*(v/1000)+table2array(Flushmatrix(1,4)))*log(psat)+(table2array(Flushmatrix(1,5))*v+table2array(Flushmatrix(1,6))))/1000'
%corresponding value
fh(Flushmatrix, v, psat)
ans = 0.2378
  3 Kommentare
Johannes
Johannes am 28 Nov. 2023
Thank you so much for the help. We are working with the Matlab App Designer, so in the long term this could maybe be implemented in an app. There might be users with no Matlab license, so it`s more convenient to just change the xlsx file when one needs to change the formulae or coefficients.
Dyuman Joshi
Dyuman Joshi am 29 Nov. 2023
I see.
Also, you can modify this lines -
a = Flushmatrix(1,9);
a = string(table2cell(a));
fh = str2func(a);
to
fh = str2func(Flushmatrix{1,9})
For more info - Access Data in Tables

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Data Import from MATLAB finden Sie in Help Center und File Exchange

Produkte


Version

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by