Nested integral within integral2
25 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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.
0 commentaires
Réponse acceptée
Mike Hosea
le 24 Août 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
0 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Numerical Integration and Differentiation dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!