如何将工作区下载到 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)。再一次,这是我对你的特殊情况的看法,你肯定会基于此提出不同的想法