이번시간에알아야할것 강의 8. 복소수 (Complex Number), 문자열, 배열 복소수표현법 문자열함수 다차원배열 실습문제 DoeHoon Lee, Ph.D dohoon@pnu.edu Visual Computing & Biomedical Computing Lab(VisBiC) Sh School of Computer Science & Engineering i Pusan National University http://visbic.cse.pnu.edu/ cse pnu edu/ 2010-10-06 2010-10-06 2 복소수 복소수표현 표현 복소수를 2차원평면에표현하는방법으로는실수축과허수축에대한점으로표현 c = a + bi = z θ 에서점 p 는원점에서각도 θ 와길이z를가지는벡터로표현 z cos θ b = z sin θ z = a 2 + b 2 θ= tan -1 b/a 2010-10-06
복소수관련함수 복소수자료그리기 함수 설명 conj( c ) 복소수 c의켤레복소수계산. C=a+bi이면 conj( c )=a bi real( c ) 복소수 c의실수부 imag( c ) 복소수 c의허수부 isreal( c ) 배열c 의어떤원소도허수를갖이않을때 return true abc( c ) 복소수 c 의크기 angle( c ) 복소수편각을 return 복소수는실수부와허수부로가지며그림도별도로그린다 수식 이차원그리기 : 단순한 plot(t,y) plot(t, y, LineWidth,2); title( \bfplot of Complex Function vs Time ); xlabel( \bf\itt ); \ ylabel( \bf\ity(t) ); 2010-10-06 5 6 복소수그리기 복소수그리기 이차원그리기 : 실수부대허수부그래프 이차원그리기 : 실수부와허수부분리 plot(t, real(y), b-, LineWidth,2); hold on; plot(t, imag(y), b-, LineWidth,2); title( \bfplot of Complex Function vs Time ); xlabel( \bf\itt ); plot(y, b-, LineWidth,2); hold on; title( \bfplot of Complex Function ); xlabel( \bfreal Part ); ylabel( \bfimaginary Part ); 2010-10-06 7 2010-10-06 8
복소수그리기 각도대비 y(t) 크기를 polar 명령어로그리기 polar(angle(y),abs(y)); title( \bfplot of Complex Function ); 문자열함수 2010-10-06 9 2010-10-06 문자열함수 2 차원문자배열 문자열 : char 형의배열 예 : str = This is a test 문자열변환함수 double(str) : char 타입을 double 타입으로변환 char(x) : double 타입을 char 타입으로변환 예 x = double(str) z = char(x) char : 문자열을 2 차원문자배열로변환 : 다음명령어비교 name = [ Stephen J. Chapman ; Senior Engineer ]; name = char( Stephen J. Chapman, Senior Engineer ) char 함수 : 2차원문자배열을만들면각행이자동적으로같은길이를갖게됨 deblank 함수 : 여분의공백을제거 예 line2 = Senior Engineer ; line2_trim = deblank(name(2,: )) size(line2) size(line2_trim) 2010-10-06 11 2010-10-06 12
문자열합치기 문자열비교하기 strcat : 두개이상의문자열을수평적으로연결. 이때문자열뒷부분에붙은공백은제거하지만문자열내부의공백은보존. strvcat : 둘이상의문자열을수직적으로배치하면서짧은문자열뒤에공백을추가함으로써적법한 2 차원배열을만듬. >> strcat( String 1, String 2 ) String 1String 2 >> strvcat( Long String 1, String 2 ) Long String 1 String 2 문자열비교 strcmp : 두문자열비교 strcmpi : 두문자열대소문자구분없이비교 strncmp : 두문자열의첫 n문자를비교 strncmpi : 두문자열의첫 n 문자를대소문자구분없이비교 개별적문자비교 비교연산자 (==, >, >=, <, <=, ~=) 는해당문자들의 ascii 값을비교 예 >> fate ; >> b = cake ; >> = b 0 1 0 1 2010-10-06 13 2010-10-06 14 문자열비교하기 문자열비교하기 문자열안의문자들의카테고리 isletter : 문자인가? isspace : 문자가 whitespace(blank, tab, newline) 인가? isstrprop( str, category ) : 주어진문자열이지정한 category에해당되는지결정 범주 설명 alpha 문자열내각문자가 alpahbet이면 1 아니면 0 alphanum 문자열내각문자가영숫자이면 1 아니면 0 cntrl 문자열내각문자가제어문자이면 1 아니면 0 digit 문자열내각문자가숫자이면 1 아니면 0 lower 문자열내각문자가소문자이면 1 아니면 0 wspace 문자열내각문자가여백문자이면 1 아니면 0 upper 문자열내각문자가대문자이면 1 아니면 0 제 >> mystring = Room 23a ; >> isletter(mystring) 1 1 1 1 0 0 0 1 >> isspace(mystring) 0 0 0 0 1 0 0 0 >> isstrprop(mystring, digit ) 0 0 0 0 0 1 1 0 >> isstrprop(mystring, lower ) 0 1 1 1 0 0 0 1 xdigit 문자열내각문자가 16 진수이면 1 아니면 0 2010-10-06 15 2010-10-06 16
문자열내의문자찾기 / 바꾸기 findstr(str, pattern ) : str에서 pattern 이있는위치 strmatch(str, array) : 문자배열 array 에서 str이있는위치 strrep(str, pat1, pat2 ) : str문자열에서 pat1의패턴을 pat2패턴으로바꾸기 [token,reminder] reminder]=strtok(string,delim) : 문자열 string 에서 delim 에의해분리되는문자들을돌려줌. Delim의 default값은 whitespace >> test = This is a test! ; >> position = findstr(test, is ) position = 3 6 >> array = strvcat( maxarray, min value, max value ); >> strmatch( max, array) 1 3 >> strrep(test, test, pest ) This is a pest! >> [token,remainder] = strtok( This is a test! ) token = This remainder = is a test! 2010-10-06 17 2010-10-06 18 대소문자변환 >> upper( This is test! ) THIS IS TEST! >> lower( This is test! ) this is a test! 문자열에서 whitespace 잘라내기 (trimming) deblank : 문자열뒤에붙은여백제거 strtrim : 앞과뒤에붙은여백제거 2010-10-06 19 여백제거 예 >> test_string = This is a test. test_string = This is a test. >> length(test_string) 21 >> test_string_trim1 = deblank(test_string) test_string_trimg1 = This is a test. >> length(test_ string_ trim1) 18 >> test_ string_ trim2 = strtrim(test_ string) test_string_trim2 = This is a test. >> length(test _ string_ trim2) 15 2010-10-06 20
다양한변환 다양한변환 숫자를문자열로변환 (numeric-to-string) int2str(x) num2str(x), num2str(x,7), num2str(x, %10.5e ) 유사한변환 : 변환의결과를문자열로 dec2hex, hex2num,hex2dec, bin2dec, dec2bin, base2dec, dec2base mat2str : 행렬을문자열로변환 sprintf : 양식에맞춰문자열반환 2010-10-06 22 숫자를문자열로 >> x = 5317; >> y = int2str(x); >> whos x : double array y : char array >> p = num2str(pi) p = 3.1416 >> p = num2str(pi,7) p = 3.141593 >> p = num2str(pi, %10.5e ) p = 3.14159e+000 예 >> dec_num = 4035; hex_num = dec2hex(dec_num) hex_hum = FC3 >> [1 2 3; 4 5 6] 1 2 3 4 5 6 >> b = mat2str(a) b = [1 2 3; 4 5 6] >> str=sprintf( pi = %8.6f.,pi) str = pi = 3.141593. 2010-10-06 23 다양한변환 문자열을수치로변환 (String-tonumeric) 예 >> 2 * 3.141592 ; eval : 문자열을 MATLAB 식으로간주하여값을구한후그결과를변환 >> b = eval(a) b = str2double 6.2832 sscanf : 포맷변환문자에따라문자열을수치로바꿈 >> 3.141592 ; >> b = str2double(a) value = sscanf(string, format) b = 3.1416 >> value1 = sscanf(a, %g ) value1 = 3.1416 >> value2 = sscanf(a, %d ) value2 = 3 2010-10-06 24
다차원배열 실습문제 차원에해당하는첨자추가 >> [1 2 3 4; 5 6 7 8] >> a(:,:,2)=[9 10 11 12; 13 14 15 16]; >> a(:,:,3)=[17 : 18 19 20; 21 22 23 24] >> a(2, 2, 2) 14 >> a(1,1,: ) >> b = ones(4,4,2) >> c = randn(2, 2, 3) >> ndims(c) >> size( c ) Function polyadd() 2010-10-06 25 2010-10-06 26 실습문제 실습문제 Function polyadd2() 앞문제에서만약다항식의계수가다음과같을때새로운자료구조가필요하다. p1 = a x 100 +x +1 p2 = x 2 + x +1 위와같이계수의차이가많이나는경우를더하는 polyadd2(p1, p2) 를구현하시오. Fundction drawpolyadd(p1, p2) 곡선 p1, p2 와더해진곡선을각각다표시하라. 2010-10-06 27 2010-10-06 28