Nested integral within integral2

13 Ansichten (letzte 30 Tage)
Juan
Juan am 23 Aug. 2013
I'm attempting to take the double integral (using integral2) of a function that is defined by an integral.
Here is what I am currently attempting:
t=linspace(0,1,50);
fun_1= @(v) exp(.071*v)
fun = @(x,y) 0.14*0.00607*integral(@(u)fun_1(u),0,x).*exp(-(x-y).^2).*0.14*0.00607*integral(@(u)fun_1(u),0,x);
for i=2:length(t)
for j=i:length(t)
A(i,j)=integral2(fun,t(i-1),t(i),t(j-1),t(j));
end
end
I'm receiving the error
Error using integral (line 86) A and B must be floating point scalars.
Can anyone provide any information on how to fix this problem.

Akzeptierte Antwort

Mike Hosea
Mike Hosea am 24 Aug. 2013
The problem here is that integral2 requires that the integrand accept arrays as inputs and return arrays as outputs, but integral only accepts scalars for the left- and right-hand end points. You just need to vectorize the call to integral. Also, I assume you meant to use y in the second call to integral.
n = 12; % Increase to 50 when you're ready, but be prepared for a wait!
t = linspace(0,1,n);
fun_1 = @(v) exp(.071*v);
int_fun_1_scalar_inputs_only = @(x)integral(fun_1,0,x);
int_fun_1_vectorized = @(x)arrayfun(int_fun_1_scalar_inputs_only,x);
fun = @(x,y) 0.14*0.00607*int_fun_1_vectorized(x).*exp(-(x-y).^2) ...
.*0.14*0.00607.*int_fun_1_vectorized(y);
A = zeros(n); % Preallocate A
for i=2:n
for j=i:n
A(i,j)=integral2(fun,t(i-1),t(i),t(j-1),t(j));
end
end

Weitere Antworten (0)

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by