Calculating Magnetic Field of Current Loop in Matlab

  • Context: MATLAB 
  • Thread starter Thread starter jadelsky
  • Start date Start date
  • Tags Tags
    Matlab
Click For Summary

Discussion Overview

The discussion revolves around a MATLAB code snippet intended to calculate the magnetic field of a current loop. Participants address an error related to an undefined function 'magvector' that is supposed to compute the magnitude of a vector. The conversation includes troubleshooting the code and exploring potential solutions.

Discussion Character

  • Technical explanation
  • Debate/contested
  • Mathematical reasoning

Main Points Raised

  • One participant points out that the error arises because the function 'magvector' is not defined in the provided code.
  • Another participant suggests that 'magvector' should be a function that calculates the magnitude of a vector, implying that it is not a built-in MATLAB function.
  • A different participant proposes a direct method to calculate the magnitude of vector 'R' using the square root formula, indicating that this could replace the need for 'magvector'.
  • One participant inquires about the nature of 'magvector', questioning whether it is a standalone function or part of a larger task, and discusses the structure of functions in MATLAB.
  • Another participant expresses appreciation for the help received, indicating that the suggestions were useful.
  • A later reply mentions that MATLAB's built-in 'norm' function already computes the magnitude of vectors, suggesting that creating a custom function may not be necessary.

Areas of Agreement / Disagreement

Participants generally agree that 'magvector' is not defined, and there is a consensus on the need to calculate vector magnitudes. However, there is no agreement on whether to define 'magvector' or to use MATLAB's built-in functions, indicating multiple competing views on how to resolve the issue.

Contextual Notes

There is uncertainty regarding the definition and purpose of 'magvector', as well as the implications of using custom functions versus built-in MATLAB functions. The discussion does not resolve these uncertainties.

Who May Find This Useful

Individuals working with MATLAB for physics or engineering applications, particularly those interested in vector calculations and magnetic field computations.

jadelsky
Messages
13
Reaction score
0
% varibles
% I current(A) in +phi direction on ring
% a ring radius (m)
% Ndeg number of increments for phi
% f angle of phi in radians
% df differential change in phi
% dL differential length vector on the ring
% dLmag magnitude of dL
% dLuv unit vector in direction of dL
% [xL,yL,0] location of source point
% Ntest number of test points
% Rsuv unit vector from origin to source point
% R vector from source to test point
% Ruv unit vector for R
% Rmag magnitude of R
% dH differential portion of H
% dHmag magnitude pf dH
% radius radial distance from origin
% Hz total magnetic field at test point

clc
clear

% initialize variables
a=1;
I=1;
Ndeg=90;
Ntest=40;
df=360/Ndeg;
dLmag=(df*pi/180)*a;

% perform calculation
for j=1:Ntest
x=(j-1)*a/Ntest;
for i=1:df:360
f=i*pi/180;
xL=a*cos(f);
yL=a*sin(f);
Rsuv=[xL yL 0]/a;
dLuv=cross([0 0 1],Rsuv);
dL=dLmag*dLuv;
R=[x-xL -yL 0];
Rmag=magvector(R);
Ruv=R/Rmag;
dH=I*cross(dL,Ruv)/(4*pi*Rmag^2);
dHmag(i)=magvector(dH);
end
radius(j)=x;
Hz(j)=sum(dHmag);
end

% generate plot
plot(radius,Hz)
grid on
xlabel('radius(m)')
ylabel('Hz(A/m)')

well this shoul calculate the magnetic field of current loop, but i get this error:

? Undefined function or method 'magvector' for input arguments of type
'double'.

Error in ==> test at 43
Rmag=magvector(R);

how can i solve this anyone?
 
Physics news on Phys.org
Well for a start you haven't defined the function magvector, so that probably explains your error of an undefined function.
 
well i rewrited this code from the book in which there is an figure of solution due to this code...i also found similar code on the net and again the same problem...i'm not good in MATLAB but i assume that magvector should be some function and that i don't have to define it but MATLAB doesn't recognize it...
 
well if its the magnitude of R, you just say

Rmag = sqrt(R(1)^2+R(2)^2+R(3)^2) or

Rmag = sqrt(-0.999847695156391^2+-0.0174524064372835^2+0^2)

and

dHmag(i)=sqrt(dH(1)^2+dH(2)^2+dH(3)^2);

obviously MATLAB does not have a built in command for magvector
 

Attachments

  • untitled.jpg
    untitled.jpg
    26.5 KB · Views: 460
Is this a stand alone function or is it designed to be used as part of a larger task?

Normally, the first line defines what variables will input from the outside and what variables will be output to the outside.

For example, in one of my functions, the first line established that my function would input 9 variables from outside, process them, and output 3 new variables (except most of my variables were actually strings of data in matrix format).

function [bit_errs_ss,i_out,q_out]=despread(tiq,sumiq,cs_t,sn_t,seq1,seq2,data,N,fcarr)

--------------------------------
Or, conversely, yours is the master program, but you haven't actually written the magvector(R) function yet. Write the magvector function and your program will run. Presumably, the 'R' matrix is passed to the magvector function and the magvector function calculates the magnitude and passes it back to your main program.

In my main function (or program) there's a line that is practically identical to the first line of my function:

[bit_errs_ss,i_out,q_out]=despread(tiq,sumiq,cs_t,sn_t,seq1,seq2,data,N,fcarr)

This line calls the "despread" function. Technically, the variable names don't have to match, as long the number of variables out and the number of variables in are identical. That's pretty handy if you've written a function that you'll wind up using over and over; in a lot of different processes.

For example, calculating the magnitude of a three-dimensional vector is a pretty common task that could come in handy for any number of things besides just magnetic fields (having magnitude and magnetic share the first 3 letters probably adds a little confusion in your situation).

In my example, the main reason for making the routine modular was to make debugging a lot more manageable. This program took a long time to run from start to finish if I ran every module.
 
Last edited:
thanks a lot...this was very helpfull! :D
 
A function that computed the magnitude of a three dimensional vector would be even more useful if Matlab's "norm(x)" command didn't already compute the magnitude of any dimension vector.

The idea of writing your own function to compute the magnitude is either to give you practice with Matlab or the original author of the macro didn't know about the norm command.
 

Similar threads

  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 15 ·
Replies
15
Views
2K
Replies
4
Views
2K
  • · Replies 14 ·
Replies
14
Views
4K
  • · Replies 2 ·
Replies
2
Views
5K
  • · Replies 1 ·
Replies
1
Views
4K
Replies
1
Views
5K
  • · Replies 10 ·
Replies
10
Views
4K
Replies
4
Views
2K
Replies
1
Views
1K