맥시마를 처음 시작할 때 잘못 쓰기 쉬운 기호 중 하나가 바로 =이다. 보통 다른 프로그래밍 언어에서는 대입 연산자(우항 값을 좌항에 저장하는)로 사용되므로 이것에 익숙해서 여기에서도 당연히 대입 연산자일거라고 생각하기 때문이다. 그런데 맥시마의 대입 연산자는 : , :=, :: , ::= 이 네 가지이다.


맥시마에서 =는

① 등식(eqation)을 만들거나

② ‘같다’를 판변하는 비교 연산자로 사용되는 기호이다.


아래 예를 보자


첫 번째에서 x=2라고 입력하면 변수 x에 2를 입력한 것이 아니다. 그냥 (x=2)라는 등식을 입력한 것이다. 두 번째 예에서는 변수 a에 (x=2)라는 등식 자체를 입력한 것이다. Maxima에서 변수는 상수뿐만 아니라 뒤에 나오겠지만 표현식(expression)도 저장할 수 있다. 아래의 예는 변수 b에 x2-2x+1=0 이라는 방정식 자체를 입력한 것이다.


그리고 ‘=’기호는 조건 검사문 if 문과 뒤에오는 조건식에서 ‘같다’를 판별하는 논리 연산자로 쓰인다.

위에서 if 문 뒤의 (x = %pi) 에서 =는 변수 x값이 π와 같은지를 검사하는 비교 연산자이다. 이 논리식이 참이기 때문에 변수 a에 1값이 대입되었다.

 비교 연산자로 쓰이는 <, >, <=, >=도 비교 연산자 뿐만 아니라 부등식(inequality)를 만드는 데에 사용된다.

위의 첫 번째 입력은 c라는 변수에 2y+1<0 이라는 부등식을 대입한 것이다. 두 번째 입력에서 (d>2)는 if문 뒤의 조건식이다. 이것이 참이므로 e변수에 true값이 저장된다.



Posted by 살레시오

댓글을 달아 주세요

 scilab에서 어떤 조건이 참인지 거짓인지 판별한는데 if 명령이 사용되며 만약 if 문 바로 뒤의 조건문이 참이라면 명령문들을 수행한다. if 문은 반드시 end문과 쌍을 이루어야 한다. 간단한 예를 들면 다음과 같다.


>> if %t then
     disp(“True!”)
  end


이 예는 if 문 뒤의 진리값이 항상 참이므로 then과 end 사이의 명령이 항상 실행될 것이다. else 문을 이용하면 진리값이 거짓일 경우 수행될 코드를 처리할 수 있다.


>> n=%e;
>> if n==%pi then
       a=1
   else
       a=2
   end


위의 조건 검사문은 if문 뒤의 조건이 거짓이므로 변수 a는 2값을 가질 것이다. 또한 elseif 명령을 이용하여 여러 조건 검사를 한꺼번에 수행할 수도 있다.


>> n=2;
>> if n==%pi then
     a=1
  elseif n==%e then
     a=2
  else
     a=3
  end


위의 예에서 변수 a는 3값을 가지게 될 것이다.


 조건검사에 쓰이는 비교 연산자를 다음 표에 정리하였다.


[표 1] 조건 검사에 사용되는 비교/논리연산자

비교연산자

설명

a==b

(비교연산자) 같다

a~=b 혹은 a<>b

(비교연산자) 다르다

a<b

(비교연산자) 크다

a>b

(비교연산자) 작다

a<=b

(비교연산자) 크거나 같다

a>=b

(비교연산자) 작거나 같다

a & b

(논리연산자) and

a | b

(논리연산자) or

~a

(논리연산자) not


‘같다’를 검사하는 연산자는  == 이며 = 가 아님에 주의해야 한다. 조건식에 대입연산자 =를 사용하면 에러를 발생하게 된다.


 대소비교를 하는 <, >, <=. >= 네 개의 연산자는 피연산자로 오직 실수(행렬)만이 허용됨을 유의해야 한다. 복소수는 수학적으로도 대소 관계가 정의되어 있지 않으므로 Scilab에서도 그것이 허용되지 않는다.


>>1+2*%i < 3
        !--error 144
Undefined operation for the given operands.
check or define function %s_1_s for overloading.

단 ==, ~= (혹은 <>) 연산은 허용된다. 복소수의 경우 실수부와 허수부가 모두 같아야 참(%t)이 반환될 것이다.


 논리 연산자를 사용할 때 한가지 알아두어야 할 점은 피 연산자가 벡터(행렬)인 경우이다. 다음 예들을 보자.


>> [1 2 3] == 1
ans  =
 T F F  

>>[1 2 3] == [1 2]
ans  =
 F  

>>[1 2;3 4] == [1 2; 3 5]
ans  =
 T T  
 T F  


위의 예들에서 보듯이 다음과 같이 정리할 수 있다.


       ➊ 하나가 스칼라, 다른 하나가 행렬일 경우 스칼라와 행렬의 모든 요소를 비교한다.

       ➋ 둘 다 행렬이고 크기가 다를 경우 거짓 (%f)가 반환된다.

       ➌ 둘 다 행렬이고 크기가 같을 경우 같은 위치의 요소끼리 비교한다.


만약 행렬의 상동을 if 문으로 비교할 경우 크기와 모든 요소가 같아야 참으로 간주된다.


>>a=0
>>A=[1 2; 3 4]
>>B=[1 2;3 5]
>>C=[1 2;3 4]
>> if A==B then // [T T; T F]
     a=1;
  elseif A==C then // [T T;T T]
     a=2;
  else
     a=3;
  end


위의 예에서 변수 a는 2값을 가질 것이다.



Posted by 살레시오

댓글을 달아 주세요