在Matlab中向量化积分函数

时间:2017-11-25 14:17:01

标签: matlab vector integration vectorization curve-fitting

我在Matlab中有以下功能:

function y = exact_func(q0,x)
q = q0/(1+x^2);
h_func = @(t) sech(t).^2;
fun = @(t) log(1+q*h_func(t));
y = integral(fun,-Inf,Inf)/(q*integral(h_func,-Inf,Inf));
end

它接受位置x和参数q0并返回标量。如何修改函数以便它可以接受x的数组(一系列步骤)?最后,我想把这个函数适用于一些数据(找到最合适的q0,但是然后Matlab抱怨矩阵维度不一致,所以我认为这是因为我当前的函数版本只接受标量x,而非向量x

1 个答案:

答案 0 :(得分:3)

您需要为数组值函数的true'ArrayValued'属性设置为integral。还有一些错误需要使用element-wise operations。请参阅下面的固定代码:

q = q0 ./ (1 + x.^2);    
%       ↑       ↑     You need to use element-wise operations as indicated 
h_func = @(t) sech(t).^2;
fun = @(t) log(1 + q*h_func(t)); %---↓------↓ 
y = integral(fun,-Inf,Inf,'ArrayValued',1) ./ (q*integral(h_func,-Inf,Inf));