2017-04-03 67 views
1

自動更改標題名稱我有兩個方程Z = X + A n和澤= X + B n,其中a和b是常數。這裏x和n的變化範圍是0到10,間隔爲1。我必須寫所有這些上與x的所有值的第一列中,然後用其中n = 0,下一列與具有n = 0,其中n z與下一列值澤值的z值下一列dat文件= 1,n的下一列值爲1,依此類推。而且我還必須放置一個標題。代碼如下所示:在MATLAB

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'對應於n = 0時的z1,z = n時的z1,n = 1時的ze1,以此類推。同樣,對於格式說明(即%7.10f)。正如你所看到的,如果這個'n'變化到100或更多,這將是一項任務的繁忙。此外,如果您想將n的值從10更改爲9,輸出文件仍然會顯示正確的值,但其排列方式會變得不合適(您可以自己嘗試)。有沒有什麼辦法可以自動完成?

在此先感謝....

回答

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' 

無w的代碼,你可以在相關線路

fprintf(fileidentifier1, str); 
+0

@Wolfie ...非常感謝後串連這一點。但是,這裏有一些小麻煩。我在Suever的回答中提到過。請看... –

2

使用它你可以創建全部採用sprintf與數字輸入數組的z*\t組件。然後,您可以與領先的'x\t '\r

fprintf(['x\t ', sprintf('z%d\\t ', 0:10), '\r']) 
+0

非常感謝,這確實非常有幫助。但這裏有一個小小的麻煩。如果您將n的值從10更改爲任何其他值,例如n = 5,您自己就可以看到它。在這種情況下,雖然z將打印到z5,但輸出文件將以奇怪的方式打印。 我在腦海裏想出了一條出路: if if not written 'fprintf(fileidentifier1,'%7.10f%7.10f%7.10f%7.10f%7.10f%7.10f%7.10f%7.10f%7.10 f%7.10f%7.10f%7.10f \ n',dat1')'; 像這樣,是否有可能寫** n次%7.10f **之類的東西。那麼這將是非常有益的多... –

+0

假設我有'對於n = 0:10 I = 0; 對於x = 0:1:10 I = I + 1; Z(I,:)= X + A * N; 端 MAT1 = [MAT1,Z澤]; end' 其中b是任意數字。如果我想在第一列寫入x,那麼z0,z1,... ze0,ze1 ...,我該如何修改程序? matlab默認做的是用這個命令打印z0,ze0,z1,ze1等。我嘗試了這個命令,因爲我需要這樣的頭文件:fprintf(fileidentifier1,['x \ t',sprintf('z%d \\ t',0:10,'ze%d \\ t',0:10 ),'\ r']); **續二分之一** ** –

+0

繼續2分之2** fprintf中(fileidentifier1,「%7.10f%7.10f%7.10f%7.10f%7.10f%7.10f%7.10f%7.10 f%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' ); 我想你現在可能會看到爲什麼我在前面的評論中提出這個問題。 –