Azzera filtri
Azzera filtri

How to calculate a function of multiple variables which also has an integral in its definition?

1 visualizzazione (ultimi 30 giorni)
Dea All,
I have the following function whose definition needs an integral to be evaluated. The integral itself is dependent on the function input variables.
r0 = 0.5;
z0 = 0.5;
G(r,z,z-z0) = 1/2*r*r0^2 * integral(cos(lambda)/sqrt((r^2+r0^2-2*r*r0*cos(lambda)+(z-z0)^2)) dlambda, -pi, pi);
Could someone please help me how I can get for example G(0.75, 0.75, 0.25)? My final goal is to find G over a rectangular meshgrid.
Thanks,
Ahmad

Risposte (2)

Matt J
Matt J il 30 Ott 2012
Create an anonymous function for the integrand as a function of lambda
G=@(r,z,z-z0) 1/2*r*r0^2 * integral(@(lambda) cos(lambda)/sqrt((r^2+r0^2-2*r*r0*cos(lambda)+(z-z0)^2)) , -pi, pi);
  5 Commenti
Matt J
Matt J il 30 Ott 2012
Replace all the * and / by elementwise operations .* and ./
G=@(r,z,z_minus_z0) 1/2.*r.*r0^2 .* ... integral(@(lambda) cos(lambda)./sqrt((r.^2+r0.^2-2.*r.*r0.*cos(lambda)+z_minus_z0.^2)) , -pi, pi);

Accedi per commentare.


Star Strider
Star Strider il 30 Ott 2012
You need to ‘vectorize’ it:
r0 = 0.5;
z0 = 0.5;
r = 1;
z = 1;
G = @(r,z,z0) 1/2.*r.*r0.^2 .* integral(@(lambda) cos(lambda)./sqrt((r.^2+r0.^2-2.*r.*r0.*cos(lambda)+(z-z0).^2)) , -pi, pi);
G(r,z,z0)
  3 Commenti
AP
AP il 30 Ott 2012
Modificato: AP il 30 Ott 2012
Thanks all. Runs perfectly with elementwise operations.
r0 = 0.5;
z0 = 0.5;
r = 1;
z = 1;
G=@(r, r0, z, z0) 1/2.*r.*r0^2 .* integral(@(lambda) cos(lambda)./sqrt((r.^2+r0.^2-2*r.*r0.*cos(lambda)+(z-z0).^2)) , -pi, pi);
G(r,r0,z,z0)
ans =
0.1390
Star Strider
Star Strider il 30 Ott 2012
You have to vectorize it using the ‘dot’ operators:
G = @(r, r0, z, z0) 1/2.*r.*r0.^2 .* integral(@(lambda) cos(lambda)./sqrt((r.^2+r0.^2-2.*r.*r0.*cos(lambda)+(z-z0).^2)) , -pi, pi);
See if that works as you want it to.

Accedi per commentare.

Community Treasure Hunt

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

Start Hunting!

Translated by