Durum Uzayı - State-space Kontrolüne Giriş

Not

Bu makale, Tyler Veness’in izniyle, FRC ‘deki Controls Engineering’den alınmıştır.

PID’den Model Tabanlı-Model-Based Kontrol

PID denetleyicileri ayarlarken, mevcut, geçmiş ve gelecekle ilgili denetleyici parametreleriyle uğraşmaya odaklanıyoruz: temel sistem durumlarından ziyade error (P, I ve D terimleri). Bu yaklaşım pek çok durumda işe yarasa da, eksik bir dünya görüşüdür.

Model tabanlı kontrol, kontrol etmeye çalıştığımız system (mechanism) için doğru bir model geliştirmeye odaklanır. Bu modeller keyfi bir orantılı gains yerine sistemin fiziksel yanıtlarına dayalı olarak geribildirim denetleyicileri tarafından seçilen testler yoluyla elde edilen gains bilgilendirmeye yardımcı olur. Bu, sadece bir sistemin nasıl tepki vereceğini önceden tahmin etmemize değil, aynı zamanda kontrolörlerimizi fiziksel bir robot olmadan test etmemize ve basit hataların ayıklanmasında zamandan tasarruf etmemize olanak tanır.

Not

State-space control makes extensive use of linear algebra. More on linear algebra in modern control theory, including an introduction to linear algebra and resources, can be found in Chapter 5 of Controls Engineering in FRC.

If you’ve used WPILib’s feedforward classes for SimpleMotorFeedforward or its sister classes, or used SysId to pick PID gains for you, you’re already familiar with model-based control! The kv and ka gains can be used to describe how a motor (or arm, or drivetrain) will react to voltage. We can put these constants into standard state-space notation using WPILib’s LinearSystem, something we will do in a later article.

Kelime bilgisi

For the background vocabulary that will be used throughout this article, see the Glossary.

Doğrusal Cebire Giriş

Lineer Cebirin temel kavramlarına kısa ve sezgisel bir giriş için, 3Blue1Brown’s Essence of linear algebra series in 1’den 4’e kadar olan bölümlerini öneriyoruz (Vektörler, bunlar ne bile ?, Doğrusal kombinasyonlar, aralık ve taban vektörleri, Doğrusal dönüşümler ve matrisler ve kompozisyon olarak Matris çarpımı).

Durum Uzayı nedir?

Recall that 2D space has two axes: x and y. We represent locations within this space as a pair of numbers packaged in a vector, and each coordinate is a measure of how far to move along the corresponding axis. State-space is a Cartesian coordinate system with an axis for each state variable, and we represent locations within it the same way we do for 2D space: with a list of numbers in a vector. Each element in the vector corresponds to a state of the system. This example shows two example state vectors in the state-space of an elevator model with the states \([\text{position}, \text{velocity}]\):

Two vectors in state space with their corresponding arrows.

Bu görüntüde, durum uzayındaki durumları temsil eden vektörler oklardır. Şu andan itibaren bu vektörler, vektörün ucundaki bir nokta ile temsil edilecek, ancak vektörün geri kalanının hala orada olduğunu unutmayın.

state, :term:`girişleri <input> :term:`outputs <output>çıkışlarına ek olarak vektörler olarak temsil edilir. Mevcut durumlardan ve girdilerden durumdaki değişime haritalama bir denklemler sistemi olduğundan, bunu matris biçiminde yazmak doğaldır. Bu matris denklemi durum uzayı gösteriminde yazılabilir.

Durum Uzayı Gösterimi nedir?

Durum uzayı gösterimi, bir sistemin zaman içinde nasıl gelişeceğini açıklayan bir dizi matris denklemidir. Bu denklemler, \(\dot{\mathbf{x}}\), and the output \(\mathbf{y}\), değişikliklerini mevcut durum vektörünün doğrusal kombinasyonlarıyla ilişkilendirir \(\mathbf{x}\) and input vector \(\mathbf{u}\).

Durum alanı kontrolü, sürekli zamanlı ve ayrık zamanlı sistemlerle başa çıkabilir. Sürekli zaman durumunda, sistemin durumunun değişim oranı: \(\mathbf{\dot{x}}\) , geçerli durumun doğrusal bir kombinasyonu olarak ifade edilir: \(\mathbf{x}\) and input \(\mathbf{u}\).

Buna karşılık, ayrık zamanlı sistemler, bir sonraki zaman adımımızda sistemin durumunu şu anki duruma göre ifade eder. \(\mathbf{x}_{k+1}\) ve mevcut duruma göre :math: mathbf {x} _k ve girdi: math: mathbf {u} _k, burada \(k\) geçerli zaman adımıdır ve \(k+1\) sonraki zaman adımıdır.

Hem sürekli hem de ayrık zaman formlarında,`output` vector \(\mathbf{y}\), current: term: “state” ve:term:input ifadelerinin doğrusal bir kombinasyonu olarak ifade edilir . Çoğu durumda, çıktı, sistem durumunun bir alt kümesidir ve akım girişinden hiçbir katkısı yoktur.

Sistemleri modellerken, ilk olarak sürekli zaman gösterimini türetiyoruz çünkü hareket denklemleri doğal olarak bir sistemin durumunun değişim hızı olarak mevcut durumu ve girdilerinin doğrusal bir kombinasyonu olarak yazılır. Bu gösterimi robot üzerinde ayrık zamana dönüştürüyoruz çünkü sistemi sürekli yerine orada ayrı zaman adımlarında güncelliyoruz.

Aşağıdaki iki denklem seti, sürekli zaman ve ayrık zaman durum uzayı gösteriminin standart biçimidir:

\[\begin{split}\text{Continuous: } \dot{\mathbf{x}} &= \mathbf{A}\mathbf{x} + \mathbf{B}\mathbf{u} \\ \mathbf{y} &= \mathbf{C}\mathbf{x} + \mathbf{D}\mathbf{u} \\ \nonumber \\ \text{Discrete: } \mathbf{x}_{k+1} &= \mathbf{A}\mathbf{x}_k + \mathbf{B}\mathbf{u}_k \\ \mathbf{y}_k &= \mathbf{C}\mathbf{x}_k + \mathbf{D}\mathbf{u}_k\end{split}\]
\[\begin{split}\begin{array}{llll} \mathbf{A} & \text{system matrix} & \mathbf{x} & \text{state vector} \\ \mathbf{B} & \text{input matrix} & \mathbf{u} & \text{input vector} \\ \mathbf{C} & \text{output matrix} & \mathbf{y} & \text{output vector} \\ \mathbf{D} & \text{feedthrough matrix} & & \\ \end{array}\end{split}\]

Sürekli zaman durum uzay sistemi, ayrıklaştırma adı verilen bir süreçle ayrık zamanlı bir sisteme dönüştürülebilir.

Not

Ayrık zamanlı formda, sistemin durumu güncellemeler arasında sabit tutulur. Bu, rahatsızlıklara yalnızca durum tahminimiz güncellendiğinde tepki verebileceğimiz anlamına gelir. Tahminimizi daha hızlı güncellemek, performansın bir noktaya kadar iyileştirilmesine yardımcı olabilir. WPILib’in Notifier sınıfı, ana robot döngüsünden daha hızlı güncellemeler isteniyorsa kullanılabilir.

Not

Bir sistemin sürekli zaman ve ayrık zaman matrisleri A, B, C ve D aynı adlara sahipken, bunlar eşdeğer değildir. Sürekli zaman matrisleri, durum değişim oranını açıklarken:math:mathbf{x} , ayrık zaman matrisleri ise sistemin durumunu bir sonraki zaman adımında mevcut durum ve girdinin bir fonksiyonu olarak tanımlar.

Önemli

WPILib’in LinearSystem’i, sürekli zaman sistem matrislerini alır ve bunları gerektiğinde dahili olarak ayrık zaman biçimine dönüştürür.

State-space Notation Example: Flywheel from Kv and Ka

Recall that we can model the motion of a flywheel connected to a brushed DC motor with the equation \(V = K_v \cdot v + K_a \cdot a\), where V is voltage output, v is the flywheel’s angular velocity and a is its angular acceleration. This equation can be rewritten as \(a = \frac{V - K_v \cdot v}{K_a}\), or \(a = \frac{-K_v}{K_a} \cdot v + \frac{1}{K_a} \cdot V\). Notice anything familiar? This equation relates the angular acceleration of the flywheel to its angular velocity and the voltage applied.

Bu denklemi durum uzayı gösterimine dönüştürebiliriz. Bir durum (hız), bir input (voltage) ve bir output (velocity) olan bir sistem oluşturabiliriz. Hızın ilk türevinin ivme olduğunu hatırlayarak, denklemimizi aşağıdaki gibi yazabiliriz, hızı şu ile değiştirebiliriz: \(\mathbf{x}\), acceleration with \(\mathbf{\dot{x}}\) ve voltaj:math:mathbf{V} ile : math:mathbf {u}:

\[\mathbf{\dot{x}} = \begin{bmatrix}\frac{-K_v}{K_a}\end{bmatrix} \mathbf{x} + \begin{bmatrix}\frac{1}{K_a}\end{bmatrix} \mathbf{u}\]

The output and state are the same, so the output equation is the following:

\[\mathbf{y} = \begin{bmatrix}1\end{bmatrix} \mathbf{x} + \begin{bmatrix}0\end{bmatrix} \mathbf{u}\]

That’s it! That’s the state-space model of a system for which we have the \(K_v\) and \(K_a\) constants. This same math is used in system identification to model flywheels and drivetrain velocity systems.

Durum Uzayı Yanıtlarını Görselleştirme: Faz Portresi

A phase portrait can help give a visual intuition for the response of a system in state-space. The vectors on the graph have their roots at some point \(\mathbf{x}\) in state-space, and point in the direction of \(\mathbf{\dot{x}}\), the direction that the system will evolve over time. This example shows a model of a pendulum with the states of angle and angular velocity.

Bir sistemin durum uzayında alabileceği potansiyel bir yörüngeyi izlemek için, başlamak üzere bir nokta seçin ve etrafındaki okları takip edin. Bu örnekte, \([-2, 0]\) ile başlayabiliriz. Oradan, biz dikeyde döndükçe hız artar ve salınımın zıt ucuna ulaşana kadar azalmaya başlar. Kökenle ilgili bu dönme döngüsü sonsuza kadar tekrar eder.

Pendulum Phase Plot with arrows all around going roughly in a circle.

Faz portresinin kenarlarının yakınında, X ekseninin saat yönünün tersine: math: pi radyan dönüşü olarak sarıldığına ve \(\pi\) radyanının saat yönünde bir dönüşünün aynı noktada sona ereceğine dikkat edin.

Diferansiyel denklemler ve faz portreleri hakkında daha fazla bilgi için, bkz.`3Blue1Brown Diferansiyel Denklemler videosu <https://www.youtube.com/watch?v=p_di4Zn4wz4>`__ - saat 15: 30’da sarkaç faz uzayını canlandırmak için harika bir iş çıkarırlar.

Feedforward’ı Görselleştirme

Bu aşama portresi, sistemin”open loop” tepkilerini, yani devletin doğal olarak gelişmesine izin verirsek nasıl tepki vereceğini gösterir. Sarkacı yatay olarak dengelemek istiyorsak (at \((\frac{\pi}{2}, 0)\) in state space), bir şekilde bir kontrol uygulamamız gerekir: term: input Sarkacın açık döngü eğiliminin aşağı doğru sallanma eğilimine karşı koymak için. Feedforward’ın yapmaya çalıştığı budur - bunu, faz portremizin durum uzayındaT reference AMkonumunda (veya ayar noktasında) bir dengeye sahip olmasını sağlayın.

Looking at our phase portrait from before, we can see that at \((\frac{\pi}{2}, 0)\) in state space, gravity is pulling the pendulum down with some torque T, and producing some downward angular acceleration with magnitude \(\frac{\tau}{I}\), where I is angular moment of inertia of the pendulum. If we want to create an equilibrium at our reference of \((\frac{\pi}{2}, 0)\), we would need to apply an input can counteract the system’s natural tendency to swing downward. The goal here is to solve the equation \(\mathbf{0 = Ax + Bu}\) for \(\mathbf{u}\). Below is shown a phase portrait where we apply a constant input that opposes the force of gravity at \((\frac{\pi}{2}, 0)\):

Pendulum phase plot with equilibrium at (pi/2, 0).

Geri bildirim kontrolü

Bir DC motor söz konusu olduğunda, sadece matematiksel bir modelle ve sistemin tüm mevcut durumlarının bilgisiyle (örneğin, açısal hız), gelecekteki voltaj girişleri verildiğinde gelecekteki tüm durumları tahmin edebiliriz. Ancak sistem, bir yük veya beklenmedik sürtünme gibi denklemlerimiz tarafından modellenmeyen herhangi bir şekilde bozulursa, motorun açısal hızı zamanla modelden sapacaktır. Bununla mücadele etmek için, motora bir geri besleme kontrolörü kullanarak düzeltici komutlar verebiliriz.

PID kontrolörü, bir geri besleme kontrolü biçimidir. Durum uzayı kontrolü genellikle şunları kullanır control law, burada \(\mathbf{K}\) bazı kontrolcü gain matrisi, \(\mathbf{r}\) reference durumu ve :matematik:`\mathbf{x}` durum uzayındaki mevcut durumdur. Bu iki vektör arasındaki fark \(\mathbf{r-x}\), :term:`error`dır.

\[\mathbf{u} = \mathbf{K(r - x)}\]

Bu control law, sistemimizin her durumu için oransal bir denetleyicidir. Oransal denetleyiciler, sistemimizin durumunu durum uzayındaki referans durumuna çeken yazılım tanımlı yaylar oluşturur. Kontrol edilen sistemin konum ve hız durumlarına sahip olması durumunda, yukarıdaki :terim:`control law`, aynı zamanda konumu ve hız hatasını sıfıra çekmeye çalışan bir PD kontrolörü gibi davranacaktır.

Bu kontrol yasasının uygulamada bir örneğini gösterelim. Sarkaç sistemini yukarıdan kullanacağız, burada sallanan sarkaç durum uzayında orijini daire içine aldı. \(\mathbf{K}\) sıfır matrisinin (tümü sıfır olan bir matris), sıfırın P ve D kazançlarını toplama gibi olacağı durum – kontrol yok girdi uygulanabilir ve aşama portresi yukarıdakiyle aynı görünecektir.

Geri bildirim eklemek için, rasgele olarak bir \(\mathbf{K}\) of [2, 2] seçiyoruz; burada sarkaç için bizim input açısal ivmedir. Bu K, her bir konumun radyan hata için, açısal ivmenin saniyede 2 radyan kare olacağı anlamına gelir; benzer şekilde, :terim:`hata` nın her saniyesinde her radyan için saniyede 2 radyan kare hızlanırız. Durum uzayında bir yerden içeriye doğru bir oku takip etmeyi deneyin - başlangıçtaki koşullar ne olursa olsun, durum, saf ileri beslemeyle sonsuza kadar daire çizmek yerine referans a yerleşecektir.

Closed loop pendulum phase plot with reference at (pi/2, 0).

Ancak, sistemimiz için bir optimal :terim:`kazanç` matrisi K’yi nasıl seçebiliriz? Manuel olarak şu seçimi yapabilsek de :terim:`<gain> kazanır` ve sistem yanıtını simüle edebilir veya bir PID kontrolörü gibi robot üzerinde ayarlayabilirken, modern kontrol teorisinin daha iyi bir cevabı var :Linear-Quadratic Regulator (LQR).

Linear-Quadratic Regulator / Doğrusal-Kuadratik Düzenleyici

Model tabanlı kontrol, bir başlangıç koşulu ve gelecekteki kontrol girdileri verilen bir sistemin gelecekteki durumlarını tahmin edebileceğimiz anlamına geldiğinden, matematiksel olarak en uygun olanı seçebiliriz gain matrix \(\mathbf{K}\). Bunu yapmak için, önce “iyi” veya “kötü” nün neye benzeyeceğini tanımlamalıyız \(\mathbf{K}\) . Bunu, hata karesini ve zaman içindeki kontrol girdisini toplayarak yaparız, bu da bize kontrol yasamızın ne kadar “kötü” olacağını gösteren bir sayı verir. Bu miktarı en aza indirirsek, optimal kontrol yasasına ulaşmış olacağız.

LQR: Tanım

Linear-Quadratic Regulators work by finding a control law that minimizes the following cost function, which weights the sum of error and control effort over time, subject to the linear system dynamics \(\mathbf{x_{k+1} = Ax_k + Bu_k}\).

\[J = \sum\limits_{k=0}^\infty \left(\mathbf{x}_k^T\mathbf{Q}\mathbf{x}_k + \mathbf{u}_k^T\mathbf{R}\mathbf{u}_k\right)\]

The control law that minimizes \(\mathbf{J}\) can be written as \(\mathbf{u = K(r_k - x_k)}\), where \(r_k - x_k\) is the error.

Not

LQR tasarımının \(\mathbf{Q}\) ve \(\mathbf{R}\) matrisleri ayrıklaştırmaya ihtiyaç duymaz, ancak \(\mathbf{K}\) sürekli zaman ve ayrık zaman için hesaplanır systems farklı olacaktır.

LQR: ayarlama

PID kontrolörlerinin kazançlarını değiştirilerek ayarlanabildiği gibi, kontrol yasamızın hatamızı ve girdimizi nasıl dengelediğini de değiştirmek istiyoruz. Örneğin, bir uzay gemisi belirli bir referansa ulaşmak için harcadığı yakıtı en aza indirmek isteyebilirken, yüksek hızlı bir robotik kolun bozulmalara hızlı tepki vermesi gerekebilir.

LQR’mizdeki hata ve kontrol çabasını \(\mathbf{Q}\) ve \(\mathbf{R}\) matrisleriyle ağırlıklandırabiliriz. Maliyet fonksiyonumuzda (kontrol yasamızın ne kadar “kötü” performans göstereceğini açıklar), \(\mathbf{Q}\) ve \(\mathbf{R}\), hatamızı ve kontrol girdimizi birbirine göre ağırlıklandırır. Yukarıdaki uzay gemisi örneğinde, hatayı çok fazla cezalandırmak istemediğimizi göstermek için nispeten küçük sayılarla \(\ mathbf{Q}\) kullanabiliriz, oysa \(\mathbf{R}\) yakıt harcamanın istenmeyen olduğunu göstermek için büyük olabilir.

WPILib ile LQR sınıfı, istenen maksimum durum sapmalarını ve kontrol çabalarının bir vektörünü alır ve bunları dahili olarak Bryson kuralıyla tam Q ve R matrislerine dönüştürür. Bu vektörlere atıfta bulunmak için genellikle küçük harf \(\mathbf{q}\) ve \(\mathbf{r}\) kullanır ayrıca matrisleri belirtmek için \(\mathbf{Q}\) ve \(\mathbf{R}\) kullanır.

Increasing the \(\mathbf{q}\) elements would make the LQR less heavily weight large errors, and the resulting control law will behave more conservatively. This has a similar effect to penalizing control effort more heavily by decreasing \(\mathbf{r}\)'s elements.

Similarly, decreasing the \(\mathbf{q}\) elements would make the LQR penalize large errors more heavily, and the resulting control law will behave more aggressively. This has a similar effect to penalizing control effort less heavily by increasing \(\mathbf{r}\) elements.

Örneğin, konum ve hız durumlarına sahip bir asansör sistemi için aşağıdaki Q ve R’yi kullanabiliriz.

// Example system -- must be changed to match your robot.
LinearSystem<N2, N1, N1> elevatorSystem = LinearSystemId.identifyPositionSystem(5, 0.5);
LinearQuadraticRegulator<N2, N1, N1> controller = new LinearQuadraticRegulator(elevatorSystem,
      // q's elements
      VecBuilder.fill(0.02, 0.4),
      // r's elements
      VecBuilder.fill(12.0),
      // our dt
      0.020);
// Example system -- must be changed to match your robot.
   LinearSystem<2, 1, 1> elevatorSystem = frc::LinearSystemId::IdentifyVelocitySystem(5, 0.5);
   LinearQuadraticRegulator<2, 1> controller{
      elevatorSystem,
      // q's elements
      {0.02, 0.4},
      // r's elements
      {12.0},
      // our dt
      0.020_s};

LQR: örnek uygulama

Let’s apply a Linear-Quadratic Regulator to a real-world example. Say we have a flywheel velocity system determined through system identification to have \(K_v = 1 \frac{\text{volts}}{\text{radian per second}}\) and \(K_a = 1.5 \frac{\text{volts}}{\text{radian per second squared}}\). Using the flywheel example above, we have the following linear system:

\[\mathbf{\dot{x}} = \begin{bmatrix}\frac{-K_v}{K_a}\end{bmatrix} v + \begin{bmatrix}\frac{1}{K_a}\end{bmatrix} V\]

\([12\ \text{volts}]\) nın \(q = [0.1\ \text{rad/sec}]\), ve \(\mathbf{r}\) si ile İstenilen bir durum sapmasını (maksimum hata) keyfi olarak seçeriz. 20 ms’lik bir zaman adımı ile ayrıklaştırmadan sonra, \(\mathbf{K} = ~81\) nın bir gain kazancını buluruz. Bu K gain volanın hızı üzerindeki bir PID döngüsünün orantılı bileşeni olarak işlev görür.

Let’s adjust \(\mathbf{q}\) and \(\mathbf{r}\). We know that increasing the q elements or decreasing the \(\mathbf{r}\) elements we use to create \(\mathbf{Q}\) and \(\mathbf{R}\) would make our controller more heavily penalize control effort, analogous to trying to driving a car more conservatively to improve fuel economy. In fact, if we increase our error tolerance q from 0.1 to 1.0, our gain matrix \(\mathbf{K}\) drops from ~81 to ~11. Similarly, decreasing our maximum voltage \(r\) from 12.0 to 1.2 decreases \(\mathbf{K}\).

Aşağıdaki grafik, volanın açısal hızını ve zaman içinde uygulanan voltajı iki farklı gainile gösterir. Daha yüksek bir gain ın sistemin referansa daha hızlı (t = 0,8 saniyede) ulaşmasını sağlarken, motorumuzu daha uzun süre 12V’de doygun tutacağını görebiliriz. Bu, bir PID kontrol cihazının P kazancını ~8x faktörü ile artırmakla tamamen aynıdır.

Flywheel velocity and voltage over time.

LQR ve Ölçüm Gecikme Telafisi

Çoğu zaman, sensörlerimizin ölçümleriyle ilişkili bir gecikmeye sahiptir. Örneğin CAN üzerinden SPARK MAX motor kontrolörü, hız ölçümleriyle ilişkili 30 ms’ye kadar gecikmeye sahip olabilir.

Bu gecikme, geri bildirim denetleyicimizin geçmişteki durum tahminlerine göre voltaj komutları oluşturacağı anlamına gelir. Bu, genellikle aşağıdaki grafikte gösterildiği gibi sistemimize kararsızlık ve salınımlar getirme etkisine sahiptir.

However, we can model our controller to control where the system’s state is delayed into the future. This will reduce the LQR’s gain matrix \(\mathbf{K}\), trading off controller performance for stability. The below formula, which adjusts the gain matrix to account for delay, is also used in system identification.

\[\mathbf{K_{compensated}} = \mathbf{K} \cdot \left(\mathbf{A} - \mathbf{BK}\right)^{\text{delay} / dt}\]

\(\mathbf{A} - \mathbf{BK}\) ile \(\mathbf{K}\) çarpmak temelde kazançları bir zaman adımı ilerletir. Bu durumda, kazançları ölçüm gecikmesiyle ilerletmek için \(\left(\mathbf{A} - \mathbf{BK}\right)^{\text{delay} / dt}\) ile çarpıyoruz.

Flywheel velocity and voltage with dt=5.0ms and a 10.0ms delay.

Not

Bu, \(\mathbf{K}\) ‘yi sıfıra düşürerek geribildirim kontrolünü etkin bir şekilde devre dışı bırakma etkisine sahip olabilir.

Not

SPARK MAX motor kontrolörü, 19,5 ms gecikmeli 40-kademe FIR filtresi kullanır ve durum çerçeveleri varsayılan olarak her 20 ms’de bir gönderilir.

Aşağıdaki kod, sensör giriş gecikmeleri için LQR kontrol cihazının K kazancının nasıl ayarlanacağını gösterir:

// Adjust our LQR's controller for 25 ms of sensor input delay. We
// provide the linear system, discretization timestep, and the sensor
// input delay as arguments.
controller.latencyCompensate(elevatorSystem, 0.02, 0.025);
// Adjust our LQR's controller for 25 ms of sensor input delay. We
// provide the linear system, discretization timestep, and the sensor
// input delay as arguments.
controller.LatencyCompensate(elevatorSystem, 20_ms, 25_ms);

Doğrusallaştırma

Doğrusallaştırma, doğrusal olmayan fonksiyonları ve durum uzay sistemlerini doğrusal olanları kullanarak kestirmek için kullanılan bir araçtır. İki boyutlu uzayda doğrusal fonksiyonlar düz çizgilerdir, doğrusal olmayan fonksiyonlar ise eğri olur. Doğrusal olmayan bir fonksiyonun yaygın bir örneği ve buna karşılık gelen doğrusal yaklaşımı şöyledir \(y=\sin{x}\). Bu fonksiyon şu şekilde yaklaştırılabilir \(y = x\) sıfıra yakın. Bu yaklaşım, \(x=0\) a yakın iken doğrudur, ancak doğrusallaştırma noktasından uzaklaştıkça doğruluğu kaybeder. Örneğin, \(\sin{x} \approx x\) yaklaşımı \(y = 0\) 0,5 radyan içinde 0,02 aralığında doğrudur, ancak bundan sonra doğruluğu hızla kaybeder. Aşağıdaki resimde şunu görüyoruz \(y =\sin{x}\), \(y=x\) ve yaklaşık ile gerçek değeri arasındaki fark \(\sin{x}\) at \(x\).

Three plots showing sin(x), x, and sin(x) - x.

Doğrusal olmayan dynamics” ile durum uzay sistemlerini de doğrusallaştırabiliriz. Bunu durum uzayında bir nokta :math:mathbf{x}` seçerek ve bunu doğrusal olmayan fonksiyonlarımızın girdisi olarak kullanarak yapıyoruz. Yukarıdaki örnekte olduğu gibi, bu, sistemin doğrusallaştırıldığı noktaya yakın durumlar için iyi çalışır, ancak bu durumdan hızla uzaklaşabilir.