이번시간에알아야할것 강의 8. 복소수 (Complex Number), 문자열, 배열 DoeHoon Lee, Ph.D dohoon@pnu.edu 복소수표현법문자열함수다차원배열실습문제 Visual Computing & Biomedical Computing Lab(VisBiC) School of Computer Science & Engineering Pusan National University http://visbic.cse.pnu.edu/ cse pnu edu/ 2 복소수 복소수표현 표현 복소수를 2차원평면에표현하는방법으로는실수축과허수축에대한점으로표현 c = a + bi = z θ 에서점 p는원점에서각도 θ 와길이 z 를가지는벡터로표현 z cos θ b = z sin θ z = a 2 + b 2 θ= tan -1 b/a imaginary axis θ z P a + bi real axis 4
복소수관련함수 복소수자료그리기 함수 conj( c ) 설명 복소수 c 의켤레복소수계산. C=a+bi 이면 conj( c )=a-bi 복소수는실수부와허수부로가지며그림도별도로그린다 수식 real( c ) imag( c ) 복소수 c의실수부복소수 c의허수부 이차원그리기 : 단순한 plot(t,y) isreal( c ) abc( c ) 배열c의어떤원소도허수를갖이않을때 return true 복소수 c의크기 plot(t, y, LineWidth,2); title( \bfplot of Complex Function vs Time ); xlabel( \bf\itt ); ylabel( \bf\ity(t) ); angle( c ) 복소수편각을 return 5 6 복소수그리기 복소수그리기 이차원그리기 : 실수부와허수부분리 이차원그리기 : 실수부대허수부그래프 plot(t, real(y), b-, LineWidth,2); plot(y, b-, LineWidth,2); hold on; hold on; plot(t, imag(y), b-, LineWidth,2); title( \bfplot of Complex Function ); title( \bfplot of Complex Function vs Time ); xlabel( \bfreal Part ); xlabel( \bf\itt ); l( \bf\itt ) ylabel( \bfimaginary l( \bfi Part ); 7 8
복소수그리기 각도대비 y(t) 크기를 polar 명령어로그리기 polar(angle(y),abs(y)); title( \bfplot t of Complex Function ); 문자열함수 9 문자열함수 2 차원문자배열 문자열 : char 형의배열 char : 문자열을 2 차원문자배열로변환 : str = This is a test 문자열변환함수 double(str) : char 타입을 double 타입으로변환 char(x) : double 타입을 char 타입으로변환 : 다음명령어비교 name = [ Stephen J. Chapman ; Senior Engineer ]; name = char( Stephen J. Chapman ; Senior Engineer ) x = double(str) char 함수 : 2 차원문자배열을만들면각행이자동적으로같은길이를갖게됨 z = char(x) delblank 함수 : 여분의공백을제거 line2 = Senior Engineer ; line2_trim = delblank(name(2,: )) size(line2) size(line2_trim) 11 12
문자열합치기 문자열비교하기 strcat t : 두개이상의문자열을수평적으로연결. 이때문자열뒷부분에붙은공백은제거하지만문자열내부의공백은보존. 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 13 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 xdigit 문자열내각문자가 16 진수이면 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 15 16
문자열내의문자찾기 / 바꾸기 findstr(str, pattern ) : str 에서 pattern 이있는위치 strmatch(str, array) : 문자배열 array 에서 str 이있는위치 strrep(str, pat1, pat2 ) : str 문자열에서 pat1 의패턴을 pat2 패턴으로바꾸기 [token,reminder]=strtok(string,delim) : 문자열 string 에서 delim 에의해분리되는문자들을돌려줌. Delim 의 default 값은 whitespace >> test = This is a test! ; >> position = findstr(test, is ) position = >> array = strvcat( maxarray, min value, max value ); >> strmatch( max, array) 1 3 >> strrep(test, test, pest ) This is a pest! 3 6 >> [token,remainder] = strtok( This is a test!) token = This remainder = is a test! 17 18 대소문자변환 >> upper( This is test! ) 여백제거 >> test_string = This is a test. test_string = THIS IS TEST! >> lower( This is test! ) This is a test. >> length(test_string) 21 this is a test! 문자열에서 whitespace 잘라내기 (trimming) delblank : 문자열뒤에붙은여백제거 strtrim : 앞과뒤에붙은여백제거 >> test_string_trim1 = delblank(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 19 20
다양한변환 다양한변환 숫자를문자열로변환 (numeric-to-string) ti int2str(x) num2str(x), num2str(x,7), num2str(x, %10.5e ) 유사한변환 : 변환의결과를문자열로 dec2hex, hex2num,hex2dec, bin2dec, dec2bin, base2dec, dec2base mat2str : 행렬을문자열로변환 sprintf : 양식에맞춰문자열반환 22 숫자를문자열로 다양한변환 >> x = 5317; >> y = int2str(x); >> whos hex_humhum = FC3 x : double array y : char array >> [1 2 3; 4 5 6] 1 2 3 4 5 6 >> 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) >> b = mat2str(a) b = [1 2 3; 4 5 6] >> str=sprintf( pi = %8.6f.,pi) str = pi = 3.141593. 23 문자열을수치로변환 (String-to- t numeric) >> 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 = 24 3
다차원배열 실습문제 차원에해당하는첨자추가 Function polyadd() >> 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) 25 26 실습문제 실습문제 Function polyadd2() 앞문제에서만약다항식의계수가다음과같을때새로운자료구조가필요하다. p1 = a n x 100 +x +1 p2 = x 2 + x +1 위와같이계수의차이가많이나는경우를더하는 polyadd2(p1, p2) 를구현하시오. Fundction drawpolyadd(p1, dd( p2) 곡선 p1, p2 와더해진곡선을각각다표시하라. 27 28