Contenuto principale

zpk

Modello di guadagno a polo zero

    Descrizione

    Utilizzare zpk per creare modelli di guadagno a polo zero o per convertire modelli di sistemi dinamici nella forma a guadagno a polo zero.

    I modelli di guadagno a polo zero sono una rappresentazione delle funzioni di trasferimento in forma fattorizzata. Si consideri, ad esempio, la seguente funzione di trasferimento SISO a tempo continuo:

    G(s)=s23s4s2+5s+6

    G(s) può essere fattorizzata nella forma a guadagno a polo zero come segue:

    G(s)=(s+1)(s4)(s+2)(s+3).

    Una rappresentazione più generale del modello SISO di guadagno a polo zero è la seguente:

    h(s)=k(sz(1))(sz(2))(sz(m))(sp(1))(sp(2))(sp(n))

    In questo caso, z e p sono i vettori degli zeri e dei poli a valore reale o complesso, mentre k è il guadagno scalare a valore reale o complesso. Nei modelli MIMO, ogni canale I/O è rappresentato da una di queste funzioni di trasferimento hij(s).

    È possibile creare un oggetto del modello di guadagno a polo zero specificando direttamente i poli, gli zeri e i guadagni oppure convertendo un modello di altro tipo (come un modello stato-spazio ss) nella forma a guadagno a polo zero.

    È inoltre possibile utilizzare zpk per creare modelli stato-spazio generalizzati (genss) o modelli stato-spazio incerti (uss (Robust Control Toolbox)).

    Creazione

    Descrizione

    Creazione del modello ZPK

    sys = zpk(zeros,poles,gain) crea un modello di guadagno a polo zero a tempo continuo con zeros e poles specificati come vettori e il valore scalare di gain. L'output sys è un oggetto del modello zpk che memorizza i dati del modello. Impostare zeros o poles su [] per i sistemi privi di zeri o poli. Questi due input non devono necessariamente avere la stessa lunghezza e il modello non deve necessariamente essere proprio (ossia presentare un numero eccessivo di poli).

    esempio

    sys = zpk(zeros,poles,gain,ts) crea un modello di guadagno a polo zero a tempo discreto con tempo di campionamento ts. Impostare ts su -1 o [] se non si desidera impostare il tempo di campionamento.

    esempio

    sys = zpk(zeros,poles,gain,ltiSys) crea un modello di guadagno a polo zero con proprietà ereditate dal modello di sistema dinamico ltiSys, incluso il tempo di campionamento.

    esempio

    sys = zpk(m) crea un modello di guadagno a polo zero che rappresenta il guadagno statico m.

    esempio

    sys = zpk(___,PropertyName=Value) imposta Proprietà del modello di guadagno a polo zero utilizzando uno o più argomenti nome-valore per definire ulteriori proprietà del modello. Questa sintassi funziona con qualsiasi combinazione dei precedenti argomenti di input.

    esempio

    Conversione nel modello ZPK

    sys = zpk(ltiSys) converte il modello di sistema dinamico ltiSys in un modello di guadagno a polo zero.

    esempio

    sys = zpk(ltiSys,Name=Value) ottiene una rappresentazione troncata a zpk del modello rado ltiSys calcolando gli zeri e i poli in base a uno o più argomenti nome-valore specificati. Poiché questo metodo calcola gli zeri per ogni coppia input-output, è maggiormente adatto per i modelli con input-output di piccole dimensioni. (da R2025a)

    esempio

    sys = zpk(ltiSys,component) converte il component specificato di ltiSys nella forma di modello di guadagno a polo zero. Utilizzare questa sintassi solo quando ltiSys è un modello a tempo lineare invariante (LTI) identificato, come un modello idss o idtf.

    esempio

    Creazione della variabile per l'espressione razionale

    s = zpk('s') crea la variabile speciale s che può essere utilizzata in un'espressione razionale per creare un modello di guadagno a polo zero a tempo continuo. Utilizzare un'espressione razionale è talvolta più semplice e intuitivo che specificare i coefficienti polinomiali.

    esempio

    z = zpk('z',ts) crea la variabile speciale z che può essere utilizzata in un'espressione razionale per creare un modello di guadagno a polo zero a tempo discreto. Per lasciare il tempo di campionamento non specificato, impostare l'argomento di input ts su -1.

    esempio

    Argomenti di input

    espandi tutto

    Zeri del modello di guadagno a polo zero, specificati come:

    Ad esempio, se a è un parametro regolabile realp con valore nominale 3, è possibile utilizzare zeros = [1 2 a] per creare un modello genss con zeri in s = 1 e s = 2 e uno zero sincronizzabile in s = 3.

    Quando si utilizza questo argomento di input per creare un modello zpk, l'argomento imposta il valore iniziale della proprietà Z.

    Poli del modello di guadagno a polo zero, specificati come:

    È anche una proprietà dell'oggetto zpk. Questo argomento di input imposta il valore iniziale della proprietà P.

    Guadagno del modello di guadagno a polo zero, specificato come:

    È anche una proprietà dell'oggetto zpk. Questo argomento di input imposta il valore iniziale della proprietà K.

    Tempo di campionamento, specificato come scalare. È anche una proprietà dell'oggetto zpk. Questo argomento di input imposta il valore iniziale della proprietà Ts.

    Sistema dinamico, specificato come modello di sistema dinamico SISO o MIMO o come array di modelli del sistema dinamico. I sistemi dinamici che si possono utilizzare comprendono:

    • Modelli LTI numerici a tempo continuo o a tempo discreto, come i modelli tf, zpk, ss o pid.

      Se ltiSys è un modello stato-spazio rado (sparss o mechss), il software calcola un'approssimazione troncata a guadagno a polo zero in una banda di frequenza specificata di interesse. Per i modelli radi, utilizzare gli argomenti nome-valore per specificare le opzioni computazionali. Se non si specifica alcuna opzione, il software calcola fino ai primi 1000 poli e zeri con la più piccola grandezza. Inoltre, l'ottenimento di un'approssimazione troncata a guadagno a polo zero è applicabile solo per i modelli con una rappresentazione sparss valida. (da R2025a)

    • Modelli LTI generalizzati o incerti, come i modelli genss o uss (Robust Control Toolbox). (L'utilizzo dei modelli incerti richiede una licenza Robust Control Toolbox™).

      Il modello di guadagno a polo zero assume

      • i valori attuali dei componenti sincronizzabili per i blocchi di progettazione del controllo di sincronizzazione.

      • i valori nominali del modello per i blocchi di progettazione del controllo incerto.

    • Modelli LTI identificati, come i modelli idtf (System Identification Toolbox), idss (System Identification Toolbox), idproc (System Identification Toolbox), idpoly (System Identification Toolbox) e idgrey (System Identification Toolbox). Per selezionare il componente del modello identificato da convertire, specificare component. Se non si specifica component, tf converte il componente misurato del modello identificato per impostazione predefinita. (Per utilizzare i modelli identificati è necessario disporre del software System Identification Toolbox™).

      Un modello non lineare identificato non può essere convertito in un oggetto del modello zpk. È possibile utilizzare inizialmente funzioni di approssimazione lineare come linearize e linapp (questa funzionalità richiede il software System Identification Toolbox).

    Guadagno statico, specificato come scalare o matrice. Il guadagno statico o guadagno allo stato stazionario di un sistema rappresenta il rapporto tra l'output e l'input in condizioni di stato stazionario.

    Componente del modello identificato da convertire, specificato in uno dei seguenti modi:

    • 'measured': convertire il componente misurato di sys.

    • 'noise': convertire il componente di rumore di sys

    • 'augmented': converte sia il componente misurato che il componente di rumore di sys.

    component si applica solo quando sys è un modello LTI identificato.

    Per ulteriori informazioni sui modelli LTI identificati e sui relativi componenti misurati e di rumore, vedere Identified LTI Models.

    Argomenti nome-valore

    espandi tutto

    Specificare le coppie di argomenti opzionali come Name1=Value1,...,NameN=ValueN, dove Name è il nome dell'argomento e Value è il valore corrispondente. Gli argomenti nome-valore devono apparire dopo gli altri argomenti, ma l'ordine delle coppie è ininfluente.

    Esempio sys = zpk(sparseSys,Focus=[0 100],Display="off")

    Da R2025a

    Opzione per eseguire calcoli paralleli a polo zero utilizzando un pool parallelo di worker, specificata come uno dei seguenti valori:

    • "off": eseguire in modalità seriale sul client MATLAB®. L'abilitazione del calcolo parallelo può comportare un miglioramento delle prestazioni durante il calcolo a polo zero. Tuttavia, anche quando UseParallel è impostato su "off", l'algoritmo può utilizzare il multithreading integrato per utilizzare al meglio le risorse locali. Per ulteriori informazioni, vedere MATLAB Multicore.

    • "auto": utilizzare un pool parallelo se è aperto o se MATLAB è in grado di crearne uno automaticamente. Se non è disponibile un pool parallelo, eseguire in modo seriale sul client MATLAB.

    • "on": utilizzare un pool parallelo se è aperto o se MATLAB è in grado di crearne uno automaticamente. Se non è disponibile un pool parallelo, generare un errore.

    Se non è disponibile un pool parallelo e la creazione automatica del pool è abilitata, MATLAB apre un pool utilizzando il profilo di cluster predefinito. Per utilizzare un pool parallelo per eseguire calcoli in MATLAB, è necessario disporre di Parallel Computing Toolbox™. Per ulteriori informazioni, vedere Run MATLAB Functions with Automatic Parallel Support (Parallel Computing Toolbox).

    Prima di R2026a: Per eseguire in parallelo, impostare UseParallel su true (1).

    Da R2025a

    Gradiente di decadimento, specificato come scalare non positivo o matrice.

    • Utilizzare un valore scalare per i modelli SISO o quando il gradiente è uniforme per tutte le coppie input-output per i modelli MIMO.

    • Quando il gradiente è diverso per ogni coppia input-output per i modelli MIMO, utilizzare una matrice.

    Questa opzione consente di specificare come l'approssimazione debba decadere oltre l'intervallo di frequenza specificato. Ad esempio, uno Slope pari a -2 garantisce che il guadagno decada a una velocità di almeno –40 dB/decade (velocità di decadimento 1/s2) oltre fmax.

    Da R2025a

    Intervallo di frequenza di interesse, specificato come vettore di forma [0,fmax]. Quando si specifica un intervallo di frequenza di interesse, il software calcola solo i poli con frequenza naturale in questo intervallo. Per i modelli a tempo discreto, il software approssima la frequenza naturale equivalente attraverso la trasformata di Tustin.

    Poiché zpk calcola tutti i poli e gli zeri nell'intervallo di frequenza specificato, in genere si specifica un intervallo a bassa frequenza per limitare il calcolo di un numero elevato di poli e zeri. Per impostazione predefinita, l'area di interesse non è specificata ([0 Inf]) e l'algoritmo calcola fino a MaxNumber di poli e zeri.

    Da R2025a

    Numero massimo di poli e zeri da calcolare, specificato come intero positivo. Questo valore limita il numero di poli e zeri calcolati dall'algoritmo e l'ordine di approssimazione del modello originale rado.

    Da R2025a

    Spostamento spettrale, specificato come scalare finito.

    Il software calcola i poli con la frequenza naturale nell'intervallo specificato [0,fmax] utilizzando iterazioni di potenza inversa per A-sigma*E, ottenendo gli autovalori più vicini al valore dello spostamento sigma. Quando A è singolare e sigma è zero, l'algoritmo ha esito negativo perché non esiste l'inversa. Pertanto, per i modelli radi con azione integrale (s = 0 o z = 1 per i modelli a tempo discreto), è possibile utilizzare questa opzione per spostare implicitamente i poli o gli zeri al valore più vicino a questo valore di spostamento. Specificare un valore di spostamento che non sia uguale a un valore del polo o di zero esistente nel modello originale.

    Da R2025a

    Tolleranza per la precisione dei poli e degli zeri calcolati, specificata come scalare finito positivo. Questo valore controlla la convergenza degli autovalori calcolati nelle iterazioni di potenza inversa.

    Da R2025a

    Mostrare o nascondere il report di avanzamento, specificato come "off" o "on".

    Argomenti di output

    espandi tutto

    Modello del sistema di output, restituito come:

    • Un oggetto del modello di guadagno a polo zero (zpk), quando gli argomenti di input zeros, poles e gain contengono valori numerici. sys è sempre un oggetto del modello zpk quando si converte ltiSys nel tipo di modello zpk.

    • Un oggetto del modello stato-spazio generalizzato (genss), quando gli argomenti di input zeros, poles e gain includono parametri sincronizzabili, come i parametri realp o le matrici generalizzate (genmat).

    • Un oggetto del modello stato-spazio incerto (uss), quando gli argomenti di input zeros, poles e gain includono parametri incerti. L'utilizzo dei modelli incerti richiede una licenza Robust Control Toolbox.

    Proprietà

    espandi tutto

    Zeri del sistema, specificati come:

    • Un array di celle di zeri della funzione di trasferimento o le radici del numeratore per i modelli SISO.

    • Un array di celle Ny x Nu di vettori riga di zeri per ciascuna coppia di I/O in un modello MIMO, dove Ny è il numero di output e Nu è il numero di input.

    I valori di Z possono essere reali o complessi.

    Poli del sistema, specificati come:

    • Un array di celle di poli della funzione di trasferimento o le radici del denominatore per i modelli SISO.

    • Un array di celle Ny x Nu di vettori riga di poli per ciascuna coppia di I/O in un modello MIMO, dove Ny è il numero di output e Nu è il numero di input.

    I valori di P possono essere reali o complessi.

    Guadagni del sistema, specificati come:

    • Un valore scalare per i modelli SISO.

    • Una matrice Ny x Nu che memorizza i valori del guadagno per ciascuna coppia di I/O del modello MIMO, dove Ny è il numero di output e Nu è il numero di input.

    I valori di K possono essere reali o complessi.

    Specifica come vengono fattorizzati i polinomi del numeratore e del denominatore ai fini della visualizzazione, definita da una delle seguenti opzioni:

    • 'roots': visualizzare i fattori in termini di posizione delle radici del polinomio. 'roots' è il valore predefinito di DisplayFormat.

    • 'frequency': visualizzare i fattori in termini di frequenze naturali della radice ω0 e dei rapporti di smorzamento ζ.

      Il formato di visualizzazione 'frequency' non è disponibile per i modelli a tempo discreto con valore Variable 'z^-1' o 'q^-1'.

    • 'time constant': visualizzare i fattori in termini di costanti di tempo della radice τ e dei rapporti di smorzamento ζ.

      Il formato di visualizzazione 'time constant' non è disponibile per i modelli a tempo discreto con valore Variable 'z^-1' o 'q^-1'.

    Per i modelli a tempo continuo, la tabella seguente mostra come sono disposti i fattori polinomiali in ciascun formato di visualizzazione.

    Valore DisplayNameFattore di primo ordine (radice reale R)Fattore di secondo ordine (coppia di radici complesse R=a±jb)
    'roots'(sR)(s2αs+β), dove α=2a, β=a2+b2
    'frequency'(1sω0), dove ω0=R12ζ(sω0)+(sω0)2, dove ω02=a2+b2, ζ=aω0
    'time constant'(1τs), dove τ=1R12ζ(τs)+(τs)2, dove τ=1ω0, ζ=aτ

    Per i modelli a tempo discreto, i fattori polinomiali sono disposti in modo analogo a quelli dei modelli a tempo continuo, con le seguenti sostituzioni di variabili:

    sw=z1Ts;RR1Ts,

    dove Ts è il tempo di campionamento. Nel tempo discreto, τ e ω0 corrispondono pressoché alla costante di tempo e alla frequenza naturale della radice equivalente a tempo continuo, purché sia soddisfatta la seguente condizione: |z1|<<Ts(ω0<<πTs=Nyquist frequency).

    Variabile di visualizzazione del modello di guadagno a polo zero, specificata in uno dei seguenti modi:

    • 's': predefinita per modelli a tempo continuo

    • 'z': predefinita per modelli a tempo discreto

    • 'p': equivalente a 's'

    • 'q': equivalente a 'z'

    • 'z^-1': inversa di 'z'

    • 'q^-1': equivalente a 'z^-1'

    Ritardo di trasporto, specificato in uno dei seguenti modi:

    • Scalare: specificare il ritardo di trasporto per un sistema SISO o lo stesso ritardo di trasporto per tutte le coppie input/output di un sistema MIMO.

    • Array Ny x Nu: specificare ritardi di trasporto separati per ciascuna coppia input/output di un sistema MIMO. In questo caso, Ny è il numero di output e Nu è il numero di input.

    Per i sistemi a tempo continuo, specificare i ritardi di trasporto nell'unità di tempo specificata dalla proprietà TimeUnit. Per i sistemi a tempo discreto, specificare i ritardi di trasporto in multipli interi del tempo di campionamento Ts. Per ulteriori informazioni sui ritardi temporali, vedere Time Delays in Linear Systems.

    Ritardo di input per ciascun canale di input, specificato in uno dei seguenti modi:

    • Scalare: specificare il ritardo di input di un sistema SISO o lo stesso ritardo per tutti gli input di un sistema a multiplo input.

    • Vettore Nu x 1: specificare ritardi di input separati per l'input di un sistema a multiplo input, dove Nu è il numero di input.

    Per i sistemi a tempo continuo, specificare i ritardi di input nell'unità di tempo specificata dalla proprietà TimeUnit. Per i sistemi a tempo discreto, specificare i ritardi di input in multipli interi del tempo di campionamento Ts.

    Per ulteriori informazioni, vedere Time Delays in Linear Systems.

    Ritardo di output per ciascun canale di output, specificato in uno dei seguenti modi:

    • Scalare: specificare il ritardo di output di un sistema SISO o lo stesso ritardo per tutti gli output di un sistema a multiplo output.

    • Vettore Ny x 1: specificare ritardi di output separati per l'output di un sistema con multiplo output, dove Ny è il numero di output.

    Per i sistemi a tempo continuo, specificare i ritardi di output nell'unità di tempo specificata dalla proprietà TimeUnit. Per i sistemi a tempo discreto, specificare i ritardi di output in multipli interi del tempo di campionamento Ts.

    Per ulteriori informazioni, vedere Time Delays in Linear Systems.

    Tempo di campionamento, specificato come:

    • 0 per sistemi a tempo continuo.

    • Uno scalare positivo che rappresenta il periodo di campionamento di un sistema a tempo discreto. Specificare Ts nell'unità di tempo definita dalla proprietà TimeUnit.

    • -1 per un sistema a tempo discreto con un tempo di campionamento non specificato.

    Nota

    La modifica di Ts non discretizza o ricampiona il modello. Per convertire tra le rappresentazioni a tempo continuo e a tempo discreto, utilizzare c2d e d2c. Per modificare il tempo di campionamento di un sistema a tempo discreto, utilizzare d2d.

    Unità della variabile tempo, specificate in uno dei seguenti modi:

    • 'nanoseconds'

    • 'microseconds'

    • 'milliseconds'

    • 'seconds'

    • 'minutes'

    • 'hours'

    • 'days'

    • 'weeks'

    • 'months'

    • 'years'

    La modifica di TimeUnit non ha alcun effetto sulle altre proprietà, ma cambia il comportamento complessivo del sistema. Utilizzare chgTimeUnit per convertire tra le unità di tempo senza modificare il comportamento del sistema.

    Nomi dei canali di input, specificati in uno dei seguenti modi:

    • Un vettore di caratteri, per i modelli a singolo input.

    • Un array di celle dei vettori di caratteri, per i modelli a multiplo input.

    • '', nessun nome specificato per qualsiasi canale di input.

    In alternativa, è possibile assegnare i nomi agli input dei modelli a multiplo input utilizzando l'espansione automatica del vettore. Ad esempio, se sys è un modello a due input, inserire quanto segue.

    sys.InputName = 'controls';

    I nomi degli input si espandono automaticamente in {'controls(1)';'controls(2)'}.

    È possibile utilizzare la notazione abbreviata u per fare riferimento alla proprietà InputName. Ad esempio, sys.u equivale a sys.InputName.

    Utilizzare InputName per:

    • Identificare i canali sulla visualizzazione del modello e sui grafici.

    • Estrarre i sottosistemi dei sistemi MIMO.

    • Specificare i punti di connessione quando si interconnettono i modelli.

    Unità del canale di input, specificate in uno dei seguenti modi:

    • Un vettore di caratteri, per i modelli a singolo input.

    • Un array di celle dei vettori di caratteri, per i modelli a multiplo input.

    • '', nessuna unità specificata per qualsiasi canale di input.

    Utilizzare InputUnit per specificare le unità del segnale di input. InputUnit non ha alcun effetto sul comportamento del sistema.

    Gruppi di canali di input, specificati come struttura. Utilizzare InputGroup per suddividere i canali di input di sistemi MIMO in gruppi e fare riferimento a ciascun gruppo per nome. I nomi dei campi di InputGroup sono i nomi dei gruppi e i valori dei campi sono i canali di input di ciascun gruppo. Ad esempio, inserire quanto segue per creare gruppi di input denominati controls e noise che includono rispettivamente i canali di input 1 e 2 e i canali di input 3 e 5.

    sys.InputGroup.controls = [1 2];
    sys.InputGroup.noise = [3 5];

    È quindi possibile estrarre il sottosistema dagli input controls tutti gli output utilizzando quanto segue.

    sys(:,'controls')

    Per impostazione predefinita, InputGroup è una struttura senza campi.

    Nomi dei canali di output, specificati in uno dei seguenti modi:

    • Un vettore di caratteri, per i modelli a singolo output.

    • Un array di celle dei vettori di caratteri, per i modelli a multiplo output.

    • '', nessun nome specificato per qualsiasi canale di output.

    In alternativa, è possibile assegnare i nomi agli output dei modelli a multiplo output utilizzando l'espansione automatica del vettore. Ad esempio, se sys è un modello a due output, inserire quanto segue.

    sys.OutputName = 'measurements';

    I nomi degli output si espandono automaticamente in {'measurements(1)';'measurements(2)'}.

    È inoltre possibile utilizzare la notazione abbreviata y per fare riferimento alla proprietà OutputName. Ad esempio, sys.y equivale a sys.OutputName.

    Utilizzare OutputName per:

    • Identificare i canali sulla visualizzazione del modello e sui grafici.

    • Estrarre i sottosistemi dei sistemi MIMO.

    • Specificare i punti di connessione quando si interconnettono i modelli.

    Unità del canale di output, specificate in uno dei seguenti modi:

    • Un vettore di caratteri, per i modelli a singolo output.

    • Un array di celle dei vettori di caratteri, per i modelli a multiplo output.

    • '', nessuna unità specificata per qualsiasi canale di output.

    Utilizzare OutputUnit per specificare le unità del segnale di output. OutputUnit non ha alcun effetto sul comportamento del sistema.

    Gruppi di canali di output, specificati come struttura. Utilizzare OutputGroup per suddividere i canali di output di sistemi MIMO in gruppi e fare riferimento a ciascun gruppo per nome. I nomi dei campi di OutputGroup sono i nomi dei gruppi e i valori dei campi sono i canali di output di ciascun gruppo. Ad esempio, creare gruppi di output denominati temperature e measurement che includono rispettivamente i canali di output 1 e i canali di output 3 e 5.

    sys.OutputGroup.temperature = [1];
    sys.OutputGroup.measurement = [3 5];

    È quindi possibile estrarre il sottosistema da tutti gli input agli output measurement utilizzando quanto segue.

    sys('measurement',:)

    Per impostazione predefinita, OutputGroup è una struttura senza campi.

    Nome del sistema, specificato come vettore di caratteri. Ad esempio, 'system_1'.

    Testo specificato dall'utente che si desidera associare al sistema, specificato come vettore di caratteri o array di celle di vettori di caratteri. Ad esempio, 'System is MIMO'.

    Dati specificati dall'utente che si desidera associare al sistema, specificati come qualsiasi tipo di dati di MATLAB.

    Griglia di campionamento per array di modelli, specificata come array di strutture.

    Utilizzare SamplingGrid per tracciare i valori delle variabili associate a ciascun modello in un array di modelli, compresi gli array di modelli a tempo lineare invariante identificati (IDLTI).

    Impostare i nomi dei campi della struttura sui nomi delle variabili di campionamento. Impostare i valori dei campi sui valori delle variabili campionate associate a ciascun modello dell'array. Tutte le variabili di campionamento devono essere scalari numerici e tutti gli array di valori campionati devono corrispondere alle dimensioni dell'array del modello.

    Ad esempio, è possibile creare un array di modelli lineari 11x1 sysarr, acquisendo istantanee di un sistema lineare a tempo variabile nei momenti t = 0:10. Il codice seguente memorizza i campioni temporali con i modelli lineari.

     sysarr.SamplingGrid = struct('time',0:10)

    Analogamente, è possibile creare un array di modelli 6x9 M, campionando due variabili zeta e w in modo indipendente. Il codice seguente mappa i valori (zeta,w) su M.

    [zeta,w] = ndgrid(<6 values of zeta>,<9 values of w>)
    M.SamplingGrid = struct('zeta',zeta,'w',w)

    Quando si visualizza M, ciascuna voce dell'array include i valori zeta e w corrispondenti.

    M
    M(:,:,1,1) [zeta=0.3, w=5] =
     
            25
      --------------
      s^2 + 3 s + 25
     
    
    M(:,:,2,1) [zeta=0.35, w=5] =
     
             25
      ----------------
      s^2 + 3.5 s + 25
     
    ...

    Per gli array di modelli generati dalla linearizzazione di un modello Simulink® con più valori di parametri o di punti operativi, il software popola automaticamente SamplingGrid con i valori delle variabili corrispondenti a ciascuna voce dell'array. Ad esempio, i comandi di Simulink Control Design™ linearize (Simulink Control Design) e slLinearizer (Simulink Control Design) popolano SamplingGrid automaticamente.

    Per impostazione predefinita, SamplingGrid è una struttura senza campi.

    Funzioni oggetto

    I seguenti elenchi contengono un sottoinsieme rappresentativo delle funzioni utilizzabili con i modelli zpk. In linea generale, qualsiasi funzione applicabile a Modelli di sistemi dinamici è applicabile a un oggetto zpk.

    espandi tutto

    stepRisposta al gradino di un sistema dinamico
    impulseGrafico della risposta all'impulso di un sistema dinamico; dati di risposta all'impulso
    lsimCompute time response simulation data of dynamic system to arbitrary inputs
    bodeRisposta in frequenza di Bode del sistema dinamico
    nyquistRisposta di Nyquist di un sistema dinamico
    nicholsRisposta di Nichols di un sistema dinamico
    bandwidthFrequency response bandwidth
    polePoles of dynamic system
    zeroZeros and gain of SISO dynamic system
    pzplotPlot pole-zero map of dynamic system
    marginMargine di guadagno, margine di fase e frequenze di crossover
    tfModelli della funzione di trasferimento
    ssModello stato-spazio
    c2dConvertire il modello da tempo continuo a tempo discreto
    d2cConvert model from discrete to continuous time
    d2dResample discrete-time model
    feedbackConnessione di feedback di più modelli
    connectBlock diagram interconnections of dynamic systems
    seriesCollegamento in serie di due modelli
    parallelParallel connection of two models
    pidtunePID tuning algorithm for linear plant model
    rlocusLuogo della radice del sistema dinamico
    lqrProgettazione del regolatore lineare quadratico (LQR)
    lqgLinear-Quadratic-Gaussian (LQG) design
    lqiControllo lineare-quadratico-integrale
    kalmanDesign Kalman filter for state estimation

    Esempi

    comprimi tutto

    Per questo esempio, si consideri il seguente modello SISO di guadagno a polo zero a tempo continuo:

    sys(s)=-2s(s-1-i)(s-1+i)(s-2)Continuous-time zero-pole-gain model

    Specificare gli zeri, i poli e il guadagno, quindi creare il modello SISO di guadagno a polo zero.

    zeros = 0;
    poles = [1-1i 1+1i 2];
    gain = -2;
    sys = zpk(zeros,poles,gain)
    sys =
     
              -2 s
      --------------------
      (s-2) (s^2 - 2s + 2)
     
    Continuous-time zero/pole/gain model.
    Model Properties
    

    Per questo esempio, si consideri il seguente modello SISO di guadagno a polo zero a tempo discreto e tempo di campionamento pari a 0,1 s:

    sys(s)=7(z-1)(z-2)(z-3)(z-6)(z-5)(z-4)Discrete-time SISO zero-pole-gain model

    Specificare gli zeri, i poli, i guadagni e il tempo di campionamento, quindi creare il modello SISO di guadagno a polo zero a tempo discreto.

    zeros = [1 2 3];
    poles = [6 5 4];
    gain = 7;
    ts = 0.1;
    sys = zpk(zeros,poles,gain,ts)
    sys =
     
      7 (z-1) (z-2) (z-3)
      -------------------
       (z-6) (z-5) (z-4)
     
    Sample time: 0.1 seconds
    Discrete-time zero/pole/gain model.
    Model Properties
    

    In questo esempio, si crea un modello MIMO di guadagno a polo zero concatenando i modelli SISO di guadagno a polo zero. Si consideri il seguente modello di guadagno a polo zero a tempo continuo con input singolo e due output:

    sys(s)=[(s-1)(s+1)(s+2)(s+2+i)(s+2-i)].

    Specificare il modello MIMO di guadagno a polo zero concatenando le voci SISO.

    zeros1 = 1;
    poles1 = -1;
    gain = 1;
    sys1 = zpk(zeros1,poles1,gain)
    sys1 =
     
      (s-1)
      -----
      (s+1)
     
    Continuous-time zero/pole/gain model.
    Model Properties
    
    zeros2 = -2;
    poles2 = [-2+1i -2-1i];
    sys2 = zpk(zeros2,poles2,gain)
    sys2 =
     
          (s+2)
      --------------
      (s^2 + 4s + 5)
     
    Continuous-time zero/pole/gain model.
    Model Properties
    
    sys = [sys1;sys2]
    sys =
     
      From input to output...
           (s-1)
       1:  -----
           (s+1)
     
               (s+2)
       2:  --------------
           (s^2 + 4s + 5)
     
    Continuous-time zero/pole/gain model.
    Model Properties
    

    Creare un modello di guadagno a polo zero a tempo discreto a multiplo-input multiplo-output:

    sys(z)=[1(z+0.3)z(z+0.3)-(z-2)(z+0.3)3(z+0.3)]Discrete-time MIMO zero-pole-gain model

    con tempo di campionamento ts = 0.2 secondi.

    Specificare gli zeri e i poli come array di celle e i guadagni come un array.

    zeros = {[] 0;2 []};
    poles = {-0.3 -0.3;-0.3 -0.3};
    gain = [1 1;-1 3];
    ts = 0.2;

    Creare il modello MIMO di guadagno a polo zero a tempo discreto.

    sys = zpk(zeros,poles,gain,ts)
    sys =
     
      From input 1 to output...
              1
       1:  -------
           (z+0.3)
     
           - (z-2)
       2:  -------
           (z+0.3)
     
      From input 2 to output...
              z
       1:  -------
           (z+0.3)
     
              3
       2:  -------
           (z+0.3)
     
    Sample time: 0.2 seconds
    Discrete-time zero/pole/gain model.
    Model Properties
    

    Specificare gli zeri, i poli e il guadagno insieme al tempo di campionamento e creare il modello di guadagno a polo zero, specificando i nomi di stato e di input utilizzando le coppie nome-valore.

    zeros = 4;
    poles = [-1+2i -1-2i];
    gain = 3;
    ts = 0.05;
    sys = zpk(zeros,poles,gain,ts,'InputName','Force')
    sys =
     
      From input "Force" to output:
         3 (z-4)
      --------------
      (z^2 + 2z + 5)
     
    Sample time: 0.05 seconds
    Discrete-time zero/pole/gain model.
    Model Properties
    

    Il numero dei nomi di input deve essere coerente con il numero di zeri.

    Assegnare un nome agli input e agli output può risultare utile quando si tratta di grafici di risposta per i sistemi MIMO.

    step(sys)

    MATLAB figure

    Si noti il nome dell'input Force nel titolo del grafico di risposta al gradino.

    Per questo esempio, creare un modello di guadagno a polo zero a tempo continuo utilizzando espressioni razionali. Utilizzare un'espressione razionale può talvolta risultare più semplice e intuitivo che specificare i poli e gli zeri.

    Si consideri il sistema seguente:

    sys(s)=ss2+2s+10.

    Per creare il modello di funzione di trasferimento, specificare innanzitutto s come oggetto zpk.

    s = zpk('s')
    s =
     
      s
     
    Continuous-time zero/pole/gain model.
    Model Properties
    

    Creare il modello di guadagno a polo zero utilizzando s nell'espressione razionale.

    sys = s/(s^2 + 2*s + 10)
    sys =
     
             s
      ---------------
      (s^2 + 2s + 10)
     
    Continuous-time zero/pole/gain model.
    Model Properties
    

    Per questo esempio, creare un modello di guadagno a polo zero a tempo discreto utilizzando un'espressione razionale. Utilizzare un'espressione razionale può talvolta risultare più semplice e intuitivo che specificare i poli e gli zeri.

    Si consideri il sistema seguente:

    sys(z)=z-1z2-1.85z+0.9.Discrete-time zero-pole-gain model

    Per creare il modello di guadagno a polo zero, specificare innanzitutto z come zpk e il tempo di campionamento ts.

    ts = 0.1;
    z = zpk('z',ts)
    z =
     
      z
     
    Sample time: 0.1 seconds
    Discrete-time zero/pole/gain model.
    Model Properties
    

    Creare il modello di guadagno a polo zero utilizzando z nell'espressione razionale.

    sys = (z - 1) / (z^2 - 1.85*z + 0.9)
    sys =
     
             (z-1)
      -------------------
      (z^2 - 1.85z + 0.9)
     
    Sample time: 0.1 seconds
    Discrete-time zero/pole/gain model.
    Model Properties
    

    Per questo esempio, creare un modello di guadagno a polo zero con proprietà ereditate da un altro modello di guadagno a polo zero. Si considerino i seguenti due modelli di guadagno a polo zero:

    sys1(s)=2ss(s+8)andsys2(s)=0.8(s-1)(s+3)(s-5).Two zero-pole-gain models with inherited properties

    Per questo esempio, creare sys1 con le proprietà TimeUnit e InputDelay impostate su 'minutes'.

    zero1 = 0;
    pole1 = [0;-8];
    gain1 = 2;
    sys1 = zpk(zero1,pole1,gain1,'TimeUnit','minutes','InputUnit','minutes')
    sys1 =
     
        2 s
      -------
      s (s+8)
     
    Continuous-time zero/pole/gain model.
    Model Properties
    
    propValues1 = [sys1.TimeUnit,sys1.InputUnit]
    propValues1 = 1×2 cell
        {'minutes'}    {'minutes'}
    
    

    Creare il secondo modello di guadagno a polo zero con le proprietà ereditate da sys1.

    zero = 1;
    pole = [-3,5];
    gain2 = 0.8;
    sys2 = zpk(zero,pole,gain2,sys1)
    sys2 =
     
       0.8 (s-1)
      -----------
      (s+3) (s-5)
     
    Continuous-time zero/pole/gain model.
    Model Properties
    
    propValues2 = [sys2.TimeUnit,sys2.InputUnit]
    propValues2 = 1×2 cell
        {'minutes'}    {'minutes'}
    
    

    Si noti che il modello di guadagno a polo zero sys2 ha le stesse proprietà di sys1.

    Si consideri la seguente matrice di guadagno statico a due input e due output m:

    m=[2435]MIMO static gain matrix

    Specificare la matrice di guadagno e creare il modello di guadagno a polo zero a guadagno statico.

    m = [2,4;...
        3,5];
    sys1 = zpk(m)
    sys1 =
     
      From input 1 to output...
       1:  2
     
       2:  3
     
      From input 2 to output...
       1:  4
     
       2:  5
     
    Static gain.
    Model Properties
    

    È possibile utilizzare il modello di guadagno a polo zero a guadagno statico sys1 ottenuto in precedenza per collegarlo in cascata a un altro modello di guadagno a polo zero.

    sys2 = zpk(0,[-1 7],1)
    sys2 =
     
           s
      -----------
      (s+1) (s-7)
     
    Continuous-time zero/pole/gain model.
    Model Properties
    
    sys = series(sys1,sys2)
    sys =
     
      From input 1 to output...
               2 s
       1:  -----------
           (s+1) (s-7)
     
               3 s
       2:  -----------
           (s+1) (s-7)
     
      From input 2 to output...
               4 s
       1:  -----------
           (s+1) (s-7)
     
               5 s
       2:  -----------
           (s+1) (s-7)
     
    Continuous-time zero/pole/gain model.
    Model Properties
    

    Per questo esempio, calcolare il modello di guadagno a polo zero del seguente modello stato-spazio:

    A=[-2-11-2],B=[112-1],C=[10],D=[01].State-space matrices

    Creare il modello stato-spazio utilizzando le matrici stato-spazio.

    A = [-2 -1;1 -2];
    B = [1 1;2 -1];
    C = [1 0];
    D = [0 1];
    ltiSys = ss(A,B,C,D);

    Convertire il modello stato-spazio ltiSys in un modello di guadagno a polo zero.

    sys = zpk(ltiSys)
    sys =
     
      From input 1 to output:
            s
      --------------
      (s^2 + 4s + 5)
     
      From input 2 to output:
      (s^2 + 5s + 8)
      --------------
      (s^2 + 4s + 5)
     
    Continuous-time zero/pole/gain model.
    Model Properties
    

    È possibile utilizzare un loop for per specificare un array di modelli di guadagno a polo zero.

    Innanzitutto, preallocare l'array di modelli di guadagno a polo zero con degli zeri.

    sys = zpk(zeros(1,1,3));

    I primi due indici rappresentano il numero di output e di input dei modelli, mentre il terzo indice è il numero di modelli presenti nell'array.

    Creare il modello di guadagno a polo zero utilizzando un'espressione razionale nel loop for.

    s = zpk('s');                                                  
    for k = 1:3                                                             
        sys(:,:,k) = k/(s^2+s+k);                                          
    end
    sys
    sys(:,:,1,1) =
     
            1
      -------------
      (s^2 + s + 1)
     
    
    sys(:,:,2,1) =
     
            2
      -------------
      (s^2 + s + 2)
     
    
    sys(:,:,3,1) =
     
            3
      -------------
      (s^2 + s + 3)
     
    3x1 array of continuous-time zero/pole/gain models.
    Model Properties
    

    Per questo esempio, estrarre i componenti misurati e di rumore di un modello polinomiale identificato in due modelli di guadagno a polo zero separati.

    Caricare il modello polinomiale Box-Jenkins ltiSys in identifiedModel.mat.

    load('identifiedModel.mat','ltiSys');

    ltiSys è un modello a tempo discreto identificato di forma: y(t)=BFu(t)+CDe(t), dove BF rappresenta il componente misurato e CD rappresenta il componente di rumore.

    Estrarre i componenti misurati e di rumore come modelli di guadagno a polo zero.

    sysMeas = zpk(ltiSys,'measured') 
    sysMeas =
     
      From input "u1" to output "y1":
                -0.14256 z^-1 (1-1.374z^-1)
      z^(-2) * -----------------------------
               (1-0.8789z^-1) (1-0.6958z^-1)
     
    Sample time: 0.04 seconds
    Discrete-time zero/pole/gain model.
    Model Properties
    
    sysNoise = zpk(ltiSys,'noise')
    sysNoise =
     
      From input "v@y1" to output "y1":
                0.045563 (1+0.7245z^-1)
      --------------------------------------------
      (1-0.9658z^-1) (1 - 0.0602z^-1 + 0.2018z^-2)
     
    Input groups:      
       Name    Channels
       Noise      1    
    Sample time: 0.04 seconds
    Discrete-time zero/pole/gain model.
    Model Properties
    

    Il componente misurato può servire come modello dell'impianto, mentre il componente di rumore può essere utilizzato come modello di disturbo per la progettazione del sistema di controllo.

    Per questo esempio, creare un modello SISO di guadagno a polo zero con un ritardo di input di 0,5 secondi e un ritardo di output di 2,5 secondi.

    zeros = 5;
    poles = [7+1i 7-1i -3];
    gains = 1;
    sys = zpk(zeros,poles,gains,'InputDelay',0.5,'OutputDelay',2.5)
    sys =
     
                          (s-5)
      exp(-3*s) * ----------------------
                  (s+3) (s^2 - 14s + 50)
     
    Continuous-time zero/pole/gain model.
    Model Properties
    

    È inoltre possibile utilizzare il comando get per visualizzare tutte le proprietà di un oggetto MATLAB.

    get(sys)
                    Z: {[5]}
                    P: {[3×1 double]}
                    K: 1
        DisplayFormat: 'roots'
             Variable: 's'
              IODelay: 0
           InputDelay: 0.5000
          OutputDelay: 2.5000
            InputName: {''}
            InputUnit: {''}
           InputGroup: [1×1 struct]
           OutputName: {''}
           OutputUnit: {''}
          OutputGroup: [1×1 struct]
                Notes: [0×1 string]
             UserData: []
                 Name: ''
                   Ts: 0
             TimeUnit: 'seconds'
         SamplingGrid: [1×1 struct]
    

    Per ulteriori informazioni sulla specifica del ritardo temporale per un modello LTI, vedere Specifying Time Delays.

    Per questo esempio, progettare un controller PID 2-DOF con una larghezza di banda target di 0,75 rad/s per un sistema rappresentato dal seguente modello di guadagno a polo zero:

    sys(s)=1s2+0.5s+0.1Zero-pole-gain model

    Creare un oggetto del modello di guadagno a polo zero sys utilizzando il comando zpk.

    zeros = [];
    poles = [-0.25+0.2i;-0.25-0.2i];
    gain = 1;
    sys = zpk(zeros,poles,gain)
    sys =
     
                1
      ---------------------
      (s^2 + 0.5s + 0.1025)
     
    Continuous-time zero/pole/gain model.
    Model Properties
    

    Utilizzando la larghezza di banda target, utilizzare pidtune per generare un controller 2-DOF.

    wc = 0.75;
    C2 = pidtune(sys,'PID2',wc)
    C2 =
     
                           1              
      u = Kp (b*r-y) + Ki --- (r-y) + Kd*s (c*r-y)
                           s              
    
      with Kp = 0.512, Ki = 0.0975, Kd = 0.574, b = 0.38, c = 0
     
    Continuous-time 2-DOF PID controller in parallel form.
    Model Properties
    

    L'utilizzo del tipo 'PID2', determina la generazione di un controller 2-DOF da parte di pidtune, rappresentato come un oggetto pid2. La visualizzazione conferma questo risultato. La visualizzazione mostra inoltre che pidtune sincronizza tutti i coefficienti del controller, inclusi i pesi dei setpoint b e c per bilanciare prestazioni e robustezza.

    Per sincronizzare il PID in modo interattivo nel Live Editor, vedere l'attività Tune PID Controller Live Editor. Questa attività consente di progettare un controller PID in modo interattivo e genera automaticamente il codice MATLAB per lo script live.

    Per sincronizzare il PID in modo interattivo in un'applicazione autonoma, utilizzare PID Tuner. Per un esempio di progettazione di un controller utilizzando l'app, vedere Progettazione di un controller PID per un tracking di riferimento veloce.

    Da R2025a

    Questo esempio mostra come ottenere un modello troncato a guadagno a polo zero di un modello stato-spazio rado. Questo esempio utilizza un modello rado ottenuto dalla linearizzazione di un modello termico di distribuzione del calore in un'asta cilindrica circolare.

    Caricare i dati del modello.

    load cylindricalRod.mat
    sys = sparss(A,B,C,D,E);
    w = logspace(-7,-1,20);
    size(sys)
    Sparse state-space model with 3 outputs, 1 inputs, and 7522 states.
    

    Analizzare la risposta in frequenza del modello.

    sigmaplot(sys,w)

    MATLAB figure

    Per ottenere un'approssimazione troncata, utilizzare zpk e specificare la banda di frequenza di interesse. Per questo modello, è possibile utilizzare un intervallo di frequenza da 0 rad/s a 0,01 rad/s per ottenere l'approssimazione di ordine basso.

    zsys = zpk(sys,Focus=[0 1e-2],Display="off");

    Confrontare la risposta in frequenza.

    sigmaplot(sys,zsys,w)

    MATLAB figure

    Questo modello termico presenta un decadimento molto rapido, oltre 0,001 rad/s. Per impostazione predefinita, il modello ridotto ottenuto utilizzando zpk non fornisce una buona corrispondenza per questo decadimento. Per mitigare questo problema, è possibile utilizzare l'argomento RollOff di zpk e specificare un valore minimo di decadimento oltre la banda di frequenza di interesse. Specificare un valore del gradiente di decadimento di -45, che corrisponde a una velocità di almeno –900 db/decade.

    zsys2 = zpk(sys,Focus=[0 1e-2],RollOff=-45,Display="off");
    sigmaplot(sys,zsys2,w)

    MATLAB figure

    Il modello ridotto fornisce ora un'approssimazione molto più accurata del valore di decadimento. Tuttavia, in questo esempio, la nuova regolazione del gradiente di decadimento utilizzando zpk richiede il ricalcolo degli zeri e dei poli. Questo può essere molto costoso dal punto di vista computazionale nel caso di modelli su larga scala. In alternativa, è possibile utilizzare il metodo di troncamento a polo zero di reducespec e regolare il decadimento senza costi computazionali aggiuntivi, dopo che il software ha calcolato i poli e gli zeri. Per un esempio, vedere Zero-Pole Truncation of Thermal Model.

    Algoritmi

    zpk utilizza la funzione di MATLAB roots per convertire le funzioni di trasferimento e le funzioni zero e pole per convertire i modelli stato-spazio.

    Per convertire i modelli radi, zpk utilizzare l'algoritmo di Krylov-Schur [1] per le iterazioni di potenza inversa per calcolare i poli e gli zeri nella banda di frequenza specificata.

    Riferimenti

    [1] Stewart, G. W. “A Krylov--Schur Algorithm for Large Eigenproblems.” SIAM Journal on Matrix Analysis and Applications 23, no. 3 (January 2002): 601–14. https://doi.org/10.1137/S0895479800371529.

    Funzionalità estese

    espandi tutto

    Cronologia versioni

    Introduzione prima di R2006a

    espandi tutto