I am trying to find the code for the inbuilt function norm, but, by typing "open norm" I would only find a script describing it, not the code. I need to write the m file as funtion in order to add it in my folder with the other functions (for instance deg2rad which is another but its code is aveilable by typing "open deg2rad")

 Accepted Answer

dpb
dpb on 10 Apr 2018
That's how all builtin functions work in Matlab, that's why they're "built in"; the working part of the function is compiled code built into the executable for the program. Core functionality is incorporated in that manner to improve performance; other routines are just supplied m-code no different than user-written as far as their implementation. There are also p-code and mex files...
Why do you think you need to include the function in some other location; there really is no reason to do that in general. Occasionally one will take a specific m-file and create a slightly modified version for a specific purpose, but it's highly recommended to make the user copy distinct and to not modify nor alias actual distributed functions.

6 Comments

If i don't include the function I keep get the message "undefined function", I don't know the reason but that's why I think I need that, any suggestion? Thank you!
James Tursa
James Tursa on 10 Apr 2018
Edited: James Tursa on 10 Apr 2018
Post the code you are using, and copy & paste the entire error message for us to see. It could be you are calling norm( ) with a non-numeric input argument.
This is a typical case of a XY problem.
The core problem has nothing to do with the code for norm but we don't know what the core problem is. As James says, show us the real problem.
The portion of the code (which is truly long) involved is
%%Add Node callback Subfunction
function addnode(hObject, EventData )
global guihandles cmenus input
import javax.swing.*
if ischar(hObject)
objlabel = hObject;
childrens = 0;
else
objlabel = get(hObject,'Label');
childrens = get(hObject,'Children');
end
if ~norm(childrens)
switch objlabel
case 'Orbit'
if ~isfield(guihandles.nodehandles,'orbit')
%Creo un nodo 'Orbit', lo aggiungo e aggiorno
guihandles.nodehandles.orbit = javax.swing.tree.DefaultMutableTreeNode();
% icon = javax.swing.ImageIcon('logo.png')
% guihandles.nodehandles.orbit.setUserObject(JLabel('a',icon,0))
guihandles.nodehandles.orbit.setUserObject(objlabel);
guihandles.nodehandles.root.add(guihandles.nodehandles.orbit);
guihandles.albero.updateUI;
guihandles.htextbox.append( ['Orbit added to the Simulation Tree',guihandles.newline ]);guihandles.htextbox.setCaretPosition(guihandles.htextbox.getText.length);
%Add subguihandles.menus to Orbit Menu
guihandles.menus.earth = uimenu( guihandles.menus.orb ,'Label','Aspherical Gravity Field','Callback',{@addnode});
guihandles.cmenus.earth = uimenu( guihandles.cmenus.orb ,'Label','Aspherical Gravity Field','Callback',{@addnode});
guihandles.menus.third = uimenu( guihandles.menus.orb ,'Label','Third Body Perturbation','Callback',{@addnode});
guihandles.cmenus.third = uimenu( guihandles.cmenus.orb ,'Label','Third Body Perturbation','Callback',{@addnode});
guihandles.menus.drag = uimenu( guihandles.menus.orb ,'Label','Atmospheric Drag','Callback',{@addnode});
guihandles.cmenus.drag = uimenu( guihandles.cmenus.orb ,'Label','Atmospheric Drag','Callback',{@addnode});
guihandles.menus.srp = uimenu( guihandles.menus.orb ,'Label','Solar Radiation Pressure','Callback',{@addnode});
guihandles.cmenus.srp = uimenu( guihandles.cmenus.orb ,'Label','Solar Radiation Pressure','Callback',{@addnode});
guihandles.menus.thrstr = uimenu( guihandles.menus.orb ,'Label','Thrusting Strategy','Callback',{@addnode});
guihandles.cmenus.thrstr = uimenu( guihandles.cmenus.orb ,'Label','Thrusting Strategy','Callback',{@addnode});
else
guihandles.htextbox.append( ['Orbit Node has already been added to the Simulation Tree',guihandles.newline ]);guihandles.htextbox.setCaretPosition(guihandles.htextbox.getText.length);
end
The error message arises when clicking on one menu in the GUI
Undefined function 'norm' for input arguments of type 'matlab.ui.container.Menu'.
Error in filename>addnode (line 2485)
if ~norm(childrens)
Error while evaluating Menu Callback
You focused on the wrong part of the error message. It's not that it's undefined, it's that it's not defined for inputs of type matlab.ui.container.Menu. Indeed, what do you expect the norm of a menu to be?
Clearly the problem is not with norm, the problem is with the line
if ~norm(childrens)
which makes no sense.
As James surmised, it's not that the code for norm is missing; it's that you're calling it with something other than a numeric input...read the message carefully:
Undefined function 'norm' for input arguments of type 'matlab.ui.container.Menu'.
You've got to dereference the GUI object to get the content thereof; I'm no GUI kinda' guy to even have a clue what a matlab.ui.container is or would look like, but certainly a Menu of one won't be anything meaningful to take the norm of...

Sign in to comment.

More Answers (0)

Categories

Find more on Loops and Conditional Statements 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!