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);

评论

此博客中的热门博文

Latex编辑总结(图形大小调整+数学公式大小调整)

控制Matlab自启动+Matlab自动运行Parallel Computing