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.

Categorie

Scopri di più su MATLAB in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by