How to vary a value inside an integral which is not getting integrated itself?

1 view (last 30 days)
I am trying to find the triple integral of a function with limits defined for 'phi', 'z' and 'r'. On finding the value of the integral at any particular value say h=20 (h IS NOT GETTING INTEGRATED), I get a correct answer which matches with my experimental values. However, as soon as I vary (using linspace or colon) the value of h (h IS NOT GETTING INTEGRATED) I get an error saying "Matrix dimensions must agree". I have attached the code below for reference. Thank you
clc,clear
%magnetic field for an off axis point due to a thick solenoid in z-x plane
l=20; %length of the solenoid
r1 = 5; %inner radius
r2 = 10; %outer radius
u0 = 1.26*(10^-3); %permeability of free space
i = 3; %current in amps
N = 800; %number of turns
C=(u0*i*N)/(2*pi*10*l);
%location of x,y,z cooridnates of P
%rho = linspace(0,22,100);
rho = 0;
h=20:1:35;
Binz = @(r,z,phi)(r.*(r-(rho.*cos(phi))))./(((rho.^2) + (r.^2) + ((h-z).^2) - (2.*r.*rho.*cos(phi))).^(3/2));
Bz = C*integral3(Binz,r1,r2,0,20,0,2*pi); %magnetic field in z direction
plot (Bz,h);

Accepted Answer

Star Strider
Star Strider on 25 Jan 2020
The integral2 and integral3 functions do not allow the 'ArrayValued' name-value pair, so it is necessary to ‘nest’ integral calls if you want to do that.
Try this:
%magnetic field for an off axis point due to a thick solenoid in z-x plane
l=20; %length of the solenoid
r1 = 5; %inner radius
r2 = 10; %outer radius
u0 = 1.26*(10^-3); %permeability of free space
i = 3; %current in amps
N = 800; %number of turns
C=(u0*i*N)/(2*pi*10*l);
%location of x,y,z cooridnates of P
%rho = linspace(0,22,100);
rho = 0;
h=20:1:35;
Binz = @(r,z,phi)(r.*(r-(rho.*cos(phi))))./(((rho.^2) + (r.^2) + ((h-z).^2) - (2.*r.*rho.*cos(phi))).^(3/2));
% Bz = C*integral3(Binz,r1,r2,0,20,0,2*pi); %magnetic field in z direction
Bz = integral(@(phi) integral(@(z) integral(@(r) Binz(r,z,phi), r1,r2, 'ArrayValued',1), 0,20, 'ArrayValued',1),0,2*pi, 'ArrayValued',1)
plot (Bz,h);
producing:
Bz =
29.3733 25.2358 21.3369 17.8589 14.8792 12.3925 10.3485 8.6806 7.3222 6.2144 5.3077 4.5619 3.9451 3.4317 3.0019 2.6398
and this plot:
1How to vary a value inside an integral which is not getting integrated itself - 2020 01 25.png
Please check that to be certain it appears reasonable.
Just to be sure, I checked this approach with the first example in the integral3 documentation:
fun = @(x,y,z) y.*sin(x)+z.*cos(x)
q = integral(@(z) integral(@(y) integral(@(x) fun(x,y,z), 0, pi, 'ArrayValued',1), 0,1, 'ArrayValued',1), -1,1, 'ArrayValued',1)
with:
q =
2.0000
being the same as the result in the integral3 documentation.

More Answers (0)

Categories

Find more on MATLAB in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!