Matlab中分段函数的求和

Matlab中分段函数的求和,matlab,symbolic-math,Matlab,Symbolic Math,我有一个分段函数F_m(x)如下,其中x_m和\alpha是常数,m是下标 我需要求解以下涉及F_m(x),其中N和C是常数,tau是我要求解的变量 所以我把这个问题求助于Matlab。首先,我在.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

我有一个分段函数
F_m(x)
如下,其中
x_m
\alpha
是常数,
m
是下标

我需要求解以下涉及
F_m(x)
,其中
N
C
是常数,
tau
是我要求解的变量

所以我把这个问题求助于Matlab。首先,我在.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
但是,在运行Matlab时,我得到了以下错误:

Conversion to logical from sym is not possible.

Error in pareto_CDF (line 4)
    if x < xm
无法从sym转换为逻辑。
pareto_CDF中的错误(第4行)
如果x
现在的问题是:我需要将
x
声明为
sym
,因为它是等式中的变量,因为我调用了
pareto_CDF(x,xm)
,这个函数中的
x
也是
sym
,但是Matlabt不支持
sym
和值(xm)之间的比较。这个错误实际上源于函数
F(x)
的分段性质


那么,我该如何解决这个问题呢

如何更改pareto_CDF,使其以向量作为输入并返回向量作为输出:

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
xm=4;
%用标量x检验
pareto_CDF(1,xm)%=>0
帕累托系数CDF(6,xm)%=>0.556
%向量x检验
帕累托函数([1,6],xm)=>[0,0.556]
结束
函数y=pareto_CDF(x,xm)
α=2;%将alpha设置为2
y=1-(xm./x)。^alpha;
y(x
使用
heaviside()
函数解决了我的问题。重写function.m文件,如下所示:

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

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

我之所以使用逐元素乘积/除法(.*,./),是因为输入可能是一个向量。

祝贺你的分段函数!我有一个可导出函数和一个矩阵!别开玩笑了,我编辑乳胶有困难。我在函数的两边都放了$sign,但它现在似乎不起作用。Stackoverflow没有latex支持。这个笑话是因为你连一个问题都没问。你刚才说你有一个分段函数。在我完成这个问题之前,我就意识到了乳胶的问题。然后我为这个笑话道歉。请使用在线方程式编辑器创建图像并发布。然后在回答之前完成这个问题,以防人们因为不清楚而关闭你的问题。向量有什么区别吗?是的,因此你不需要将x声明为sym,你可以这样做:
sum(pareto_CDF([1,6],xm))
function y=pareto_CDF(x, xm)
    alpha = 2; %set alpha to 2

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