如何将工作区下载到 Excel sheet 中,我可以在其中更新 Excel 中的变量,它们也在 MATLAB 中更新?
How to download the workspace into an Excel sheet where I can update a variable in Excel and they update in MATLAB as well?
假设我有一个通用的 MATLAB 脚本如下:
A = [1 2 0; 2 5 -1; 4 10 -1];
b = [1;3;5];
x = A\b;
r = A*x - b;
这些变量将存储在工作区中。如何下载 Excel sheet 中的工作区变量(A、b、x、r),以便我可以修改 Excel 中的变量并上传 Excel sheet 到 MATLAB 中的当前文件夹并将工作区更新为我在 Excel 中所做的更改?例如,我下载Excel中的工作空间。我打开 Excel sheet 并将 r=A*x-b 更改为 r='Hello World'。然后我将那个 sheet 上传到 MATLAB,并在工作区中更新新的 'r'。
请参考以下方法
首先,您的数组和操作可以定义为字符串,然后对其进行求值。请对我提案的这一部分持保留态度,并确保您正在评估的指令在句法上是有效的。请记住,eval
函数有其自身的风险
% Clean your workspace
clear
close
clc
% Create your two arrays and additional variables
A = [1 2 0; 2 5 -1; 4 10 -1];
b = [1;3;5];
% Define all the necessary operations as strings. Make sure that these
% operations are absolutely valid before proceeding. Here you can spend
% some time defining some error-checking logic.
x_oper = "A\b";
r_oper = "A*x - b";
% To be safe, we evaluate if the instructions are valid,
% otherwise we throw an error --> typos and other stuff can go wrong!
try
x = eval(x_oper); % be careful!
r = eval(r_oper); % be careful!
sprintf("Expressions successfully evaluated!")
catch err
sprintf("Error evaluating expression >> %s\n", err.message)
end
然后可以将值和说明格式化为单独的表格以保存为 .csv
文件,可以使用 excel(或在我的情况下为 LibreOffice)读取。
将您的 'workspace' 内容保存到两个不同的文件中。为了清楚起见,我将一个文件用于值,将另一个文件用于操作
% Define to filenames
varsFile = "pseudo-workspace.csv"
operFile = "operations.csv"
% Convert variables and operations/instructions to tables
dataTable = table(A, b, x, r)
instrTable = table(x_oper, r_oper)
% Write the tables to their respective files
writetable(dataTable, varsFile)
writetable(instrTable, operFile)
dataTable
看起来像这样:
和 instrTable
的操作是:
在此之后,您的作品将保存在两个不同的文件中,并可以在其他地方进行编辑。也许您想与其他人或您自己共享该文件,以防您无法在另一台计算机上访问 Matlab 并且需要更改操作 and/or 值。然后,在不同的 .m
文件上,您将这些文件读取到当前工作区并将它们分配给相同的变量标签:
% Now we read the values and operations from a previous session or
% externally edited in excel/text editor
rawValuesTable = readtable(varsFile)
clear A % I only clear my variables since I am working on the same m file
clear b
clear x
clear r
% Now we read the values and operations from a previous session or
% externally edited in excel/text editor
rawValuesTable = readtable(varsFile)
% Retrieve the values from A and b from the table that we just read
A = [rawValuesTable.A_1, rawValuesTable.A_2, rawValuesTable.A_3];
b = rawValuesTable.b;
rawOperations = readtable(operFile);
% The operations are read as cell arrays, therefore we need to
% evaluate them as strings only with the suffix {1}
try
x = eval(rawOperations.x_oper{1})
r = eval(rawOperations.r_oper{1})
sprintf("Expressions successfully evaluated!")
catch err
sprintf("Error evaluating expression >> %s\n", err.message)
end
最终获得相同的输出,当然没有任何改变:
您可以使用两个不同的函数执行两个过程 (write/read)。再一次,这是我对你的特殊情况的看法,你肯定会基于此提出不同的想法
假设我有一个通用的 MATLAB 脚本如下:
A = [1 2 0; 2 5 -1; 4 10 -1];
b = [1;3;5];
x = A\b;
r = A*x - b;
这些变量将存储在工作区中。如何下载 Excel sheet 中的工作区变量(A、b、x、r),以便我可以修改 Excel 中的变量并上传 Excel sheet 到 MATLAB 中的当前文件夹并将工作区更新为我在 Excel 中所做的更改?例如,我下载Excel中的工作空间。我打开 Excel sheet 并将 r=A*x-b 更改为 r='Hello World'。然后我将那个 sheet 上传到 MATLAB,并在工作区中更新新的 'r'。
请参考以下方法
首先,您的数组和操作可以定义为字符串,然后对其进行求值。请对我提案的这一部分持保留态度,并确保您正在评估的指令在句法上是有效的。请记住,eval
函数有其自身的风险
% Clean your workspace
clear
close
clc
% Create your two arrays and additional variables
A = [1 2 0; 2 5 -1; 4 10 -1];
b = [1;3;5];
% Define all the necessary operations as strings. Make sure that these
% operations are absolutely valid before proceeding. Here you can spend
% some time defining some error-checking logic.
x_oper = "A\b";
r_oper = "A*x - b";
% To be safe, we evaluate if the instructions are valid,
% otherwise we throw an error --> typos and other stuff can go wrong!
try
x = eval(x_oper); % be careful!
r = eval(r_oper); % be careful!
sprintf("Expressions successfully evaluated!")
catch err
sprintf("Error evaluating expression >> %s\n", err.message)
end
然后可以将值和说明格式化为单独的表格以保存为 .csv
文件,可以使用 excel(或在我的情况下为 LibreOffice)读取。
将您的 'workspace' 内容保存到两个不同的文件中。为了清楚起见,我将一个文件用于值,将另一个文件用于操作
% Define to filenames
varsFile = "pseudo-workspace.csv"
operFile = "operations.csv"
% Convert variables and operations/instructions to tables
dataTable = table(A, b, x, r)
instrTable = table(x_oper, r_oper)
% Write the tables to their respective files
writetable(dataTable, varsFile)
writetable(instrTable, operFile)
dataTable
看起来像这样:
和 instrTable
的操作是:
在此之后,您的作品将保存在两个不同的文件中,并可以在其他地方进行编辑。也许您想与其他人或您自己共享该文件,以防您无法在另一台计算机上访问 Matlab 并且需要更改操作 and/or 值。然后,在不同的 .m
文件上,您将这些文件读取到当前工作区并将它们分配给相同的变量标签:
% Now we read the values and operations from a previous session or
% externally edited in excel/text editor
rawValuesTable = readtable(varsFile)
clear A % I only clear my variables since I am working on the same m file
clear b
clear x
clear r
% Now we read the values and operations from a previous session or
% externally edited in excel/text editor
rawValuesTable = readtable(varsFile)
% Retrieve the values from A and b from the table that we just read
A = [rawValuesTable.A_1, rawValuesTable.A_2, rawValuesTable.A_3];
b = rawValuesTable.b;
rawOperations = readtable(operFile);
% The operations are read as cell arrays, therefore we need to
% evaluate them as strings only with the suffix {1}
try
x = eval(rawOperations.x_oper{1})
r = eval(rawOperations.r_oper{1})
sprintf("Expressions successfully evaluated!")
catch err
sprintf("Error evaluating expression >> %s\n", err.message)
end
最终获得相同的输出,当然没有任何改变:
您可以使用两个不同的函数执行两个过程 (write/read)。再一次,这是我对你的特殊情况的看法,你肯定会基于此提出不同的想法