Написать программу для решения системы линейных уравнений.(Программу надобно написать на языке

Программу на C++, решающую системы линейных уравнений методом Крамера, удобно реализовать с функциями для вычисления определителя системы и определителя при неизвестных.

Рассмотрим вариант программы, решающей методом Крамера системы из трёх линейных уравнений с тремя неизвестными. В ней требуется объявить четыре функции: одна (determinant) вычисляет определитель системы, а три (determinantX1, determinant X2, determinantX3) вычисляют определители при неизвестных.

Как и положено при объявлении функций, укажем в них формальные параметры — массивы, хранящие значения определителя системы и определителей при неизвестных. Те же формальные параметры указываются и при описании функций (в конце программы, после функции main). Тело каждой функции содержит и запись математических операций вычисления определителей.

А в вызове функций указываются уже фактические параметры — массивы, храняющие перечисленные данные, но уже состоящие из значений, введённых пользователем.

Далее всё предельно просто: в функции main вычисляются и выводятся значения неизвестных как результаты деления определителей при неизвестных на определитель системы, как и должно быть при решении систем линейных уравнений методом Крамера.

Код C++

#includeusing namespace std; int determinant(int matrix[3][3]); int determinantX1(int coefMatrix[3][3], int constTermsMatrix[3]); int determinantX2(int coefMatrix[3][3], int constTermsMatrix[3]); int determinantX3(int coefMatrix[3][3], int constTermsMatrix[3]); int main() { int i, j; int coefficientsMatrix3x3[3][3]; int constantTermsMatrix3x1[3]; cout << <span>»Vvedite koefficienty i sbobodnye chleny «<< endl; <span>for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { cout << <span>»a[ «<< i << <span>»,»<< j << <span>»]= «; cin >> coefficientsMatrix3x3[i][j]; } cout << «b,[ » << i << «]= «; cin >> constantTermsMatrix3x1[i]; } int det = determinant(coefficientsMatrix3x3); int detX1 = determinantX1(coefficientsMatrix3x3, constantTermsMatrix3x1); int detX2 = determinantX2(coefficientsMatrix3x3, constantTermsMatrix3x1); int detX3 = determinantX3(coefficientsMatrix3x3, constantTermsMatrix3x1); if (det != 0) { cout << <span>»X1 = «<< (<span>float)detX1/(float)det << endl; cout << <span>»X2 = «<< (<span>float)detX2/(float)det << endl; cout << <span>»X3 = «<< (<span>float)detX3/(float)det << endl; } <span>else cout << <span>»Sistema ne imejet reshenij «<< endl << endl; <span>return 0; } int determinant(int matrix[3][3]) { int a11 = matrix[0][0]; int a12 = matrix[0][1]; int a13 = matrix[0][2]; int a21 = matrix[1][0]; int a22 = matrix[1][1]; int a23 = matrix[1][2]; int a31 = matrix[2][0]; int a32 = matrix[2][1]; int a33 = matrix[2][2]; return (a11 * a22 * a33) + (a12 * a23 * a31) + (a13 * a21 * a32) — (a13 * a22 * a31) — (a11 * a23 * a32) — (a12 * a21 * a33); } int determinantX1(int coefMatrix[3][3], int constTermsMatrix[3]) { int a12 = coefMatrix[0][1]; int a13 = coefMatrix[0][2]; int a22 = coefMatrix[1][1]; int a23 = coefMatrix[1][2]; int a32 = coefMatrix[2][1]; int a33 = coefMatrix[2][2]; int c1 = constTermsMatrix[0]; int c2 = constTermsMatrix[1]; int c3 = constTermsMatrix[2]; return (c1 * a22 * a33) + (a12 * a23 * c3) + (a13 * c2 * a32) — (a13 * a22 * c3) — (c1 * a23 * a32) — (a12 * c2 * a33); } int determinantX2(int coefMatrix[3][3], int constTermsMatrix[3]) { int a11 = coefMatrix[0][0]; int a13 = coefMatrix[0][2]; int a21 = coefMatrix[1][0]; int a23 = coefMatrix[1][2]; int a31 = coefMatrix[2][0]; int a33 = coefMatrix[2][2]; int c1 = constTermsMatrix[0]; int c2 = constTermsMatrix[1]; int c3 = constTermsMatrix[2]; return (a11 * c2 * a33) + (c1 * a23 * a31) + (a13 * a21 * c3) — (a13 * c2 * a31) — (a11 * a23 * c3) — (c1 * a21 * a33); } int determinantX3(int coefMatrix[3][3], int constTermsMatrix[3]) { int a11 = coefMatrix[0][0]; int a12 = coefMatrix[0][1]; int a21 = coefMatrix[1][0]; int a22 = coefMatrix[1][1]; int a31 = coefMatrix[2][0]; int a32 = coefMatrix[2][1]; int c1 = constTermsMatrix[0]; int c2 = constTermsMatrix[1]; int c3 = constTermsMatrix[2]; return (a11 * a22 * c3) + (a12 * c2 * a31) + (c1 * a21 * a32) — (c1 * a22 * a31) — (a11 * c2 * a32) — (a12 * a21 * c3); }

По тому же алгоритму несложно уже написать программу, вычисляющую мотодом Крамера системы их двух линейных уравнений с двумя неизвестными, а также вариант программы с ветвлением на случаи систем 2х2 и 3х3.

Весь блок Программирование C++

Пример 1. Система 2 уравнений¶

Рассмотрим простую систему из 2 линейных уравнений с 2 неизвестными:

begin{matrix} 2x+5y=1 &(1) \ x-10y=3 &(2) end{matrix}

Аналитическое решение¶

Система легко решается аналитически. Для этого достаточно выразить из уравнения (2) переменную x:

begin{matrix} x=3 + 10y &(3) end{matrix}

После чего подставить её в уравнение (1): begin{matrix} 2cdot(3 + 10y)+5y=1, end{matrix} и решить получившееся линейное уравнение относительно переменной y: begin{matrix} 25y+6=1 end{matrix}

begin{matrix} 25y=-5 \ end{matrix}begin{matrix} y=-0.2 end{matrix}

Полученное значение y можно подставить в выражение для x в уравнение (3): begin{matrix} x=3 + 10cdot (-0.2) end{matrix} и получить значение переменной x: begin{matrix} x=1 end{matrix} Таким образом решением системы будет: (1; -0,2)

(1-е значение в ответе — x, 2-е — y)

Решение матричным методом (python numpy)¶

Запишем исходную систему уравнений в виде матрицы (левая часть) и вектора (правая часть): begin{matrix} 2x+5y=1 \ x-10y=3 end{matrix}

Для этого выпишем по порядку все коэффициенты перед неизвестными в матрицу.

Коэффициент перед переменной х 1й строки на место в матрице с координатами 0,0. (2)

Коэффициент перед переменной y 1й строки на место в матрице с координатами 0,1. (5)

Коэффициент перед переменной х 2й строки на место в матрице с координатами 1,0. (1)

Коэффициент перед переменной y 2й строки на место в матрице с координатами 1,1. (-10)

begin{pmatrix} 2& 5 \ 1 & -10 end{pmatrix}

Значение свободного члена (число, не умноженное ни на одну переменную системы) после знака равенства 1й строки на место 0 в векторе.

Значение свободного члена 2й строки на место 1 в векторе.

begin{pmatrix} 1 \ 3 end{pmatrix}

Для этого воспользуемся numpy массивами:

In [1]:

importnumpy# импортируем библиотеку M1=numpy.array([[2.,5.],[1.,-10.]])# Матрица (левая часть системы)v1=numpy.array([1.,3.])# Вектор (правая часть системы)#Запишем все числа с точкой, т.к. иначе в Python 2 они будут участвовать в целочисленных операциях (остатки от деления будут отбрасываться)

Для решения системы воспользуемся функцией numpy.linalg.solve модуля numpy (документация — http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.solve.html). Функция принимает на вход 2 параметра:

1й — матрица коэффициентов перед переменными

2й — вектор свободных членов

In [2]:

numpy.linalg.solve(M1,v1)

Out[2]:

array([ 1. , -0.2])

Обратим внимание, что ответом так же является numpy массив!

при этом порядок следования ответов в массиве соответствует порядку столбцов исходной матрицы. Т.е. на 0 месте находится x=1, т.к. мы в матрице внесли в 0 столбец коэффициенты перед переменной х!

Ответ: (1; -0,2)

Пример 2. Система 4 уравнений¶

Рассмотрим простую систему из 2 линейных уравнений с 2 неизвестными: begin{matrix} A + C = 2 &(4) \ -A + B — 2C + D = -2 &(5) \ 4A + C — 2D = 0 &(6) \ -4A + 4B + D = 5 &(7) end{matrix}

Для наглядности решения данной системы матричным методом запишем её в таком виде, чтобы каждое уравнение содержало все 4 переменных, и чтобы они занимали в каждой строке одно и то же порядковое место (А — 0, B — 1, C — 2, D — 3):

begin{matrix} A + 0B + C + 0D = 2 &(8) \ -A + B — 2C + D = -2 &(9) \ 4A + 0B + C — 2D = 0 &(10) \ -4A + 4B + 0C + D = 5 &(11) end{matrix}

теперь аналогично примеру 1 выпишем матрицу (коэффициенты перед переменными из левой части системы построчно в порядке следования переменных) и вектор (свободные члены из правой части системы):

begin{pmatrix} 1 & 0 & 1 & 0 \ -1 & 1 & -2 & 1 \ 4 & 0 & 1 & -2 \ -4 & 4 & 0 & 1 end{pmatrix}begin{pmatrix} 2 \ -2 \ 0 \ 5 end{pmatrix} In [3]:

importnumpy# импортируем библиотеку M2=numpy.array([[1.,0.,1.,0.],[-1.,1.,-2.,1.],[4.,0.,1.,-2.],[-4.,4.,0.,1.]])# Матрица (левая часть системы)v2=numpy.array([2.,-2.,0.,5.])# Вектор (правая часть системы)numpy.linalg.solve(M2,v2)

Out[3]:

array([ 0.,  1.,  2.,  1.])

Ответ: (0; 1; 2; 1)

A = 0, B = 1, C =2, D = 1

Пример 3. Система 3 уравнений (с приведением к линейному виду)¶

Матричный метод применим только для решения линейных уравнений. Однако иногда можно встретить нелинейные уравнения, легко приводимые к линейной форме, например:

begin{matrix} 2x_{1}+x_{2}^2+x_{3} = 2 &(12) \ x_{1}-x_{2}^2 = -2 &(13) \ 3x_{1}-x_{2}^2+2x_{3} = 2 &(14) end{matrix}

Можно заметить, что переменная x2 входит во все 3 уравнения только в квадратичной форме. Это означает, что мы можем осуществить замену:

begin{matrix} x_{2}^2 = a &(15) end{matrix}

С учётом этой подстановки запишем систему, аналогично примеру 2 с вхождением всех 3 переменных:

begin{matrix} 2x_{1}+a+x_{3} = 2 &(16) \ x_{1}-a+0x_{3} = -2 &(17) \ 3x_{1}-a+2x_{3} = 2 &(18) end{matrix}

Для новой системы мы уже умеем записывать матрицу (коэффициенты перед переменными из левой части системы) и вектор (свободные члены из правой части):

begin{pmatrix} 2 & 1 & 1 \ 1 & -1 & 0 \ 3 & -1 & 2 end{pmatrix}begin{pmatrix} 2 \ -2 \ 2 end{pmatrix} In [4]:

importnumpy# импортируем библиотеку M3=numpy.array([[2.,1.,1.],[1.,-1.,0.],[3.,-1.,2.]])# Матрица (левая часть системы)v3=numpy.array([2.,-2.,2.])# Вектор (правая часть системы)numpy.linalg.solve(M3,v3)

Out[4]:

array([-1.,  1.,  3.])

Мы получили промежуточный результат:

$x_{1}= -1, a= 1, x_{3}= 3,$

или

$x_{1}= -1, x_{2}^2= 1, x_{3}= 3,$

$x_{2}^2=1$ соответствует 2 значениям $x_{2}$: 1 и -1.

Таким образом мы получаем 2 решения нашей системы: $x_{1}= -1, x_{2}= 1, x_{3}= 3,$ и $x_{1}= -1, x_{2}= -1, x_{3}= 3,$

Ответ: (-1; 1; 3) и (-1; -1; 3)

Пример 4. Решение простой задачи с помощью системы линейных уравнений.¶

Навстречу друг другу из одного города в другой, расстояние между которыми составляет 30 км, едут два велосипедиста. Предположим, что если велосипедист 1 выедет на 2 ч раньше своего товарища, то они встретятся через 2,5 часа после отъезда велосипедиста 2; если же велосипедист 2 выедет 2мя часами ранее велосипедиста 1, то встреча произойдет через 3 часа после отъезда первого. С какой скоростью движется каждый велосипедист?

Обозначим за неизвестные x и y скорости велосипедистов.

Путь = скорость * время

Расстояние между велосипедистами = путь 1 велосипедиста + путь 2 велосипедиста

На основании этих простых рассуждений и данных задачи можно записать уравнения:

begin{matrix} (2.5 + 2)x+2.5y=30 &(19) \ 3x + (3+2)y=30 &(20) end{matrix}

или

begin{matrix} 4.5x+2.5y=30 &(21) \ 3x + 5y=30 &(22) end{matrix}

Аналогично примеру 1 легко составим матрицу коэффициентов перед неизвестными (левая часть системы) и вектор со свободными членами (права часть системы):

begin{pmatrix} 4.5& 2.5 \ 3 & 5 end{pmatrix}begin{pmatrix} 30 \ 30 end{pmatrix} In [5]:

importnumpy# импортируем библиотеку M4=numpy.array([[4.5,2.5],[3.,5.]])# Матрица (левая часть системы)v4=numpy.array([30.,30.])# Вектор (правая часть системы)numpy.linalg.solve(M4,v4)

Out[5]:

array([ 5.,  3.])

Ответ: 5км/ч и 3км/ч

Пример 5. Нахождение уравнения плоскости по точкам, через которые она проходит.¶

Уравнение плоскости в 3-х мерном пространстве задаётся уравнением: begin{matrix} z = ax + by + c & (23) end{matrix} Уравнение плоскости однозначно задаётся 3 точками через которые она проходит.

Таким образом легко понять, что если мы знаем координаты точек, через которые проходит плоскость, то в уравнении (23) у вас 3 переменных: a, b, c. А значения x, y, z нам известны для 3 точек.

Если плоскость проходит через точки (1;-6;1), (0;-3;2) и (-3;0;-1), то мы легко можем найти коэффициенты, подставив значения соответствующих координат для всех 3 точек в уравнение (23) и получив систему из 3 уравнений.

Для точки x = 1, y = -6, z = 1: begin{matrix} acdot 1 + bcdot (-6) + c = 1 &(24) end{matrix}

Для точки x = 0, y = -3, z = 2: begin{matrix} acdot 0 + bcdot (-3) + c = 2 &(25) end{matrix}

Для точки x = -3, y = 0, z = -1: begin{matrix} acdot (-3) + bcdot 0 + c = -1 &(26) end{matrix}

На основании системы уравнений (24), (25), (26) можно записать матрицу коэффициентов перед неизвестными (левая часть матрицы):

begin{pmatrix} 1& -6 & 1 \ 0 & -3 & 1 \ -3 & 0 & 1 end{pmatrix}

И вектор свободных членов (правая часть): begin{pmatrix} 1 2 -1 end{pmatrix}

In [6]:

importnumpy# импортируем библиотеку M5=numpy.array([[1.,-6.,1.],[0.,-3.,1],[-3,,1]])# Матрица (левая часть системы)v5=numpy.array([1.,2.,-1.])# Вектор (правая часть системы)numpy.linalg.solve(M5,v5)

Out[6]:

array([ 2.,  1.,  5.])

Ответ: уравнение искомой плоскости в пространстве задаётся уравнением $z = 2x + y + 5$

Пример 6. Нахождение уравнения параболы по 2 точкам и касательной¶

Найти уравнение параболы ($f(x) = ax^2 + bx + x & (27)$), проходящей через точки (1,1) и (-1,1) и касающейся биссектрисы 1й координатной четверти.

Как и в предыдущем примере неизвестными для нас являются коэффициенты a, b, c.

Подставив в уравнение параболы (27) значения аргумента (x) и функции (f(x)) получим 2 уравнения:

begin{matrix} acdot 1^2 + bcdot 1 + c = 1 &(28) \ acdot (-1)^2 + bcdot (-1) + c = 1 &(29) end{matrix}

Однако для нахождения 3 неизвестных 2 уравнений мало. Необходимо найти ещё одно из оставшихся условий.

Касание биссектрисы 1й координатной четверти означает, что наша парабола имеет касательную $y = x$. Если посмотреть на условие задачи, то мы увидим, что одна из точек (1, 1) лежит на этой прямой. Это означает, что мы знаем точку касания.

Уравнение прямой, делящей 1-ю координатную четверть пополам (биссектрисы) имеет вид $y = kx quad (30)$

При этом мы знаем, что угол уравнения касательной (коэффициент k уравнения (30)) равен производной от функции (27) в точке касания.

begin{matrix} f'(x) = 2ax + bx & (31) end{matrix}

Подставив значение аргумента (x = 1) в точке касания и коэффициента (k = 1 в качестве производной f'(x))

begin{matrix} 1 = 2acdot1 + bcdot1 & (32) end{matrix}

Используя уравнения (28), (29) и (32), запишем полную систему уравнений, которую нам необходимо решить:

begin{matrix} acdot 1 + bcdot 1 + c cdot 1 = 1 &(33) \ acdot 1 + bcdot (-1) + c cdot 1 = 1 &(34) \ acdot 2 + bcdot 1 + c cdot 0 = 1 &(35) end{matrix}

По привычной уже схеме запишем коэффициенты перед переменными (левую часть системы) в матрицу, а свободные члены (правую часть) в вектор:

begin{pmatrix} 1& 1 & 1 \ 1 & -1 & 1 \ 2 & 1 & 0 end{pmatrix}begin{pmatrix} 1 \ 1 \ 1 end{pmatrix} In [7]:

importnumpy# импортируем библиотеку M6=numpy.array([[1.,1.,1.],[1.,-1.,1],[2,1,]])# Матрица (левая часть системы)v6=numpy.array([1.,1.,1.])# Вектор (правая часть системы)numpy.linalg.solve(M6,v6)

Out[7]:

array([ 0.5, -0. ,  0.5])

Ответ: уравнение искомой параболы задаётся функцией $f(x) = 0.5x^2 + 0.5$

Примечание к примеру 6¶

На иллюстрации ниже изображены графики параболы и биссектрисы, которой она касается. А так же 2 точки, через которых проходит парабола.

In [8]:

importnumpyimportmatplotlibasmplimportmatplotlib.pyplotasplt%matplotlibinlinempl.rc('font',family='Verdana',size=16)w=numpy.linalg.solve(M6,v6)# запишем найденные коэффициенты в переменнуюdeff(x):returnw[]*x**2+w[1]*x+w[2]# уравнение параболыfig,ax=plt.subplots(figsize=(10,5))x=numpy.linspace(-2,2,200)ax.axis([-2.,2.,0.,2.])ax.grid()ax.plot(x,f(x),label='Парабола')ax.plot(x,x,label='Биссектриса 1йnкоординатной четверти')ax.set_xlabel(u'x',{'fontname':'Arial','size':24})ax.set_ylabel(u'f(x)',{'fontname':'Arial','size':24})plt.plot([-1,1],[1,1],'ro',label='Точки дляnпостроения графика')ax.annotate('Точкаnкасания',xy=(1.,1.),xytext=(1.5,0.5),arrowprops=dict(facecolor='black',shrink=0.05),)ax.legend(bbox_to_anchor=(1.6,1.))plt.show()

Вопросы-ответы » Информатика Заказать домашнюю работуЗадать свой вопрос

  • Полторецкая Ангелина
  • Информатика
  • 2019-09-23 11:59:19
  • 1

1 ответ Сережа Дорошевский2019-09-23 12:03:04

uses crt;

var

x, y, A1, A2, B1, B2, C1, C2:real;

begin

clrscr;

writeln(‘enter A1:’);

writeln(‘enter A2:’);

writeln(‘enter B1:’);

writeln(‘enter B2:’);

writeln(‘enter C1:’);

writeln(‘enter C2:’);

read(A1,A2,B1,B2,C1,C2);

if (A2 * B1 — A1 * B2) = 0 then

writeln(‘Программка не имеет решений’)

else

   begin

   x:= (B1*C2-B2*C1) / (A2*B1-A1*B2);

   y:= (A2 * C1 — A1 * C2) / (A2 * B1 — A1 * B2);

   end;

writeln(‘x=’, x:10:2);

writeln(‘y=’, y:10:2);

end.

Veronika Hisamutdinova2019-09-23 12:05:25 Спасибо! Вы сможете подсказать — как вывести результаты программки? Mjasnjanko Svetlana2019-09-23 12:10:29 https://rextester.com/SVDBNH55154 Егор Чугрин2019-09-23 12:12:19 по этой ссылке пуск программки в онлайн компиляторе Имя:* E-Mail: Похожие вопросы

Решение систем уравнений

Язык

Решение систем линейных уравнений онлайн – это нахождение неизвестных переменных входящих в уравнения, при подстановке которых система обращается в равенство.

Решить систему линейных уравнений можно различными способами, например используя метод Крамера и метод Гаусса, метод Жордана Гаусса и метод Кронекера Капелли, или другими способами. Используя наш сервис, вы можете бесплатно в режиме онлайн получить решения разными способами с пошаговыми действиями и пояснениями. Наш калькулятор будет также полезен, если вам необходимо проверить выполненные самостоятельно вычисления.

,

Решение:

  • Описание
  • Как пользоваться

Наш онлайн сервис позволяет решать системы линейных алгебраических уравнений различными способами:

  • методом Крамера (правило Крамера)
  • методом обратной матрицы
  • методом Гаусса-Монтанте (алгоритм Барейса)
  • методом Гаусса (метод последовательного исключения переменных)
  • методом Гаусса-Жордана (метод полного исключения неизвестных)

При этом сервис предоставляет последовательность решения, а не только ответ.

Дополнительно вы сможете проверить систему уравнений на совместимость.

  • С помощью знаков «+» и «» задайте необходимое количество переменных в уравнении. Если в ваше уравнение не входят какие-либо неизвестные, то просто оставьте поля пустыми (незаполненными).
  • В ячейках укажите коэффициенты (значения) при неизвестных. Если в исходных данных указано значение x1, x2 и так далее, то в ячейке перед указанными неизвестными укажите значение «1».
  • Значения при неизвестных могут быть:
    • целые числа: 7, -3,
    • десятичные (конечные и периодические) дроби: 7/8, 6.13, -1.3(56), 1.2e-4
    • арифметические выражения: 1/2+3*(6-4), (6-y)/x^3, 2^0.5
  • Далее нажмите на кнопку с названием нужной математической операции.
  • Значения в результатах решения можно с помощью мышки перетаскивать на поле исходных данных.

image Система линейных алгебраических уравнений (теория)

image

Варианты решений

Любое уравнение может считаться решенным только тогда, когда будут отысканы его корни. В программе Excel существует несколько вариантов поиска корней. Давайте рассмотрим каждый из них.

Способ 1: матричный метод

Самый распространенный способ решения системы линейных уравнений инструментами Excel – это применение матричного метода. Он заключается в построении матрицы из коэффициентов выражений, а затем в создании обратной матрицы. Попробуем использовать данный метод для решения следующей системы уравнений:

14x1+2x2+8x4=218 7x1-3x2+5x3+12x4=213 5x1+x2-2x3+4x4=83 6x1+2x2+x3-3x4=21

  1. Заполняем матрицу числами, которые являются коэффициентами уравнения. Данные числа должны располагаться последовательно по порядку с учетом расположения каждого корня, которому они соответствуют. Если в каком-то выражении один из корней отсутствует, то в этом случае коэффициент считается равным нулю. Если коэффициент не обозначен в уравнении, но соответствующий корень имеется, то считается, что коэффициент равен 1. Обозначаем полученную таблицу, как вектор A.
  2. Отдельно записываем значения после знака «равно». Обозначаем их общим наименованием, как вектор B.
  3. Теперь для нахождения корней уравнения, прежде всего, нам нужно отыскать матрицу, обратную существующей. К счастью, в Эксель имеется специальный оператор, который предназначен для решения данной задачи. Называется он МОБР. Он имеет довольно простой синтаксис:

    =МОБР(массив)

    Аргумент «Массив» — это, собственно, адрес исходной таблицы.

    Итак, выделяем на листе область пустых ячеек, которая по размеру равна диапазону исходной матрицы. Щелкаем по кнопке «Вставить функцию», расположенную около строки формул.

  4. Выполняется запуск Мастера функций. Переходим в категорию «Математические». В представившемся списке ищем наименование «МОБР». После того, как оно отыскано, выделяем его и жмем на кнопку «OK».
  5. Запускается окно аргументов функции МОБР. Оно по числу аргументов имеет всего одно поле – «Массив». Тут нужно указать адрес нашей таблицы. Для этих целей устанавливаем курсор в это поле. Затем зажимаем левую кнопку мыши и выделяем область на листе, в которой находится матрица. Как видим, данные о координатах размещения автоматически заносятся в поле окна. После того, как эта задача выполнена, наиболее очевидным было бы нажать на кнопку «OK», но не стоит торопиться. Дело в том, что нажатие на эту кнопку является равнозначным применению команды Enter. Но при работе с массивами после завершения ввода формулы следует не кликать по кнопке Enter, а произвести набор сочетания клавиш Ctrl+Shift+Enter. Выполняем эту операцию.
  6. Итак, после этого программа производит вычисления и на выходе в предварительно выделенной области мы имеем матрицу, обратную данной.
  7. Теперь нам нужно будет умножить обратную матрицу на матрицу B, которая состоит из одного столбца значений, расположенных после знака «равно» в выражениях. Для умножения таблиц в Экселе также имеется отдельная функция, которая называется МУМНОЖ. Данный оператор имеет следующий синтаксис:

    =МУМНОЖ(Массив1;Массив2)

    Выделяем диапазон, в нашем случае состоящий из четырех ячеек. Далее опять запускаем Мастер функций, нажав значок «Вставить функцию».

  8. В категории «Математические», запустившегося Мастера функций, выделяем наименование «МУМНОЖ» и жмем на кнопку «OK».
  9. Активируется окно аргументов функции МУМНОЖ. В поле «Массив1» заносим координаты нашей обратной матрицы. Для этого, как и в прошлый раз, устанавливаем курсор в поле и с зажатой левой кнопкой мыши выделяем курсором соответствующую таблицу. Аналогичное действие проводим для внесения координат в поле «Массив2», только на этот раз выделяем значения колонки B. После того, как вышеуказанные действия проведены, опять не спешим жать на кнопку «OK» или клавишу Enter, а набираем комбинацию клавиш Ctrl+Shift+Enter.
  10. После данного действия в предварительно выделенной ячейке отобразятся корни уравнения: X1, X2, X3 и X4. Они будут расположены последовательно. Таким образом, можно сказать, что мы решили данную систему. Для того, чтобы проверить правильность решения достаточно подставить в исходную систему выражений данные ответы вместо соответствующих корней. Если равенство будет соблюдено, то это означает, что представленная система уравнений решена верно.

image

Урок: Обратная матрица в Excel

Способ 2: подбор параметров

Второй известный способ решения системы уравнений в Экселе – это применение метода подбора параметров. Суть данного метода заключается в поиске от обратного. То есть, основываясь на известном результате, мы производим поиск неизвестного аргумента. Давайте для примера используем квадратное уравнение

3x^2+4x-132=0

  1. Принимаем значение x за равное . Высчитываем соответствующее для него значение f(x), применив следующую формулу:

    =3*x^2+4*x-132

    Вместо значения «X» подставляем адрес той ячейки, где расположено число , принятое нами за x.

  2. Переходим во вкладку «Данные». Жмем на кнопку «Анализ «что если»». Эта кнопка размещена на ленте в блоке инструментов «Работа с данными». Открывается выпадающий список. Выбираем в нем позицию «Подбор параметра…».
  3. Запускается окно подбора параметров. Как видим, оно состоит из трех полей. В поле «Установить в ячейке» указываем адрес ячейки, в которой находится формула f(x), рассчитанная нами чуть ранее. В поле «Значение» вводим число «0». В поле «Изменяя значения» указываем адрес ячейки, в которой расположено значение x, ранее принятое нами за. После выполнения данных действий жмем на кнопку «OK».
  4. После этого Эксель произведет вычисление с помощью подбора параметра. Об этом сообщит появившееся информационное окно. В нем следует нажать на кнопку «OK».
  5. Результат вычисления корня уравнения будет находиться в той ячейке, которую мы назначили в поле «Изменяя значения». В нашем случае, как видим, x будет равен 6.

image

Этот результат также можно проверить, подставив данное значение в решаемое выражение вместо значения x.

Урок: Подбор параметра в Excel

Способ 3: метод Крамера

Теперь попробуем решить систему уравнений методом Крамера. Для примера возьмем все ту же систему, которую использовали в Способе 1:

14x1+2x2+8x4=218 7x1-3x2+5x3+12x4=213 5x1+x2-2x3+4x4=83 6x1+2x2+x3-3x4=21

  1. Как и в первом способе, составляем матрицу A из коэффициентов уравнений и таблицу B из значений, которые стоят после знака «равно».
  2. Далее делаем ещё четыре таблицы. Каждая из них является копией матрицы A, только у этих копий поочередно один столбец заменен на таблицу B. У первой таблицы – это первый столбец, у второй таблицы – второй и т.д.
  3. Теперь нам нужно высчитать определители для всех этих таблиц. Система уравнений будет иметь решения только в том случае, если все определители будут иметь значение, отличное от нуля. Для расчета этого значения в Экселе опять имеется отдельная функция – МОПРЕД. Синтаксис данного оператора следующий:

    =МОПРЕД(массив)

    Таким образом, как и у функции МОБР, единственным аргументом выступает ссылка на обрабатываемую таблицу.

    Итак, выделяем ячейку, в которой будет выводиться определитель первой матрицы. Затем жмем на знакомую по предыдущим способам кнопку «Вставить функцию».

  4. Активируется окно Мастера функций. Переходим в категорию «Математические» и среди списка операторов выделяем там наименование «МОПРЕД». После этого жмем на кнопку «OK».
  5. Запускается окно аргументов функции МОПРЕД. Как видим, оно имеет только одно поле – «Массив». В это поле вписываем адрес первой преобразованной матрицы. Для этого устанавливаем курсор в поле, а затем выделяем матричный диапазон. После этого жмем на кнопку «OK». Данная функция выводит результат в одну ячейку, а не массивом, поэтому для получения расчета не нужно прибегать к нажатию комбинации клавиш Ctrl+Shift+Enter.
  6. Функция производит подсчет результата и выводит его в заранее выделенную ячейку. Как видим, в нашем случае определитель равен -740, то есть, не является равным нулю, что нам подходит.
  7. Аналогичным образом производим подсчет определителей для остальных трех таблиц.
  8. На завершающем этапе производим подсчет определителя первичной матрицы. Процедура происходит все по тому же алгоритму. Как видим, определитель первичной таблицы тоже отличный от нуля, а значит, матрица считается невырожденной, то есть, система уравнений имеет решения.
  9. Теперь пора найти корни уравнения. Корень уравнения будет равен отношению определителя соответствующей преобразованной матрицы на определитель первичной таблицы. Таким образом, разделив поочередно все четыре определителя преобразованных матриц на число -148, которое является определителем первоначальной таблицы, мы получим четыре корня. Как видим, они равны значениям 5, 14, 8 и 15. Таким образом, они в точности совпадают с корнями, которые мы нашли, используя обратную матрицу в способе 1, что подтверждает правильность решения системы уравнений.

image

Способ 4: метод Гаусса

Решить систему уравнений можно также, применив метод Гаусса. Для примера возьмем более простую систему уравнений из трех неизвестных:

14x1+2x2+8x3=110 7x1-3x2+5x3=32 5x1+x2-2x3=17

  1. Опять последовательно записываем коэффициенты в таблицу A, а свободные члены, расположенные после знака «равно» — в таблицу B. Но на этот раз сблизим обе таблицы, так как это понадобится нам для работы в дальнейшем. Важным условием является то, чтобы в первой ячейке матрицы A значение было отличным от нуля. В обратном случае следует переставить строки местами.
  2. Копируем первую строку двух соединенных матриц в строчку ниже (для наглядности можно пропустить одну строку). В первую ячейку, которая расположена в строке ещё ниже предыдущей, вводим следующую формулу:

    =B8:E8-$B$7:$E$7*(B8/$B$7)

    Если вы расположили матрицы по-другому, то и адреса ячеек формулы у вас будут иметь другое значение, но вы сможете высчитать их, сопоставив с теми формулами и изображениями, которые приводятся здесь.

    После того, как формула введена, выделите весь ряд ячеек и нажмите комбинацию клавиш Ctrl+Shift+Enter. К ряду будет применена формула массива и он будет заполнен значениями. Таким образом мы произвели вычитание из второй строки первой, умноженной на отношение первых коэффициентов двух первых выражений системы.

  3. После этого копируем полученную строку и вставляем её в строчку ниже.
  4. Выделяем две первые строки после пропущенной строчки. Жмем на кнопку «Копировать», которая расположена на ленте во вкладке «Главная».
  5. Пропускаем строку после последней записи на листе. Выделяем первую ячейку в следующей строке. Кликаем правой кнопкой мыши. В открывшемся контекстном меню наводим курсор на пункт «Специальная вставка». В запустившемся дополнительном списке выбираем позицию «Значения».
  6. В следующую строку вводим формулу массива. В ней производится вычитание из третьей строки предыдущей группы данных второй строки, умноженной на отношение второго коэффициента третьей и второй строки. В нашем случае формула будет иметь следующий вид:

    =B13:E13-$B$12:$E$12*(C13/$C$12)

    После ввода формулы выделяем весь ряд и применяем сочетание клавиш Ctrl+Shift+Enter.

  7. Теперь следует выполнить обратную прогонку по методу Гаусса. Пропускаем три строки от последней записи. В четвертой строке вводим формулу массива:

    =B17:E17/D17

    Таким образом, мы делим последнюю рассчитанную нами строку на её же третий коэффициент. После того, как набрали формулу, выделяем всю строчку и жмем сочетание клавиш Ctrl+Shift+Enter.

  8. Поднимаемся на строку вверх и вводим в неё следующую формулу массива:

    =(B16:E16-B21:E21*D16)/C16

    Жмем привычное уже нам сочетание клавиш для применения формулы массива.

  9. Поднимаемся ещё на одну строку выше. В неё вводим формулу массива следующего вида:

    =(B15:E15-B20:E20*C15-B21:E21*D15)/B15

    Опять выделяем всю строку и применяем сочетание клавиш Ctrl+Shift+Enter.

  10. Теперь смотрим на числа, которые получились в последнем столбце последнего блока строк, рассчитанного нами ранее. Именно эти числа (4, 7 и 5) будут являться корнями данной системы уравнений. Проверить это можно, подставив их вместо значений X1, X2 и X3 в выражения.

image

Как видим, в Экселе систему уравнений можно решить целым рядом способов, каждый из которых имеет собственные преимущества и недостатки. Но все эти методы можно условно разделить на две большие группы: матричные и с применением инструмента подбора параметров. В некоторых случаях не всегда матричные методы подходят для решения задачи. В частности тогда, когда определитель матрицы равен нулю. В остальных же случаях пользователь сам волен решать, какой вариант он считает более удобным для себя.

imageМы рады, что смогли помочь Вам в решении проблемы.imageОпишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

Помогла ли вам эта статья?

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий