symbolic math - The summation of piecewise functions in Matlab -


i have piecewise function f_m(x) below, x_m , \alpha constants, m subscript.

piecewise function

i need solve following equation involves f_m(x), n , c constants, tau variable want solve.

equation

so resort question matlab. first write function in .m file:

function y=pareto_cdf(x, xm)     alpha = 2; %set alpha 2      if x < xm         y = 0;     else         y = 1-(xm/x)^alpha;     end 

then in .m file write:

syms x; c = 1000;        n = 20000;        %pareto distribution cdf: f(x)=1-(xm/x)^alpha.  %alpha set 2 in program  alpha = 2;  j=1:1:n; f=sum(pareto_cdf(x, 1/(alpha*rand())));   = f - c; tau = solve(a,'x'); 

however, got following error matlab when running it:

conversion logical sym not possible.  error in pareto_cdf (line 4)     if x < xm 

the problem is: need declare x sym because variable in equation, since invoke pareto_cdf(x, xm), x in function sym, matlabt not support comparison between sym , value (xm). error stems piecewise nature of function f(x).

so, how can solve problem?

using heaviside() function resolves problem. rewrite function .m file follows:

function y=pareto_cdf(x, xm)     alpha = 2; %set alpha 2      y = heaviside(x-xm).*(1-(xm/x).^alpha); 

the reason use element-by-element product/division (.*, ./) because input may vector.


Comments

Popular posts from this blog

matlab - "Contour not rendered for non-finite ZData" -

delphi - Indy UDP Read Contents of Adata -

javascript - Any ideas when Firefox is likely to implement lengthAdjust and textLength? -