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")

 Akzeptierte Antwort

dpb
dpb am 10 Apr. 2018

0 Stimmen

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 Kommentare

Francesco Fortunato
Francesco Fortunato am 10 Apr. 2018
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 am 10 Apr. 2018
Bearbeitet: James Tursa am 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.
Guillaume
Guillaume am 10 Apr. 2018
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.
Francesco Fortunato
Francesco Fortunato am 10 Apr. 2018
Bearbeitet: Walter Roberson am 10 Apr. 2018
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
Guillaume
Guillaume am 10 Apr. 2018
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.
dpb
dpb am 10 Apr. 2018
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...

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Hilfe-Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by