2.1 Rozwiązywanie równań macierzowych… Parę uwag

Wydaje mi się, że nikt z zainteresowanych nie był zainteresowany dokładnym przyjrzeniem się zadaniom. Popatrzmy na…

Zadanie 3

Rozwiąż zadanie stosując rachunek macierzowy:

Przy pomocy suwmiarki zmierzono wielokrotnie rozmiary wałka, otrzymując następujące wartopści wyrażone w milimetrach:

$l_b=10.1, l_c=29.8, l_d=10.0,$ $l_{a+b}=20.1, l_{b+c+d}=50.1, l_{a+b+c+d}=59.8$

Wymiarowany obiekt
Wymiarowany obiekt


Nie zostało to nigdzie zapisane, ale treść zadania sugeruje to wyraźnie, że pomiary suwmiarką były niezbyt dokładne. To po pierwsze.

Po drugie wyznaczyć musimy cztery wymiary, a równań jest sześć.

Po trzecie, mamy

$$l_b=10{,}1$$

i

$$l_{a+b}=20{,}1$$

z czego może wynikać, że $l_a=10$ co niekoniecznie jest zgodne z pozostałymi równaniami…

Z problemem znakomicie sobie radzi metoda lewostronnego dzielenia, która znajduje rozwiązanie najlepsze w sensie średniokwadratowym zgodne z równaniami.

Problem właściwie nie dotyczy MATLABa tylko raczej czego innego.

Ostatecznie jest coś takiego

$$ \left[\begin{array}{cccc} 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1\\ 1 & 1 & 0 & 0\\ 0 & 1 & 1 & 1\\ 1 & 1 & 1 & 1\\ \end{array} \right] \left[ \begin{array}{c} a\\ b\\ c\\ d \end{array} \right] = \left[ \begin{array}{c} 10.1\\ 29.8\\ 10\\ 20.1\\ 50.1\\ 59.8 \end{array} \right] $$ Czyli

A=[0,1,0,0;0,0,1,0;0,0,0,1;1,1,0,0;0,1,1,1;1,1,1,1]
beta=[10.1;29.8;10;20.1;50.1;59.8]

a równanie jest postaci $$ A\cdot\xi=\beta $$ czyli

xi = A \ beta
A=[0,1,0,0;0,0,1,0;0,0,0,1;1,1,0,0;0,1,1,1;1,1,1,1]
A = 6x4
     0     1     0     0
     0     0     1     0
     0     0     0     1
     1     1     0     0
     0     1     1     1
     1     1     1     1
beta=[10.1;29.8;10;20.1;50.1;59.8]
beta = 6x1
   10.1000
   29.8000
   10.0000
   20.1000
   50.1000
   59.8000
xi = A \ beta
xi = 4x1
    9.8500
   10.1833
   29.8167
   10.0167

Teraz sprawdzimy

A*xi-beta
ans = 6x1
    0.0833
    0.0167
    0.0167
   -0.0667
   -0.0833
    0.0667

Jak widać różnica nie jest (jak można by spodziewać się) równa zero.

Nie ma natomiast szans na dokładne rozwiązanie tych równań (projekt 4) (co zakłada metoda symboliczna).

Najprostsze podejście może być takie:

syms a b c d;
solve( ...
    b == 10.1, ...
    c == 29.8, ...
    d == 10.0, ...
    a+b == 20.1, ...
    a+b+c+d == 59.8)
ans = struct with fields:
    a: [0x1 sym]
    b: [0x1 sym]
    c: [0x1 sym]
    d: [0x1 sym]

MATLAB problemu nie komentuje, natomiast w wyniku dostajemy „puste” rozwiązania (a to tablica symboliczna o rozmiarach 0x1 — zero wierszy i jedna kolumna…); podobnie pozostałe zmienne.

Zadane 2.3

Podobnie jest z układem trzech równań o dwu niewiadomych

$$\begin{gather}2x-2y=&4\\-x+y=&3\\3x+4y=&2\end{gather}$$
A = [2 -2; -1 1; 3 4]
A = 3x2
     2    -2
    -1     1
     3     4
b = [4;3;2]
b = 3x1
     4
     3
     2

Rozwiązanie równania $A\times x=b$ jest proste

x = A\b
x = 2x1
    0.8571
   -0.1429

Ale znowu

A*x-b
ans = 3x1
   -2.0000
   -4.0000
         0

nie jest równe zeru!

Na wykresie wygląda to tak

hold on
fimplicit(@(x,y) 2*x-2*y-4)
fimplicit(@(x,y) -x+y-3)
fimplicit(@(x,y) 3*x+4*y-2)
plot(x(1,1),x(2,1),"r*")
grid("on")
xticks(-5:1:5)

Przecinające się proste z rozważanego układu równań
Przecinające się proste z rozważanego układu równań

Czerwona gwiazdka pokazuje rozwiązanie. Spełnia ono tylko jedno z równań (ostatnie)

Poprzedni
Następny