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);