使用arrayfun和bsxfun有什么问题?

时间:2016-08-29 02:53:16

标签: matlab

我想整合功能如下:

在我的代码中,我定义了一个指标函数如下:

PConstFundingRange=[0:0.25:2,Inf];

PConstFunding=[0,TempFundingInitialPara,0]; % Note that TempFundingInitialPara is constant for each interval) 

FundingInitial=@(t)...
    arrayfun(@(s)PConstFunding(find(s<PConstFundingRange,1,'first')),t);

定义了函数后,我定义了另一个函数:FundingInitial

的积分
FundingInitialTerm=...
    @(T,t)arrayfun(@(s1,s2)integral(FundingInitial,s1,s2),t,T);

我的目标是输入两个向量:vec1=[1,2]'vec2=[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9]并计算给定函数f(s)的积分,如下所示:

required

因此,我使用以下代码:
bsxfun(@(T,t)FundingInitialTerm(T,t),Vec1',Vec2)

但是,它会输出以下错误消息:

  

使用arrayfun时出错   
所有输入参数必须具有相同的大小和形状。   
以前的输入在尺寸1上的尺寸为1.输入#3的尺寸为41

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

这样可以计算积分:

f= @(s) sqrt(s);
vec1=[1,2] ; vec2=[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9];
[V2,V1]=meshgrid(vec2,vec1);
arrayfun(@(low,up) integral(f,low,up),V2 ,V1)