我试图从传真logfile中获取共同变异矩阵(这只是一个带有.log扩展名的通用textfile(,以及字符串阵列或类似列表参数名称,按照文件放入的顺序。
我已经包括了日志文件的相关部分。在此中,它发生在第3285行,尽管它们倾向于四处移动 - 并且协方差矩阵和参数名称的块都可以由其标题识别!
FITTED VALUES, ACCURACIES AND CONFIDENCE LIMITS
NO. NAME VALUE SDLN 5 PERCENT 95 PERCENT
1 KA1 5.2353E-04 0.1809 3.8880E-04 7.0496E-04
2 KA2 6.7624E-02 0.3834 3.5994E-02 1.2705E-01
3 KD1 3.5626E-05 0.9008 8.0949E-06 1.5679E-04
4 KD2 1.3444E-01 0.3023 8.1764E-02 2.2104E-01
5 KAA1 4.7226E-04 1.8292 2.3302E-05 9.5715E-03
6 KAA2 1.7067E+04 1.7779 9.1613E+02 3.1793E+05
7 KAAAA 1.8234E+02 0.3205 1.0763E+02 3.0893E+02
8 R1 1.3568E+00 0.1278 1.0996E+00 1.6743E+00
9 R2 2.9313E-01 0.0268 2.8048E-01 3.0635E-01
10 R3 1.3338E-01 0.0303 1.2689E-01 1.4021E-01
11 T1B 9.9068E-01 0.2833 6.2163E-01 1.5788E+00
12 T2B 3.4526E-01 0.2362 2.3412E-01 5.0918E-01
13 KM11 3.5125E-04 0.1825 2.6015E-04 4.7425E-04
14 KM21 3.5625E-04 0.1881 2.6144E-04 4.8544E-04
15 KM31 1.5056E-04 0.1899 1.1016E-04 2.0576E-04
16 CTRANSFORM 1.9530E-01 0.2302 1.3374E-01 2.8518E-01
CORRELATION MATRIX COMPONENTS
COLUMN 1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16
ROW 1 1.000 0.277 0.048 0.336 -0.360 0.444 0.310 -0.767 -0.448 -0.471
-0.784 -0.484 -0.761 -0.875 -0.882 0.782
ROW 2 0.277 1.000 0.235 0.910 -0.136 0.478 0.222 0.140 -0.144 -0.294
0.186 -0.275 0.255 0.054 0.001 -0.229
ROW 3 0.048 0.235 1.000 0.338 -0.021 0.122 0.416 0.109 0.565 0.144
0.073 -0.366 0.152 0.083 0.107 -0.129
ROW 4 0.336 0.910 0.338 1.000 -0.306 0.364 0.554 0.242 -0.269 -0.137
0.237 -0.065 0.315 0.103 0.036 -0.283
ROW 5 -0.360 -0.136 -0.021 -0.306 1.000 -0.454 -0.325 0.035 0.547 0.404
0.064 -0.271 0.058 0.122 0.105 -0.066
ROW 6 0.444 0.478 0.122 0.364 -0.454 1.000 -0.119 -0.252 -0.329 -0.943
-0.189 -0.254 -0.212 -0.340 -0.238 0.218
ROW 7 0.310 0.222 0.416 0.554 -0.325 -0.119 1.000 0.150 -0.156 0.301
0.041 0.124 0.158 0.065 0.044 -0.116
ROW 8 -0.767 0.140 0.109 0.242 0.035 -0.252 0.150 1.000 0.088 0.408
0.990 0.676 0.979 0.964 0.935 -0.984
ROW 9 -0.448 -0.144 0.565 -0.269 0.547 -0.329 -0.156 0.088 1.000 0.424
0.094 -0.480 0.157 0.245 0.262 -0.154
ROW 10 -0.471 -0.294 0.144 -0.137 0.404 -0.943 0.301 0.408 0.424 1.000
0.336 0.236 0.388 0.473 0.364 -0.384
ROW 11 -0.784 0.186 0.073 0.237 0.064 -0.189 0.041 0.990 0.094 0.336
1.000 0.639 0.979 0.959 0.933 -0.986
ROW 12 -0.484 -0.275 -0.366 -0.065 -0.271 -0.254 0.124 0.676 -0.480 0.236
0.639 1.000 0.573 0.604 0.591 -0.592
ROW 13 -0.761 0.255 0.152 0.315 0.058 -0.212 0.158 0.979 0.157 0.388
0.979 0.573 1.000 0.971 0.944 -0.998
ROW 14 -0.875 0.054 0.083 0.103 0.122 -0.340 0.065 0.964 0.245 0.473
0.959 0.604 0.971 1.000 0.977 -0.977
ROW 15 -0.882 0.001 0.107 0.036 0.105 -0.238 0.044 0.935 0.262 0.364
0.933 0.591 0.944 0.977 1.000 -0.948
ROW 16 0.782 -0.229 -0.129 -0.283 -0.066 0.218 -0.116 -0.984 -0.154 -0.384
-0.986 -0.592 -0.998 -0.977 -0.948 1.000
如果您可以帮助使用传真的每个人,将感激不已!
我编写了一些代码,可以让您一半到达那里!这是在参数估计中读取的,从共同变量矩阵上方的表中读取。
function out = GET_parameter_estimates_from_LogFile(FileAddress)
out = cell(0);
%sometimes its a cell
if iscell(FileAddress)
FileAddress=FileAddress{1};
end
%open it!
fid = fopen(FileAddress,'r');
if fid<0 %the file doesnt exist
display(['the file ',FileAddress,' is missing'])
out={};
else %the file exists
TableNumber=0
while ~feof(fid)
%there are multiple tables of parameter values in the file and we want
%parameter values from all of them!
TableNumber=TableNumber+1;
% Find the line the (next) table starts on!
while ~feof(fid)
line = fgetl(fid);
%is the 5 percent and 95 percent enough of a marker to identify the
%header line?
if ~isempty(strfind(line,'PARAMETER NUMBER,')) && ~isempty(strfind(line,'TYPE,'))
break %found a part of the logfile where parameter values are listed
end
end
if exist('line','var')
line(strfind(line,'NUMBER')-1)='_';
else
display('cant find the SDLN table in ', FileAddress,'using Dummy logfile')
end
if length(line)>1 % don't do anything if its the last line of the file which is length 1
header = textscan(line,'%s','delimiter',' ');
header = header{1};
unwanted_elems = zeros(0);
for i=1:length(header)
if isempty(header{i})
unwanted_elems(end+1)=i;
end
end
if ~isempty(unwanted_elems)
header(unwanted_elems)=[];
end
if size(header,1) > size(header,2)
header = header';
end
out(1,:,TableNumber)=header;
k=2;
% get the stuff under the header
while ~feof(fid)
line = fgetl(fid);
%first non-table line is just a single space
if length(line)<=1
break
end
header = textscan(line,'%s','delimiter',' ');
header = header{1};
unwanted_elems = zeros(0);
for i=1:length(header)
if isempty(header{i})
unwanted_elems(end+1)=i;
end
end
if ~isempty(unwanted_elems)
header(unwanted_elems)=[];
end
if size(header,1) > size(header,2)
header = header';
end
out(k,:,TableNumber)=header;
k=k+1;
end
end
end
fclose(fid);
end
%out is the output
end