MATLAB - Algebra

Finora, abbiamo visto che tutti gli esempi funzionano in MATLAB così come il suo GNU, chiamato in alternativa Octave. Ma per risolvere le equazioni algebriche di base, sia MATLAB che Octave sono leggermente diversi, quindi proveremo a trattare MATLAB e Octave in sezioni separate.

Discuteremo anche la fattorizzazione e la semplificazione delle espressioni algebriche.

Risoluzione di equazioni algebriche di base in MATLAB

Il solveè usata per risolvere equazioni algebriche. Nella sua forma più semplice, la funzione di risoluzione accetta l'equazione racchiusa tra virgolette come argomento.

Ad esempio, risolviamo x nell'equazione x-5 = 0

solve('x-5=0')

MATLAB eseguirà l'istruzione sopra e restituirà il seguente risultato:

ans =
   5

Puoi anche chiamare la funzione di risoluzione come -

y = solve('x-5 = 0')

MATLAB eseguirà l'istruzione sopra e restituirà il seguente risultato:

y =
   5

Potresti anche non includere il lato destro dell'equazione -

solve('x-5')

MATLAB eseguirà l'istruzione sopra e restituirà il seguente risultato:

ans =
   5

Se l'equazione coinvolge più simboli, MATLAB per impostazione predefinita presuppone che tu stia risolvendo per x, tuttavia, la funzione di risoluzione ha un'altra forma:

solve(equation, variable)

dove puoi anche menzionare la variabile.

Ad esempio, risolviamo l'equazione v - u - 3t 2 = 0, per v. In questo caso, dovremmo scrivere -

solve('v-u-3*t^2=0', 'v')

MATLAB eseguirà l'istruzione sopra e restituirà il seguente risultato:

ans =
   3*t^2 + u

Risoluzione di equazioni algebriche di base in ottava

Il roots è usata per risolvere equazioni algebriche in Octave e puoi scrivere sopra gli esempi come segue:

Ad esempio, risolviamo x nell'equazione x-5 = 0

roots([1, -5])

Octave eseguirà l'istruzione precedente e restituirà il seguente risultato:

ans = 5

Puoi anche chiamare la funzione di risoluzione come -

y = roots([1, -5])

Octave eseguirà l'istruzione precedente e restituirà il seguente risultato:

y = 5

Risoluzione di equazioni quadratiche in MATLAB

Il solvepuò anche risolvere equazioni di ordine superiore. Viene spesso utilizzato per risolvere equazioni quadratiche. La funzione restituisce le radici dell'equazione in un array.

L'esempio seguente risolve l'equazione quadratica x 2 -7x +12 = 0. Crea un file di script e digita il codice seguente:

eq = 'x^2 -7*x + 12 = 0';
s = solve(eq);
disp('The first root is: '), disp(s(1));
disp('The second root is: '), disp(s(2));

Quando si esegue il file, viene visualizzato il seguente risultato:

The first root is: 
   3
The second root is: 
   4

Risoluzione di equazioni quadratiche in ottava

L'esempio seguente risolve l'equazione quadratica x 2 -7x +12 = 0 in Ottava. Crea un file di script e digita il codice seguente:

s = roots([1, -7, 12]);

disp('The first root is: '), disp(s(1));
disp('The second root is: '), disp(s(2));

Quando si esegue il file, viene visualizzato il seguente risultato:

The first root is: 
   4
The second root is: 
   3

Risoluzione di equazioni di ordine superiore in MATLAB

Il solvepuò anche risolvere equazioni di ordine superiore. Ad esempio, risolviamo un'equazione cubica come (x-3) 2 (x-7) = 0

solve('(x-3)^2*(x-7)=0')

MATLAB eseguirà l'istruzione sopra e restituirà il seguente risultato:

ans =
   3
   3
   7

In caso di equazioni di ordine superiore, le radici sono lunghe e contengono molti termini. Puoi ottenere il valore numerico di tali radici convertendole in doppie. L'esempio seguente risolve l'equazione del quarto ordine x 4 - 7x 3 + 3x 2 - 5x + 9 = 0.

Crea un file di script e digita il codice seguente:

eq = 'x^4 - 7*x^3 + 3*x^2 - 5*x + 9 = 0';
s = solve(eq);
disp('The first root is: '), disp(s(1));
disp('The second root is: '), disp(s(2));
disp('The third root is: '), disp(s(3));
disp('The fourth root is: '), disp(s(4));

% converting the roots to double type
disp('Numeric value of first root'), disp(double(s(1)));
disp('Numeric value of second root'), disp(double(s(2)));
disp('Numeric value of third root'), disp(double(s(3)));
disp('Numeric value of fourth root'), disp(double(s(4)));

Quando esegui il file, restituisce il seguente risultato:

The first root is: 
6.630396332390718431485053218985
 The second root is: 
1.0597804633025896291682772499885
 The third root is: 
- 0.34508839784665403032666523448675 - 1.0778362954630176596831109269793*i
 The fourth root is: 
- 0.34508839784665403032666523448675 + 1.0778362954630176596831109269793*i
Numeric value of first root
   6.6304
Numeric value of second root
   1.0598
Numeric value of third root
   -0.3451 - 1.0778i
Numeric value of fourth root
   -0.3451 + 1.0778i

Si noti che le ultime due radici sono numeri complessi.

Risoluzione di equazioni di ordine superiore in ottava

L'esempio seguente risolve l'equazione del quarto ordine x 4 - 7x 3 + 3x 2 - 5x + 9 = 0.

Crea un file di script e digita il codice seguente:

v = [1, -7,  3, -5, 9];
s = roots(v);

% converting the roots to double type
disp('Numeric value of first root'), disp(double(s(1)));
disp('Numeric value of second root'), disp(double(s(2)));
disp('Numeric value of third root'), disp(double(s(3)));
disp('Numeric value of fourth root'), disp(double(s(4)));

Quando esegui il file, restituisce il seguente risultato:

Numeric value of first root
 6.6304
Numeric value of second root
-0.34509 + 1.07784i
Numeric value of third root
-0.34509 - 1.07784i
Numeric value of fourth root
 1.0598

Risoluzione di sistemi di equazioni in MATLAB

Il solvepuò essere utilizzata anche per generare soluzioni di sistemi di equazioni che coinvolgono più di una variabile. Facciamo un semplice esempio per dimostrare questo uso.

Risolviamo le equazioni -

5x + 9y = 5

3x - 6y = 4

Crea un file di script e digita il codice seguente:

s = solve('5*x + 9*y = 5','3*x - 6*y = 4');
s.x
s.y

Quando si esegue il file, viene visualizzato il seguente risultato:

ans =
   22/19
ans =
   -5/57

Allo stesso modo, puoi risolvere sistemi lineari più grandi. Considera il seguente insieme di equazioni:

x + 3y -2z = 5

3x + 5y + 6z = 7

2x + 4y + 3z = 8

Risolvere il sistema di equazioni in ottava

Abbiamo un approccio leggermente diverso per risolvere un sistema di "n" equazioni lineari in "n" incognite. Facciamo un semplice esempio per dimostrare questo uso.

Risolviamo le equazioni -

5x + 9y = 5

3x - 6y = 4

Un tale sistema di equazioni lineari può essere scritto come l'equazione a matrice singola Ax = b, dove A è la matrice dei coefficienti, b è il vettore colonna contenente il lato destro delle equazioni lineari ex è il vettore colonna che rappresenta la soluzione mostrato nel programma seguente -

Crea un file di script e digita il codice seguente:

A = [5, 9; 3, -6];
b = [5;4];
A \ b

Quando si esegue il file, viene visualizzato il seguente risultato:

ans =

   1.157895
  -0.087719

Allo stesso modo, puoi risolvere sistemi lineari più grandi come indicato di seguito:

x + 3y -2z = 5

3x + 5y + 6z = 7

2x + 4y + 3z = 8

Espansione e raccolta di equazioni in MATLAB

Il expand e il collectfunzione espande e raccoglie rispettivamente un'equazione. Il seguente esempio dimostra i concetti:

Quando lavori con molte funzioni simboliche, dovresti dichiarare che le tue variabili sono simboliche.

Crea un file di script e digita il codice seguente:

syms x   %symbolic variable x
syms y   %symbolic variable x
% expanding equations
expand((x-5)*(x+9))
expand((x+2)*(x-3)*(x-5)*(x+7))
expand(sin(2*x))
expand(cos(x+y))
 
% collecting equations
collect(x^3 *(x-7))
collect(x^4*(x-3)*(x-5))

Quando si esegue il file, viene visualizzato il seguente risultato:

ans =
   x^2 + 4*x - 45
ans =
   x^4 + x^3 - 43*x^2 + 23*x + 210
ans =
   2*cos(x)*sin(x)
ans =
   cos(x)*cos(y) - sin(x)*sin(y)
ans =
   x^4 - 7*x^3
ans =
   x^6 - 8*x^5 + 15*x^4

Espansione e raccolta di equazioni in ottava

Hai bisogno di avere symbolic pacchetto, che fornisce expand e il collectfunzione per espandere e raccogliere un'equazione, rispettivamente. Il seguente esempio dimostra i concetti:

Quando lavori con molte funzioni simboliche, dovresti dichiarare che le tue variabili sono simboliche ma Octave ha un approccio diverso per definire le variabili simboliche. Notare l'uso diSin e Cos, che sono anche definiti nel pacchetto simbolico.

Crea un file di script e digita il codice seguente:

% first of all load the package, make sure its installed.
pkg load symbolic

% make symbols module available
symbols

% define symbolic variables
x = sym ('x');
y = sym ('y');
z = sym ('z');

% expanding equations
expand((x-5)*(x+9))
expand((x+2)*(x-3)*(x-5)*(x+7))
expand(Sin(2*x))
expand(Cos(x+y))
 
% collecting equations
collect(x^3 *(x-7), z)
collect(x^4*(x-3)*(x-5), z)

Quando si esegue il file, viene visualizzato il seguente risultato:

ans =

-45.0+x^2+(4.0)*x
ans =

210.0+x^4-(43.0)*x^2+x^3+(23.0)*x
ans =

sin((2.0)*x)
ans =

cos(y+x)
ans =

x^(3.0)*(-7.0+x)
ans =

(-3.0+x)*x^(4.0)*(-5.0+x)

Fattorizzazione e semplificazione delle espressioni algebriche

Il factor funzione fattorizza un'espressione e il simplifyfunzione semplifica un'espressione. Il seguente esempio dimostra il concetto:

Esempio

Crea un file di script e digita il codice seguente:

syms x
syms y
factor(x^3 - y^3)
factor([x^2-y^2,x^3+y^3])
simplify((x^4-16)/(x^2-4))

Quando si esegue il file, viene visualizzato il seguente risultato:

ans =
   (x - y)*(x^2 + x*y + y^2)
ans =
   [ (x - y)*(x + y), (x + y)*(x^2 - x*y + y^2)]
ans =
   x^2 + 4