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$
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)
Czerwona gwiazdka pokazuje rozwiązanie. Spełnia ono tylko jedno z równań (ostatnie)