MATLAB Finite Solenoid On-Axis Field in MATLAB

AI Thread Summary
The discussion focuses on using the quadv function in MATLAB to compute the on-axis magnetic field of a finite solenoid. The user is attempting to integrate the magnetic field formula over a specified distance vector but encounters issues with matrix dimension mismatches due to the way MATLAB handles vector operations. Suggestions include removing the distance vector from the function to avoid conflicts and considering the use of a global variable for the distance. An alternative approach is proposed, which involves creating a separate function to integrate the magnetic field for each element of the distance array, using a loop to store results in a vector. The conversation also touches on simplifying the notation for constants in the code. Overall, the key challenge is effectively managing vectorized operations in MATLAB for the integration task.
Mindscrape
Messages
1,854
Reaction score
1
Does anybody know how the quadv function works in matlab? I am trying to get a plot of the on axis field of a finite solenoid, so the formula (given I didn't make some stupid mistake deriving it, which is beside the point) should be:

H(z) = \int_{-L/2}^{L/2} \mu_0 \frac{NI}{2L} \frac{R^2}{((z-z')^2 + R^2)^{(3/2)}} dz'

So I want it to integrate for every position from 0 to 100mm. The quad integration doesn't work because I have a vector, so I thought I would use quadv with the following mfile.

%function for thin finite solenoid
function Hz = hfield(z)

N = 10; %number of turns
I = 1; %current (amps)
a = 32.5*10.^-3; %radius of coil (m)
d = (0:0.1:100)*10^-3; %axis vector (m)
L = 10*10.^-3; %length of solenoid (m)
m = 1.25663706*10^-6; %magnetic constant
Hz = (m.*N.*I.*a.^2)./((2*L.*(a.^2+(d-z).^2).^(3/2))); %field to integrate

But when I try the function call

quadv(@Hfield, -5, 5);

Matlab says that there is a problem in the subtraction of matrix dimensions, which means that it doesn't like subtracting each array array element by the variable of integration z. I figured that it would go through the integration for each element of d, and integrate z, but apparently not? Does anybody know how to get it to do what I want it to do, which is integrate each time with with the corresponding element from the distance vector? Maybe I have to make my limits arrays too.
 
Last edited:
Physics news on Phys.org
set d as a global variable. Then you do a program file that calculates the integral for a value of d, store that in a vector, increase d, integrate, etc..

So remove the line with "d" from this function file.

And also, a = 32.5*10.^-3; isn't nicer do write 3.24e-2 ?

And use the normal quad.

I have not tried this, but I think this a way you can do it.
 
Yeah, I was afraid I might have to try something like this. The alternate method works fine, though it is inconvenient. I made this file, and everything checks out, about 2 Guass in the middle of the solenoid.

%integrate hfield for a given distance array

function [Hval] = HInt(d)

%variables to use
L = 10^-2; %length of solenoid in meters
n = length(d); %find the number of elements in d
i = 1; %loop variable
global s; %make distance element global for field function

%now that loop is primed and ready, evaluate
while (i <= n)
s = d(1,i);
Hval(1,i) = quad(@Hfield,-L/2,L/2);
i = i+1;
end
 

Similar threads

Back
Top