2014-11-27 2 views
1

다음과 같이 piecewise 함수 F_m(x)이 있습니다. 여기서 x_m\alpha은 상수이고, m은 아래 첨자입니다.Matlab의 piecewise 함수의 합계

piecewise function

나는 tau 내가 해결하려는 변수, NC이 상수 F_m(x)을 포함 다음 방정식을 해결해야합니다.

equation

그래서 나는 matlab에이 질문 리조트. 먼저 내가하는 .m 파일의 기능을 쓰기 : 다른하는 .m 파일에 다음

function y=pareto_CDF(x, xm) 
    alpha = 2; %set alpha to 2 

    if x < xm 
     y = 0; 
    else 
     y = 1-(xm/x)^alpha; 
    end 

를 내가 쓰기 : 그러나

syms x; 
C = 1000;  
N = 20000;  

%Pareto Distribution CDF: F(x)=1-(xm/x)^alpha. 
%alpha is set to 2 in this program 

alpha = 2; 

j=1:1:N; 
f=sum(pareto_CDF(x, 1/(alpha*rand()))); 


a = f - C; 
tau = solve(a,'x'); 

, 나는 그것을 matlab에에서 다음과 같은 오류 실행에 도착했을 때 :

Conversion to logical from sym is not possible. 

Error in pareto_CDF (line 4) 
    if x < xm 

문제는 지금 : 나는 pareto_CDF(x, xm)를 호출 이후, 그것은 방정식의 변수 때문에 symx를 선언 할 필요는이 함수의도 sym이지만 Matlabt는 sym과 값 (xm) 사이의 비교를 지원하지 않습니다. 이 오류는 실제로는 함수 F(x)의 조각 별 특성에 기인합니다.

그럼 어떻게이 문제를 해결할 수 있습니까? pareto_CDF 변경에 대한이 입력으로 벡터를 취하도록하고 출력으로 벡터를 반환 무엇

+0

조각 별 기능을 사용하신 것을 축하드립니다! 나는 deribable 함수와 행렬을 가지고있다! –

+0

농담 말고, 라텍스 편집에 문제가 있습니다. 함수의 양쪽에 $ 기호를 넣었지만 지금은 작동하지 않는 것 같습니다. – Bloodmoon

+0

Stackoverflow에는 라텍스가 지원되지 않습니다. 농담은 단지 질문조차하지 않았기 때문입니다. 당신은 방금 조각 별 기능을 가지고 있다고 말했습니다. –

답변

0

:

xm = 4; 
% test with scalar x 
pareto_CDF(1, xm) % => 0 
pareto_CDF(6, xm) % => 0.556 

% test with vector x 
pareto_CDF([1,6] , xm) => [0, 0.556] 

end 

function y = pareto_CDF(x, xm) 
alpha = 2; %set alpha to 2 

y = 1-(xm./x).^alpha; 
y(x < xm) = 0; 

end 
+0

벡터는 어떤 차이가 있습니까? – Bloodmoon

+0

예, 그렇기 때문에 x를 sym로 선언 할 필요가 없습니다. 'sum (pareto_CDF ([1,6], xm))' – Rascarcapac

2

heaviside() 기능을 사용하여 내 문제를 해결합니다. 다음과 같이 기능하는 .m 파일을 다시 상기 입력 벡터가 될 수 있기 때문에

function y=pareto_CDF(x, xm) 
    alpha = 2; %set alpha to 2 

    y = heaviside(x-xm).*(1-(xm/x).^alpha); 

이유는 I는 엘리먼트별로 제품/분할을 사용. (* ./)이다.

관련 문제