목차
4장. MATLAB의 기타 명령들과 파일처리 명령
■ 디스크 화일의 조작
■ 외부 프로그램의 수행
■ 자료의 읽기와 쓰기
■화일의 열고 닫기 ( Open , Close )
■화일 내에서의 위치 제어 : fseek , ftell
■ 형식화된 문자 화일 쓰기 : fprintf
■ 형식화된 문자 파일 일기 : fscanf
■ 형식화된 문자열 읽기 쓰기 : sscanf , sprintf
■ 랜덤한 데이터를 발생하고 이 데이터를 파일에 저장하고 다시 읽어보면
■데이터 읽어 들이기
■ 디스크 화일의 조작
■ 외부 프로그램의 수행
■ 자료의 읽기와 쓰기
■화일의 열고 닫기 ( Open , Close )
■화일 내에서의 위치 제어 : fseek , ftell
■ 형식화된 문자 화일 쓰기 : fprintf
■ 형식화된 문자 파일 일기 : fscanf
■ 형식화된 문자열 읽기 쓰기 : sscanf , sprintf
■ 랜덤한 데이터를 발생하고 이 데이터를 파일에 저장하고 다시 읽어보면
■데이터 읽어 들이기
본문내용
800 4.9530 5.4740
6.0500 6.6859 7.3891
1.0000 0.9950 0.9801
0.9600 0.9211 0.8776
0.8300 0.7648 0.6967
0.6200 0.5403 0.4536
0.3600 0.2675 0.1700
0.0700 -0.0292 -0.1288
-0.2300 -0.3233 -0.4162
>> count % 총 데이터의 수
count =
63
>> fclose(fr); % 파일 닫기
■ 형식화된 문자열 읽기 쓰기 : sscanf , sprintf
▶ sprinf : 문자열로 표시
>> a = sprintf(\'%0.5g\',(1+sqrt(5))/2) 1.618
>> a = sprintf(\'%0.5g\',1/eps) 4.5036e+15
>> a = sprintf(\'%15.5f\',1/eps) 4503599627370496.00000
>> a = sprintf(\'%d\',round(pi)) 3
>> a = sprintf(\'%s\',\'hello\') hello
>> a = sprintf(\'The array is %dx%d.\',2 , 3) The array is 2x3.
>> a = sprintf(\'\\n\') 라인의 끝
>> cosine = sprintf(\'%f 의 코사인 값은 %f 이다\\n‘ ,5, cos(5))
cosine =
5.000000 의 코사인 값은 0.283662 이다
▶ sscanf : 파일 대신에 문자열로부터 입력 값을 받아들이는 함수
>> S = \'2.7183 3.1416\';
>> A = sscanf(S,\'%f\')
A =
2.7183
3.1416
앞에서 선언된 cosine 스트링 변수로부터 입력 값을 읽어 들여서 5.00000 와 0.283662의 코사인 값으로 구성된 열 터를 돌려준다.
>> sscanf(cosine, \'%f 의 코사인 값은 %f 이다\\n\')
ans =
5.0000
0.2837
sprintf 에서 설정한 문장과 일치해야 정확한 값을 얻을 수 있다. Sine value of %f is %f. 대신에 ‘%f %f.’만을 입력하면 아무것도 나타나지 않고, Sine value of %f %f.로 입력하면 0.5000만이 출력된다.
■ 랜덤한 데이터를 발생하고 이 데이터를 파일에 저장하고 다시 읽어보면
rand(\'seed\',sum(clock));
p=floor(6*rand(1));
q=floor(4*rand(1));
A=triu(tril(rand(7,5),q),-p);
p=floor(6*rand(1));
q=floor(4*rand(1));
B=triu(tril(rand(7,5),q),-p);
fid=fopen(\'randmatrix.txt\',\'wt\');
fprintf(fid,\'A=\\n\');
for i=1:7
fprintf(fid,\'%9.5f \',A(i,:));
fprintf(fid,\'\\n\');
end
fprintf(fid,\'B=\\n\');
for i=1:7
fprintf(fid,\'%9.5f \',B(i,:));
fprintf(fid,\'\\n\');
end
fclose(fid);
>>type randmatrix.txt
A=
0.47989 0.58597 0.22723 0.00000 0.00000
0.50100 0.32364 0.98789 0.61304 0.00000
0.27552 0.38432 0.45644 0.36820 0.60543
0.68468 0.19300 0.47096 0.25836 0.54335
0.00000 0.73677 0.36552 0.30464 0.15280
0.00000 0.00000 0.26576 0.15238 0.15344
0.00000 0.00000 0.00000 0.04800 0.88748
B=
0.92669 0.00000 0.00000 0.00000 0.00000
0.91368 0.22809 0.00000 0.00000 0.00000
0.25483 0.48152 0.14561 0.00000 0.00000
0.98095 0.89169 0.34427 0.80437 0.00000
0.87516 0.70031 0.22828 0.07428 0.46696
0.84029 0.16888 0.65144 0.40075 0.18087
0.00000 0.31443 0.77356 0.44683 0.80338
■데이터 읽어 들이기
fid=fopen(\'randmatrix.txt\',\'rt\');
A=zeros(7,5);
B=zeros(7,5);
fgets(fid)
A=fscanf(fid,\'%f \');
A=reshape(A,5,7)\';
fgets(fid)
B=fscanf(fid,\'%f \');
B=reshape(B,5,7)\';
C=A.*B
D=A.^B
fclose(fid);
<실행결과>
x1=input( \'시작점 x= \')
y1=input( \'시작점 y= \')
x2=input( \'종점 x= \')
y2=input( \'종점 y= \')
n=input(\'점의 수 = \');
x=linspace(x1,x2,n);
y=linspace(y1,y2,n);
[fx, fy]=fm(\'dsine\',x,y);
fm=(fx.*fx+fy.*fy).^0.5;
colormap(cool);
mesh(x,y,fm);
=============================================
function [fx, fy] = fm(fn,x,y,delta,M);
if nargin<5
M=10;
end
if nargin<4
delta=eps;
end
h=(3*delta/(8*M))^(1/3);
fx=(feval(fn,x+h,y)-feval(fn,x-h,y))/(2*h);
fy=(feval(fn,x,y+h)-feval(fn,x,y-h))/(2*h);
=============================================
function f=dsine(x,y)
f=exp(-4*x\')*sin(y);
=============================================
<실행>
시작점 x= 5
시작점 y= 5
종점 x= 20
종점 y= 20
점의 수 = 100
▶ MATLAB의 자료형과 C언어 자료형간의 비교
6.0500 6.6859 7.3891
1.0000 0.9950 0.9801
0.9600 0.9211 0.8776
0.8300 0.7648 0.6967
0.6200 0.5403 0.4536
0.3600 0.2675 0.1700
0.0700 -0.0292 -0.1288
-0.2300 -0.3233 -0.4162
>> count % 총 데이터의 수
count =
63
>> fclose(fr); % 파일 닫기
■ 형식화된 문자열 읽기 쓰기 : sscanf , sprintf
▶ sprinf : 문자열로 표시
>> a = sprintf(\'%0.5g\',(1+sqrt(5))/2) 1.618
>> a = sprintf(\'%0.5g\',1/eps) 4.5036e+15
>> a = sprintf(\'%15.5f\',1/eps) 4503599627370496.00000
>> a = sprintf(\'%d\',round(pi)) 3
>> a = sprintf(\'%s\',\'hello\') hello
>> a = sprintf(\'The array is %dx%d.\',2 , 3) The array is 2x3.
>> a = sprintf(\'\\n\') 라인의 끝
>> cosine = sprintf(\'%f 의 코사인 값은 %f 이다\\n‘ ,5, cos(5))
cosine =
5.000000 의 코사인 값은 0.283662 이다
▶ sscanf : 파일 대신에 문자열로부터 입력 값을 받아들이는 함수
>> S = \'2.7183 3.1416\';
>> A = sscanf(S,\'%f\')
A =
2.7183
3.1416
앞에서 선언된 cosine 스트링 변수로부터 입력 값을 읽어 들여서 5.00000 와 0.283662의 코사인 값으로 구성된 열 터를 돌려준다.
>> sscanf(cosine, \'%f 의 코사인 값은 %f 이다\\n\')
ans =
5.0000
0.2837
sprintf 에서 설정한 문장과 일치해야 정확한 값을 얻을 수 있다. Sine value of %f is %f. 대신에 ‘%f %f.’만을 입력하면 아무것도 나타나지 않고, Sine value of %f %f.로 입력하면 0.5000만이 출력된다.
■ 랜덤한 데이터를 발생하고 이 데이터를 파일에 저장하고 다시 읽어보면
rand(\'seed\',sum(clock));
p=floor(6*rand(1));
q=floor(4*rand(1));
A=triu(tril(rand(7,5),q),-p);
p=floor(6*rand(1));
q=floor(4*rand(1));
B=triu(tril(rand(7,5),q),-p);
fid=fopen(\'randmatrix.txt\',\'wt\');
fprintf(fid,\'A=\\n\');
for i=1:7
fprintf(fid,\'%9.5f \',A(i,:));
fprintf(fid,\'\\n\');
end
fprintf(fid,\'B=\\n\');
for i=1:7
fprintf(fid,\'%9.5f \',B(i,:));
fprintf(fid,\'\\n\');
end
fclose(fid);
>>type randmatrix.txt
A=
0.47989 0.58597 0.22723 0.00000 0.00000
0.50100 0.32364 0.98789 0.61304 0.00000
0.27552 0.38432 0.45644 0.36820 0.60543
0.68468 0.19300 0.47096 0.25836 0.54335
0.00000 0.73677 0.36552 0.30464 0.15280
0.00000 0.00000 0.26576 0.15238 0.15344
0.00000 0.00000 0.00000 0.04800 0.88748
B=
0.92669 0.00000 0.00000 0.00000 0.00000
0.91368 0.22809 0.00000 0.00000 0.00000
0.25483 0.48152 0.14561 0.00000 0.00000
0.98095 0.89169 0.34427 0.80437 0.00000
0.87516 0.70031 0.22828 0.07428 0.46696
0.84029 0.16888 0.65144 0.40075 0.18087
0.00000 0.31443 0.77356 0.44683 0.80338
■데이터 읽어 들이기
fid=fopen(\'randmatrix.txt\',\'rt\');
A=zeros(7,5);
B=zeros(7,5);
fgets(fid)
A=fscanf(fid,\'%f \');
A=reshape(A,5,7)\';
fgets(fid)
B=fscanf(fid,\'%f \');
B=reshape(B,5,7)\';
C=A.*B
D=A.^B
fclose(fid);
<실행결과>
x1=input( \'시작점 x= \')
y1=input( \'시작점 y= \')
x2=input( \'종점 x= \')
y2=input( \'종점 y= \')
n=input(\'점의 수 = \');
x=linspace(x1,x2,n);
y=linspace(y1,y2,n);
[fx, fy]=fm(\'dsine\',x,y);
fm=(fx.*fx+fy.*fy).^0.5;
colormap(cool);
mesh(x,y,fm);
=============================================
function [fx, fy] = fm(fn,x,y,delta,M);
if nargin<5
M=10;
end
if nargin<4
delta=eps;
end
h=(3*delta/(8*M))^(1/3);
fx=(feval(fn,x+h,y)-feval(fn,x-h,y))/(2*h);
fy=(feval(fn,x,y+h)-feval(fn,x,y-h))/(2*h);
=============================================
function f=dsine(x,y)
f=exp(-4*x\')*sin(y);
=============================================
<실행>
시작점 x= 5
시작점 y= 5
종점 x= 20
종점 y= 20
점의 수 = 100
▶ MATLAB의 자료형과 C언어 자료형간의 비교
소개글