在matlab中自动更改标题名称

时间:2017-04-03 11:57:31

标签: matlab

我有两个方程z = x + a n和ze = x + b n,其中a和b是常数。这里x和n从0到10变化,间隔为1。我必须将所有这些写入一个dat文件,第一列的所有值都是x,然后是下一列,其值为z,n = 0,下一列的值为ze,n = 0,z的下一列值为n = 1,ze的下一列值,n = 1,依此类推。而且我还要设一个标题。代码如下:

clear all;clc;
format long;
a=4;
b=2;
mat1=[];
mat2=[];
for n=0:10
    i=0;
    for x=0:1:10
        i=i+1;
         z(i,:)= x+a*n;
         ze(i,:)= x+b*n;
    end
    mat1=[mat1,z, ze];
end
x1(:,1)=0:1:10;
dat1=[x1,mat1];
outputfilename1=('mat1.dat');
fileidentifier1=fopen(outputfilename1,'w+');
fprintf(fileidentifier1,'x\t z0\t ze0\t z1\t ze1\t z2\t ze2\t z3\t ze3\t z4\t ze4\t z5\t ze5\t z6\t ze6\t z7\t ze7\t z8\t ze8\t z9\t ze9\t z10\t ze10\t \r');
fprintf(fileidentifier1,'%7.10f %7.10f %7.10f %7.10f %7.10f %7.10f %7.10f %7.10f %7.10f %7.10f %7.10f %7.10f %7.10f %7.10f %7.10f %7.10f %7.10f %7.10f %7.10f %7.10f %7.10f %7.10f %7.10f \n',dat1');
fclose(fileidentifier1);

问题从头部开始。

我以前做过的事情是我曾经手动给出这些东西的命令:即'x',第一列,'z0'代表第二列,对应于n = 0,'ze0'对应于ze n = 0,'z1'代表z,其中n = 1,'ze1'代表ze,其中n = 1,依此类推。同样,对于格式规范(即%7.10f)。正如你所看到的那样,如果'n'变化达到100或更多,这将是一项艰巨的任务。此外,如果您想将n的值从10更改为9,输出文件仍将显示正确的值,但它的排列方式将变得混乱(您可以自己尝试)。有没有办法自动写这个?

提前致谢....

2 个答案:

答案 0 :(得分:3)

您可以使用z*\t创建所有sprintf组件,并使用数组作为输入。然后,您可以将其与前导'x\t '和尾随\r

连接起来
fprintf(['x\t ', sprintf('z%d\\t ', 0:10), '\r'])

答案 1 :(得分:0)

所以你的问题是动态创建字符串

'x\t z0\t z1\t z2\t z3\t z4\t z5\t z6\t z7\t z8\t z9\t z10\t \r'

您可以循环执行此操作:

str = 'x\t';
for zNum = 0:10
    str = [str, ' z', num2str(zNum), '\t'];
end
str = [str, ' \r'];

输出:

str = 'x\t z0\t z1\t z2\t z3\t z4\t z5\t z6\t z7\t z8\t z9\t z10\t \r'

现在在您的代码中,您可以在相关的行中使用它

fprintf(fileidentifier1, str);