作者e01234567 (伊武天泽)
看板MATLAB
标题[问题]matlab每次跌代的文字输出
时间Mon Dec 3 13:31:23 2012
我的程式码已经差不多成形了,现在要把数据转换成
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)
1F:→ e01234567:已解决^^" 只是输出完後 整个计算速度变得非常慢 12/03 18:37
2F:→ e01234567:结果计算速度越来越慢 12/03 18:42
後来是我在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)