[問題]matlab每次跌代的文字輸出
我的程式碼已經差不多成形了,現在要把數據轉換成
tecplot的模式 的方式來輸出的文字檔..
先看程式碼..看完我再繼續講^^"
function [xm] = code7(A,b,x0,tol,max_it);
%輸入及輸出:
%此跌代只適用於右邊界 dφ/dx=0
% A 係數矩陣(n乘n)
% b 右側項(n乘1)
% x0 初始解(n乘1)
% tol 若x變量的範數<tol則停止
% max_it 最大跌代次數,若範數仍>tol,則不收斂
% x 解向量(n乘1)
%B 定出原方格&邊界值
%xm 最後輸出答案
[n,m]=size(A);
xold=x0;
B=ones((0.9*n)^0.5+2, (0.9*n)^0.5+2);%定義出原方格的維數
for i=1:(0.9*n)^0.5+2
up(:,i)=100-7*(i-1); %補回上邊界
end
B(1,1:(0.9*n)^0.5+2)=up;
for i=1:(0.9*n)^0.5+2
left(i,:)=100-10*(i-1); %補回左邊界
end
B(1:(0.9*n)^0.5+2,1)=left;
for i=1:(0.9*n)^0.5+2
down(:,i)=6*(i-1) ;%補回下邊界
end
B((0.9*n)^0.5+2,1:(0.9*n)^0.5+2)=down;%定義完B的邊界了
C=-A;
for i=1:n
C(i,i)=0;
end
for i = 1:n
C(i,:)=C(i,:)/A(i,i);
end
for i=1:n
d(i,1)=b(i)/A(i,i);
end
disp('i x1 x2 x3 ....');
tic
u=0
while(u <=max_it)
xnew=C*xold+d;
xMat = rot90(reshape(xnew, (0.9*n)^0.5+1, (0.9*n)^0.5)) ;% 將 x 排回原來的
位置
B(2:(end-1), 2:end) = xMat ;% 將排好的 x 塞回方格
if norm(xnew-xold) <= tol
x=xnew;
xm=B;
fw=fopen('text.txt','w');
fprintf(fw,' VARIABLES=X,Y,H');
fprintf(fw,'\r\n');
fprintf(fw,'ZONE F=POINT I= 11,J= 11');
for i=1:11
for j=1:11
fprintf(fw,'\r\n');
fprintf(fw,'%f',(j-1)*0.1);
fprintf(fw,' %f',(10-(i-1))*0.1);
fprintf(fw,' %f',xm(i,j));
end
end
fclose(fw);
disp('Jacobi method converged');return;
else
xold=xnew;
end
disp([i xnew']);
u=u+1;
fprintf('跌代次數= %f \n',u);
end
toc
disp('Jacobi method did not converge');
disp('results after maximum number of iterations');
x=xnew;
xMat = rot90(reshape(xnew, (0.9*n)^0.5+1, (0.9*n)^0.5)) ;% 將 x 排回原來的位置
B(2:(end-1), 2:end) = xMat ;% 將排好的 x 塞回方格
xm=B;
我想要的效果是每算出一個xf就讓他存一個檔
例如test(1).txt好了
之後跌代第二次 又是test(2)這樣子
But..我這樣寫的話,總是只會存最後一個,而且也只有一個檔
剛剛想要寫迴圈讓他往下作,卻苦於不知道如何開始。..
還有就是我的計時器,當他收斂時,則不出現秒數...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.120.229.231
※ 編輯: e01234567 來自: 140.120.229.231 (12/03 13:35)
※ 編輯: e01234567 來自: 140.120.229.231 (12/03 13:43)
→
12/03 18:37, , 1F
12/03 18:37, 1F
→
12/03 18:42, , 2F
12/03 18:42, 2F
後來是我在while裡面包了
\xf=B;
for i=1:u
filestr=['J:\Program Files\MATLAB\R2012a\bin\10-5\test' num2str(i)
'.txt'];
fw=fopen(filestr, 'w');
fprintf(fw,' VARIABLES=X,Y,H');
fprintf(fw,'\r\n');
fprintf(fw,'ZONE F=POINT I= 11,J= 11');
for i=1:(0.9*n)^0.5+2
for j=1:(0.9*n)^0.5+2
fprintf(fw,'\r\n');
fprintf(fw,'%f',(j-1)*0.1);
fprintf(fw,' %f',(10-(i-1))*0.1);
fprintf(fw,' %f',xf(i,j));
end
end
fclose(fw);
end
※ 編輯: e01234567 來自: 140.120.229.231 (12/03 18:43)
問題已解決 感恩^^",發現這個地方用向量去作
另a=1:u 讓bum2str(i)裡的i改成u,就作得動了,
運算時間是四百倍左右,用迴圈跑只會越跑會慢.....
※ 編輯: e01234567 來自: 140.120.229.231 (12/04 01:34)