Salve a tutti,sto imparando la base della programmazione in matlab e volevo sapere se qualcuno poteva gentilmente aiutarmi nell'uso di varargin e di nargin.A cosa servono queste funzioni?Ho letto che varargin e varargout servono per definire le variabili in entrata e in uscita e nargin invece conta le variabili in entrata euscita,ma quando mi trovi una riga simile varargin{1} cosa vuol dire?Potete aiutarmi?
Ultima domanda da principiante: Quando vado a richiamare la function cosa devo mettere al posto di nargin ?La variabile che uso nel problema?
Ringrazio in anticipo per la risposta e vi allego qui sotto un codice in cui si utilizzano queste 2 funzioni che non comprendo bene.
Un saluto
function [C, varargout]=num_cond(A,varargin)
% calcola il numero di condizionamento C della matrice quadrata
% A rispetto alla norma indicata in tipo_norma
% Se tipo_norma non e' data in input, il condizionamento e' calcolato
% rispetto alla norma infinito.
% tipo_norma non puo' assumere valori diversi da 1, 2 o inf
% Se si chiedono due output, allora il primo e' C e il secondo e' la
% matrice inversa di A
% Se si chiedono tre output, il primo e' C, il secondo e' la matrice
% inversa di A, il terzo e' la norma di A
%% check input
fprintf('nargin = %d\n', nargin)
% controllo del numero delle variabili di input
if nargin == 0 % non sono assegnati input
error('E'' necessario definire una matrice!!!')
elseif nargin == 1 % e' stato passato solo un input
% che deve essere necessariamente la matrice A
tipo_norma = inf; % assegniamo a tipo_norma il valore di default inf
elseif nargin == 2 % sono assegnati due input: il I deve essere la
% matrice A mentre il II la variabile tipo_norma
% il valore da assegnare a tipo_norma e' il primo elemento della
% variabile cell varargin
tipo_norma = varargin{1};
fprintf('tipo norma vale %f \n', tipo_norma)
% controllo sull'input tipo_norma
if (tipo_norma ~= 1) & (tipo_norma ~= 2) & (tipo_norma ~= inf)
error('la norma deve essere 1 2 o inf')
end
else
varargin
error('troppe variabili di input!!!')
end
dim = size(A);
if dim(1)~=dim(2)
error('La matrice deve essere quadrata')
end
if det(A)==0
error('La matrice e’’ singolare')
end
%% calcolo il numero di condizionamento
IA = inv(A); % matrice inversa di A
NA = norm(A,tipo_norma); % norma di A
NIA = norm(IA,tipo_norma); % norma della matrice inversa
% calcolo del numero di condizionamento
C = NA*NIA;
fprintf('nargout %d \n', nargout)
% controllo del numero delle variabili di output
if nargout == 2 % sono richiesti due output
varargout{1} = IA; % il primo output e' C mentre il secondo e' l'inversa
% della matrice A che e' assegnata al primo elemento
% della variabile di tipo cell varargout
elseif nargout == 3 % sono richiesti tre output
varargout{1} = IA;
varargout{2} = NA; % assegno il terzo output al secondo elemento della
% variabile varargout
elseif nargout > 3
error('troppe variabili di output!!!')
end