2

我有两个问题:

  1. 我在 MATLAB 中有 12 个打开的数字(已经由另一个函数生成,图 1 到 12),我想将它们全部打印到一个文件中,但也打印到我的打印机上。我该如何为此编写代码?我已经阅读了有关获取数字句柄的信息,但我并没有真正理解它的含义以及之后如何打印它们。

  2. 我编写了一个脚本来将许多 Excel 文件中的数据导入 MATLAB。excel 文件被命名,因此唯一的区别在于初始部分,其中包括个人的姓名/代码(信息所在的人)。

我的脚本如下所示:

Indi1_Sim_T_SFTW1= xlsread('E:\MATLAB\Indi1_Output_SFTW1_6min_100_020812.xls','Indi1_Sim_T_SFTW12')
Indi1_Sim_V_SFTW1= xlsread('E:\MATLAB\Indi1_Output_SFTW1_6min_100_020812.xls','Indi1_Sim_V_SFTW12')

Indi2_Sim_T_SFTW1= xlsread('E:\MATLAB\Indi2_Output_SFTW1_6min_100_020812.xls','Indi2_Sim_T_SFTW12')
Indi2_Sim_V_SFTW1= xlsread('E:\MATLAB\Indi2_Output_SFTW1_6min_100_020812.xls','Indi2_Sim_V_SFTW12')

Indi3_Sim_T_SFTW1= xlsread('E:\MATLAB\Indi3_Output_SFTW1_6min_100_020812.xls','Indi3_Sim_T_SFTW12')
Indi3_Sim_V_SFTW1= xlsread('E:\MATLAB\Indi3_Output_SFTW1_6min_100_020812.xls','Indi3_Sim_V_SFTW12')

Indi4_Sim_T_SFTW1= xlsread('E:\MATLAB\Indi4_Output_SFTW1_6min_100_020812.xls','Indi4_Sim_T_SFTW12')
Indi4_Sim_V_SFTW1= xlsread('E:\MATLAB\Indi4_Output_SFTW1_6min_100_020812.xls','Indi4_Sim_V_SFTW12')

对于许多其他人来说,这种情况仍在继续。

如您所见,我正在为每个人重复代码。我可以用循环功能简化它吗?

PS:所有导入的数据都是数字。

4

1 回答 1

4

关于子弹编号。1:

我在 matlab 中有打开的数字,我想将它们全部打印到文件中,也打印到我的打印机上。

你有print这个目的的命令。只需指定图形的句柄即可,例如:

print(h)                      %// Send figure with handle h to printer
print(h, '-djpeg', filename)  %// Save figure with handle h to a JPEG file

关于子弹编号。2:

...我可以用循环功能简化它吗?

是的你可以。你可以这样做:

N = 4; %// Number of Excel files
C = cells(2 * N, 1);
for k = 1:2 * N
    filename = sprintf('E:\MATLAB\Indi%d_Output_SFTW1_6min_100_020812.xls', k);
    C{k} = xlsread(filename, sprintf('Indi%d_Sim_T_SFTW12', k));
    C{k + 1} = xlsread(filename, sprintf('Indi%d_Sim_T_SFTW12', k));
end

现在所有数据都存储在单元格数组C中。


解释

我打算将输出存储xlsread在一个单元格数组中。您有N文件,并且您正在从每个文件的两个工作表中读取数据,因此单元格数组C是用单元格初始化的2 * N

for循环遍历每个文件,并使用命令和迭代计数器构造文件sprintfk

filename = sprintf('E:\MATLAB\Indi%d_Output_SFTW1_6min_100_020812.xls', k);

这里的结果存储在变量filename中,并传递给xlsread命令。工作表名称也使用 构造sprintf,并直接传递给 ,xlsread而无需先存储在变量中。

问:为什么将文件名存储在变量中而不存储工作表名?
A:我决定将文件名存储在一个变量中只是因为我不想构造它两次,而工作表名称只构造一次,因此将它们中的每一个存储在一个变量中没有任何意义。

循环后,整个数据存储在元胞数组C中。要访问 C 中的第 i 个元素(单元格),请使用花括号 ( {})。例如,要访问第二个单元格,请写入C{2}.

问:为什么是细胞阵列? 答:在元胞数组中,每个元胞可以包含不同类型和长度的数据,例如 {2, 'hello'} 是一个元胞数组,其中包含两个元胞:一个包含数字 2,另一个包含字符串“hello” . 由于您不能保证xlsread返回相同长度的数据,因此不能使用简单的矩阵来存储所有文件的内容。

希望这可以帮助!

于 2013-01-23T11:43:26.060 回答