Varargin e varargout,aiuto basilare

di il
1 risposte

Varargin e varargout,aiuto basilare

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  

1 Risposte

  • Re: Varargin e varargout,aiuto basilare

    Si usa "varargin" per definire una funzione che accetti un numero variabile di input; ad esempio, si potrebbe voler chiamare le funzione "my_function" specificando due parametri:

    my_function('param_1',a,'param_2')

    oppure con u solo parametro

    my_function('param_1',a,'param_2')

    si potrebbe definire la funzione come:

    my_function(varargin)

    nel corpo della funzione si usare "nargin" per identificare il numero di parametri in input.

    I vari parametri in input sono memorizzati nel cellarray "varargin":

    varaergin{1} contiene il primo parametro,
    varaergin{2} contiene il secondo parametro,
    ecc.

    quindi:

    x=varaergin{1}
    assegna alla variabile "x" il parametro che l'utente ha inserito come primo parametro nella chiamata alla funzione.

    Per quanto riguarda la seconda parte della domanda:

    "naragin" NON VA MODIFICATA.

    serve a "sapere" qual è il numero di parametri in input specificati dall'utente; generalmente la si una in un loop per scorrere gli input memorizzati nel celarray "varargin" od in una serie di "if-else".

    Le variabili "nargout" e "varargout" operano e si possono usare in modo analogo per gestire un numero variabile di output.
    Per saperne di più:


Devi accedere o registrarti per scrivere nel forum
1 risposte