Matlab使用技巧(expand函数+数据输出为txt格式+char函数)
1. expand()函数
这个函数能将括号内相乘的多项式(一般是用syms定义的变量)进行展开,方便查看每一项展开后的形式。
e.g. : expand(diff(FinalFormula,p11))
2. matlab中将数据输出保存为txt格式文件的方法
比较有效的一种方法是:fopen()+fprintf()
e.g. 1:
>> a=[17 24 1 8 15;23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 ];
>> fid = fopen('b.txt','wt');
fprintf(fid,'%g\n',a); % \n 是 换行 命令 ,\t是 换列 命令
fclose(fid)
介绍一下fopen()函数和fprintf()函数:
1) fopen()函数
语法1:FID= FOPEN(filename,permission)
FID:是此file的ID,只是用于存储在matlab中的一个标识,可以任意
filename:即要打开的文件名称
permission:是打开方式参数。 打开方式参数由以下字符串确定:
r 读出
w 写入(文件若不存在,自动创建)
a 后续写入(文件若不存在,自动创建)
r+ 读出和写入(文件应已存在)
w+ 重新刷新写入,(文件若不存在,自动创建)
a+ 后续写入(文件若不存在,自动创建)
w 重新写入,但不自动刷新
a 后续写入,但不自动刷新
文件的存储格式:文件打开的默认方式是:二进制。以文本方式打开,可以在方式参 数“permission”中加入“t”文件将,如“rt”,“wt+”
2)fprintf()函数
fprintf函数可以将数据按指定格式写入到文本文件中。
其调用格式为: 数据的格式化输出:fprintf(fid, format, variables)
按指定的格式将变量的值输出到屏幕或指定文件
fid为文件句柄,若缺省,则输出到屏幕
format用来指定数据输出时采用的格式 :
%d 整数
%e 实数:科学计算法形式
%f 实数:小数形式
%g 由系统自动选取上述两种格式之一
%s 输出字符串
e.g.2 :将一列行向量或者列向量输出成矩阵的形式
fid=fopen('C:\Documents and Settings\cleantotal.ped','wt'); %写入文件路径 matrix=input_mattrix %input_matrix为待输出矩阵
[m,n]=size(matrix);
for i=1:1:m
for j=1:1:n
if j==n
fprintf(fid,'%g\n',matrix(i,j));
else
fprintf(fid,'%g\t',matrix(i,j));
end
end
end
fclose(fid);
e.g.3:创建一个字符矩阵并存入磁盘,再读出赋值给另一个矩阵。
>> a='string';
>> fid=fopen('d:\char1.txt','w');
>> fprintf(fid,'%s',a);
>> fclose(fid);
>> fid1=fopen('d:\char1.txt','rt');
>> fid1=fopen('d:\char1.txt','rt');
>> b=fscanf(fid1,'%s')
3.char()函数
这个函数可以将变量、数值类型的值,转化为字符串的格式
e.g.
Mid1=expand(diff(FinalFormula,p11));
Mid2=char(Mid1);
fid1=fopen('Mid1.txt','w');
fprintf(fid1,'%s\n',Mid2);
fclose(fid1);
clear
clc
NumOfGroup=4;
NumOfMemInGroup=5;
NumOfMembers=NumOfMemInGroup.^NumOfGroup;
%%
SelectMatrix1=cell(1,NumOfMemInGroup);
for i=1:NumOfMemInGroup
MiddleMatrix1=zeros(NumOfMemInGroup,1);
MiddleMatrix1(i)=1;
SelectMatrix1{1,i}=MiddleMatrix1;
end
%%
for j=1:NumOfGroup
for i=1:NumOfMemInGroup
syms (['e',num2str(j),num2str(i)]);
end
end
E1=[e11 e12 e13 e14 e15 e21 e22 e23 e24 e25 e31 e32 e33 e34 e35 e41 e42 e43 e44 e45];
E2=cell(1,NumOfGroup);
k=1;
for i=1:NumOfGroup
E2{1,i}=E1(1,k:k+NumOfMemInGroup-1);
k=k+NumOfMemInGroup;
end
k=1;
for a2=1:NumOfMemInGroup
A2=E2{1,1}*SelectMatrix1{1,a2};
for b2=1:NumOfMemInGroup
B2=E2{1,2}*SelectMatrix1{1,b2};
for c2=1:NumOfMemInGroup
C2=E2{1,3}*SelectMatrix1{1,c2};
for d2=1:NumOfMemInGroup
D2=E2{1,4}*SelectMatrix1{1,d2};
E3(1,k)=A2*B2*C2*D2;
k=k+1;
end
end
end
end
%%
for j=1:NumOfGroup
for i=1:NumOfMemInGroup
syms (['p',num2str(j),num2str(i)]);
end
end
for j=1:NumOfGroup
eval(['p',num2str(j),num2str(5),'=',num2str(1),'-','p',num2str(j),num2str(1),'-','p',num2str(j),num2str(2),'-','p',num2str(j),num2str(3),'-','p',num2str(j),num2str(4),';'])
end
P1=[p11 p12 p13 p14 p15 p21 p22 p23 p24 p25 p31 p32 p33 p34 p35 p41 p42 p43 p44 p45];
% P1=[p11 p12 p13 p14 1-(p11+p12+p13+p14) p21 p22 p23 p24 1-(p21+p22+p23+p24) p31 p32 p33 p34 1-(p31+p32+p33+p34) p41 p42 p43 p44 1-(p41+p42+p43+p44)];
P2=cell(1,NumOfGroup);
k=1;
for i=1:NumOfGroup
P2{1,i}=P1(1,k:k+NumOfMemInGroup-1);
k=k+NumOfMemInGroup;
end
k=1;
for a1=1:NumOfMemInGroup
A1=P2{1,1}*SelectMatrix1{1,a1};
for b1=1:NumOfMemInGroup
B1=P2{1,2}*SelectMatrix1{1,b1};
for c1=1:NumOfMemInGroup
C1=P2{1,3}*SelectMatrix1{1,c1};
for d1=1:NumOfMemInGroup
D1=P2{1,4}*SelectMatrix1{1,d1};
P3(1,k)=A1*B1*C1*D1;
k=k+1;
end
end
end
end
FinalFormula=P3*E3';
Mid1=expand(diff(FinalFormula,p11));
Mid2=char(Mid1);
fid1=fopen('Mid1.txt','w');
fprintf(fid1,'%s\n',Mid2);
fclose(fid1);
Mid3=expand(diff(Mid1,p21));
Mid4=expand(diff(Mid3,p31));
Mid4=expand(diff(Mid4,p41));
Mid5=char(Mid4);
fid2=fopen('Mid5.txt','w');
fprintf(fid2,'%s\n',Mid5);
fclose(fid2);
这个函数能将括号内相乘的多项式(一般是用syms定义的变量)进行展开,方便查看每一项展开后的形式。
e.g. : expand(diff(FinalFormula,p11))
2. matlab中将数据输出保存为txt格式文件的方法
比较有效的一种方法是:fopen()+fprintf()
e.g. 1:
>> a=[17 24 1 8 15;23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 ];
>> fid = fopen('b.txt','wt');
fprintf(fid,'%g\n',a); % \n 是 换行 命令 ,\t是 换列 命令
fclose(fid)
介绍一下fopen()函数和fprintf()函数:
1) fopen()函数
语法1:FID= FOPEN(filename,permission)
FID:是此file的ID,只是用于存储在matlab中的一个标识,可以任意
filename:即要打开的文件名称
permission:是打开方式参数。 打开方式参数由以下字符串确定:
r 读出
w 写入(文件若不存在,自动创建)
a 后续写入(文件若不存在,自动创建)
r+ 读出和写入(文件应已存在)
w+ 重新刷新写入,(文件若不存在,自动创建)
a+ 后续写入(文件若不存在,自动创建)
w 重新写入,但不自动刷新
a 后续写入,但不自动刷新
文件的存储格式:文件打开的默认方式是:二进制。以文本方式打开,可以在方式参 数“permission”中加入“t”文件将,如“rt”,“wt+”
2)fprintf()函数
fprintf函数可以将数据按指定格式写入到文本文件中。
其调用格式为: 数据的格式化输出:fprintf(fid, format, variables)
按指定的格式将变量的值输出到屏幕或指定文件
fid为文件句柄,若缺省,则输出到屏幕
format用来指定数据输出时采用的格式 :
%d 整数
%e 实数:科学计算法形式
%f 实数:小数形式
%g 由系统自动选取上述两种格式之一
%s 输出字符串
e.g.2 :将一列行向量或者列向量输出成矩阵的形式
fid=fopen('C:\Documents and Settings\cleantotal.ped','wt'); %写入文件路径 matrix=input_mattrix %input_matrix为待输出矩阵
[m,n]=size(matrix);
for i=1:1:m
for j=1:1:n
if j==n
fprintf(fid,'%g\n',matrix(i,j));
else
fprintf(fid,'%g\t',matrix(i,j));
end
end
end
fclose(fid);
e.g.3:创建一个字符矩阵并存入磁盘,再读出赋值给另一个矩阵。
>> a='string';
>> fid=fopen('d:\char1.txt','w');
>> fprintf(fid,'%s',a);
>> fclose(fid);
>> fid1=fopen('d:\char1.txt','rt');
>> fid1=fopen('d:\char1.txt','rt');
>> b=fscanf(fid1,'%s')
3.char()函数
这个函数可以将变量、数值类型的值,转化为字符串的格式
e.g.
Mid1=expand(diff(FinalFormula,p11));
Mid2=char(Mid1);
fid1=fopen('Mid1.txt','w');
fprintf(fid1,'%s\n',Mid2);
fclose(fid1);
clear
clc
NumOfGroup=4;
NumOfMemInGroup=5;
NumOfMembers=NumOfMemInGroup.^NumOfGroup;
%%
SelectMatrix1=cell(1,NumOfMemInGroup);
for i=1:NumOfMemInGroup
MiddleMatrix1=zeros(NumOfMemInGroup,1);
MiddleMatrix1(i)=1;
SelectMatrix1{1,i}=MiddleMatrix1;
end
%%
for j=1:NumOfGroup
for i=1:NumOfMemInGroup
syms (['e',num2str(j),num2str(i)]);
end
end
E1=[e11 e12 e13 e14 e15 e21 e22 e23 e24 e25 e31 e32 e33 e34 e35 e41 e42 e43 e44 e45];
E2=cell(1,NumOfGroup);
k=1;
for i=1:NumOfGroup
E2{1,i}=E1(1,k:k+NumOfMemInGroup-1);
k=k+NumOfMemInGroup;
end
k=1;
for a2=1:NumOfMemInGroup
A2=E2{1,1}*SelectMatrix1{1,a2};
for b2=1:NumOfMemInGroup
B2=E2{1,2}*SelectMatrix1{1,b2};
for c2=1:NumOfMemInGroup
C2=E2{1,3}*SelectMatrix1{1,c2};
for d2=1:NumOfMemInGroup
D2=E2{1,4}*SelectMatrix1{1,d2};
E3(1,k)=A2*B2*C2*D2;
k=k+1;
end
end
end
end
%%
for j=1:NumOfGroup
for i=1:NumOfMemInGroup
syms (['p',num2str(j),num2str(i)]);
end
end
for j=1:NumOfGroup
eval(['p',num2str(j),num2str(5),'=',num2str(1),'-','p',num2str(j),num2str(1),'-','p',num2str(j),num2str(2),'-','p',num2str(j),num2str(3),'-','p',num2str(j),num2str(4),';'])
end
P1=[p11 p12 p13 p14 p15 p21 p22 p23 p24 p25 p31 p32 p33 p34 p35 p41 p42 p43 p44 p45];
% P1=[p11 p12 p13 p14 1-(p11+p12+p13+p14) p21 p22 p23 p24 1-(p21+p22+p23+p24) p31 p32 p33 p34 1-(p31+p32+p33+p34) p41 p42 p43 p44 1-(p41+p42+p43+p44)];
P2=cell(1,NumOfGroup);
k=1;
for i=1:NumOfGroup
P2{1,i}=P1(1,k:k+NumOfMemInGroup-1);
k=k+NumOfMemInGroup;
end
k=1;
for a1=1:NumOfMemInGroup
A1=P2{1,1}*SelectMatrix1{1,a1};
for b1=1:NumOfMemInGroup
B1=P2{1,2}*SelectMatrix1{1,b1};
for c1=1:NumOfMemInGroup
C1=P2{1,3}*SelectMatrix1{1,c1};
for d1=1:NumOfMemInGroup
D1=P2{1,4}*SelectMatrix1{1,d1};
P3(1,k)=A1*B1*C1*D1;
k=k+1;
end
end
end
end
FinalFormula=P3*E3';
Mid1=expand(diff(FinalFormula,p11));
Mid2=char(Mid1);
fid1=fopen('Mid1.txt','w');
fprintf(fid1,'%s\n',Mid2);
fclose(fid1);
Mid3=expand(diff(Mid1,p21));
Mid4=expand(diff(Mid3,p31));
Mid4=expand(diff(Mid4,p41));
Mid5=char(Mid4);
fid2=fopen('Mid5.txt','w');
fprintf(fid2,'%s\n',Mid5);
fclose(fid2);
评论
发表评论