2014-05-17 3 views
1

내가 입력 :"pi"가 MATLAB에서 상징적으로 나타나는 이유는 무엇입니까? matlab에 명령 창에서

s = 

pi*f*2*j 

pi는 3.141592로 계산되지 않는 것입니다 반환

syms f; 
s = 2*pi*f*j; 
s 

하는 ... 내가 명령 창에 입력 한 코드를 잘못 무엇입니까?

+3

3.141592가 pi와 같지 않기 때문에. – David

+0

그럼 s는 단지 s = pi * f * 2 * j입니까? 내가 f, pi를 설정하고 s를 숫자로 쓰고 싶다면? – user3595632

답변

4

부동 소수점 근사치가 아니라 정확한 답을 얻을 수있는 상징적 수학에 오신 것을 환영합니다. "숫자를 얻고 싶으면"기호가 아닌 함수와 연산을 사용하거나 기호 결과를 다시 부동 소수점으로 변환 할 수 있습니다.

syms f 
s = vpa(pi)*f*j 

더의 documentation for vpa을 참조 : 또는

syms f 
s = pi*f*2*j 
s2 = subs(s,f,2) 
s3 = double(s2) 

, 당신은 상징적 인 표현의 지정된 수준의 진수 근사치로 pi을 나타내는 변수 정밀 연산을 사용할 수 있습니다 : 예를 들어

세부. 비슷한 것을 이루기 위해 sym 함수를 사용할 수도 있습니다.

그러나 너무 빨리 소수점 또는 부동 소수점 표현으로 변환하면 기호화 된 연산 능력을 잃을 수 있습니다. 예를 들어 다음 표현식 간의 차이를 비교하십시오.

sin(pi)  % 1.224646799147353e-16 
sin(vpa(pi)) % -3.2101083013100396069547145883568e-40 
sin(sym(pi)) % 0, sin(sym(1)*pi) and sin(sym(pi,'r')) also return zero 

마지막 표현식 만 표현식에서 완전히 취소되므로 단순화됩니다.

+0

정말 큰 도움을 주셔서 감사합니다 !!! 감사합니다. – user3595632

+0

PI가 기본 MuPAD 엔진에 의해 평가되는 상징적 표현식으로 전달되는 경우 정확히'sym ('pi')'를 사용해야합니다. 숫자 입력을'sym'에 전달할 때 부동 소수점 숫자를 변환하는 데 일정한 양의 반올림 오류가 있습니다 ([docs] (http://www.mathworks.com/help/symbolic/sym. html # inputarg_flag)에 대해 'sym (num, flag)'형식을 사용합니다. 기본적으로'sym (pi)'는'sym (pi, 'r')'와 동일하다.이 "합리적인"형태는 pi를 포함한 표현식에 적합하다. 다른 형태 ('sym (pi, 'd')','sym (pi, 'e')','sym (pi, 'f')')를 시도하면 다른 근사값을 얻을 수 있습니다 – Amro

관련 문제