Всем привет! Пишу программу, решающую химические уравнения (на уровне школьной программы), и столкнулся с проблемой на задаче, которая сразу казалась значительно легче: расстановка коэффициентов. Как я понимаю, что бы их найти надо найти решения однородной СЛАУ, где неизвестные - коэффициенты, а в уравнениях коэффициенты - количества химического элемента в каждом веществе. Или я что то не так понимаю, или методом Гаусса можно найти только тривиальное решение системы: все неизвестные равны 0. Следовательно надо решать ее методом подстановки и выражать через какую то одну переменную все остальные? Но я без понятия как это сделать. Буду очень благодарен, если мне кто то подскажет как это реализовать
Ваша задача сводится к решению матричного уравнения
Ax=By
где A - квадратная матрица N x N, B - прямоугольная матрица N x M, соответственно вектор зависимых переменных x имеет размерность N, вектор независимых переменных y имеет размерность M, где 1 <= M < N. Тогда зависимость переменных X от Y в случае невырожденной матрицы A будет иметь вид
x=(1/A)By
где (1/A) обратная матрица к A. Следовательно Ваша задача расчета коэффициентов для искомой аналитической зависимости сводится к вычислению обратной матрица (1/A), что делается методом гаусса и последующим ее умножением на матрицу В.
Теперь очень не простая задача, объяснить все это умному школьнику, но который пока не знает, что такое матрица.
Пусть у вас есть N линейных уравнений c неизвестными x1, x2, ..., xN и свободно изменяемыми параметрами y1,y2, ...yM, которые можно записать в виде:
a11*x1+a12*x2+...a1N*xN=b11*y1+b12*y2+...b1M*yM
a21*x1+a22*x2+...a2N*xN=b21*y1+b22*y2+...b2M*yM
.........................
aN1*x1+aN2*x2+...aNN*xN=bN1*y1+bN2*y2+...bNM*yM
Теперь предположим, что y1=1, все остальные y2 = y3 = yM = 0, то есть имеем систему уравнений с постоянными коэффициентами
a11*x1+a12*x2+...a1N*xN=b11
a21*x1+a22*x2+...a2N*xN=b21
.........................
aN1*x1+aN2*x2+...aNN*xN=bN1
Решим ее методом Гаусса (Мы полагаем, уравнения независимы) и запишем решение виде:
x1=d11
x2=d21
.........................
xN=dN1
Это решение было получено для y1=1, соответственно для произвольного y1, его для линейного уравнения можно записать в виде:
x1=d11*y1
x2=d21*y1
.........................
xN=dN1*y1
Теперь пусть y2=1, все остальные y1 = y3 = yM = 0, и получим уравнение
a11*x1+a12*x2+...a1N*xN=b12
a21*x1+a22*x2+...a2N*xN=b22
.........................
aN1*x1+aN2*x2+...aNN*xN=bN2
решая которое методом Гаусса получим коэффициенты d12,...,dN2. Соответственно решение для произвольных y1 и y2 может быть записано в виде суммы решений:
x1=d11*y1+d12*y2
x2=d21*y1+d22*y2
.........................
xN=dN1*y1+dN2*y2
Повторяя этот процесс, мы в конечном итоге получим решение, которое Вам нужно:
x1=d11*y1+d12*y2+...+d1M*yM
x2=d21*y1+d22*y2+...+d2M*yM
.........................
xN=dN1*y1+dN2*y2+...+dNM*yM
Здесь нужно сразу сказать, что предложенная схема не эффективна, так как требует, чтобы линейное уравнение решалось M раз. Правильный способ я описал выше (через обращение матрицы и умножения на матрицу B), но для этого Вам надо прочесть любой учебник по линейной алгебре за первый семестр. Для умного школьника, который программирует и собирается учиться дальше, это очень простая задача. Вот для начала ссылка https://ru.wikipedia.org/wiki/%D0%A3%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86 . Ну и думаю, что не нужно говорить, что не следует писать свою версию программы решения линейных уравнений и обращения матриц (это можно делать только в учебных целях), а нужно найти уже готовые и оттестированные решения.
Первые ссыдки в гугле: Реализация на C# Реализация на C++
Надеюсь, поможет)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
В Json встречаются такие тексты \u0432\u043b\u0435, есть ли какой нибудь online парсер Json, который бы декодировал такой текст ?
Не ожидал наткнуться на проблему в таком вопросе и тем не менееВот мое представление :
Надо добавить к GroupBox ещё одну property как сделать клас со всем что есть у groupbox и добавить собственое свойство?