Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Matlab quadv

  1. Aug 15, 2007 #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:

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

    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: Aug 15, 2007
  2. jcsd
  3. Aug 15, 2007 #2


    User Avatar
    Science Advisor
    Homework Helper

    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.
  4. Aug 16, 2007 #3
    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;
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook