How do I generate executable code from imported data?

3 ビュー (過去 30 日間)
Johannes
Johannes 2023 年 11 月 27 日
コメント済み: Dyuman Joshi 2023 年 11 月 29 日
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 件のコメント
Johannes
Johannes 2023 年 11 月 27 日
編集済み: Johannes 2023 年 11 月 27 日
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 2023 年 11 月 27 日
Sorry, I was away from my PC due to some other work. Please check my answer below.

サインインしてコメントする。

採用された回答

Dyuman Joshi
Dyuman Joshi 2023 年 11 月 27 日
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 件のコメント
Johannes
Johannes 2023 年 11 月 28 日
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 2023 年 11 月 29 日
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

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeData Import from MATLAB についてさらに検索

製品


リリース

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by