Одна поправка: это не линейная алгебра, которая обычно означает матрицы из нескольких уравнений и неизвестных.
Ваш пример определенно не сложен.
Что вам нужно, это простая грамматика выражения и парсер. Разобрать уравнение в абстрактное синтаксическое дерево и пройтись по дереву, чтобы оценить его.
Если бы вы писали на Java, это могло бы выглядеть как this . Другой пример: symja . Возможно, вам будет достаточно вдохновения, чтобы придумать свой собственный для C ++.
Возможно, вы захотите заглянуть в Mathematica и Alpha Вольфрама. Стивен Вольфрам - один из лучших в мире математиков и компьютерщиков. У него есть много вещей, которые вы можете использовать с пользой, а не писать сами.
Вам нужно определить, что вы подразумеваете под «решить» и что вы ожидаете получить.
Существуют символические решения и численные решения. Какой ты имеешь в виду? Оба одинаково действительны, но они разные. В зависимости от вашего ответа вы будете применять разные приемы.
Еще один момент: существует много методов «решения» уравнений, которые сильно зависят от типа уравнения. Если вы дадите мне что-то вроде f(x) = 0
, я подумаю об алгоритмах поиска корней, таких как метод Ньютона. Если вы дадите мне обыкновенное дифференциальное уравнение, я мог бы попробовать метод подстановки или численное интегрирование с использованием Рунге-Кутты. Если вы дадите мне уравнение в частных производных, я смогу применить метод конечных разностей, конечных элементов или граничных элементов. (Не заводите меня на эллиптические, параболические и гиперболические PDE.)
Суть в том, что ваш вопрос очень общий, и ответ во многом зависит от того, что вы пытаетесь сделать. Может помочь больше деталей.