VDS Хостинг для Ваших проектов

Программа для решения кубических уравнений

Сентябрь 25th, 2013 Рубрики: Мини, Прикладные и прочие

Этот пост будет в некотором смысле уникальным, ведь в нём хочу представить вниманию читателя не какую-то известную и крутую программу, а софт собственного производства :^) Это маленькая консольная программка, работающая под DOS под названием cubaeq. Она предназначена для решения кубических уравнений общего вида:

ax3+bx2+x+d=0

Для нахождения корней применяется метод Ньютона (касательных), а также приёмы дифференциального исчисление, благодаря чему находятся также точки минимума и максимума кубоиды.

Немного истории

Задумка и первый вариант был написан ещё в 2006 году, когда я учился на первом курсе. Тогда я ещё не изучил язык C, поэтому написал её на Pascal, хотя теперь понимаю, что C – более подходящий вариант, но переделывать не охота. Тогда под вдохновлением школьных уроков программирования на Паскале был сделан «слишком интерактивный» интерфейс, когда каждый аргумент надо было вводить с новой строки, нажимать Enter. Так она и осталась годами лежать. А вот недавно решил сделать обзор и собственного творения, но перед этим слегка переделал её под консольный вариант, где аргументы передаются сразу при запуске.

Структура и схема работы

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

Плюсы и минусы

Не отступая от традиций, похвалю и покритикую и свою программу :) Итак, плюсы:

  • Программа достаточно простая и конечно же бесплатная;
  • Малый размер и быстрота работы;
  • Применяемый метод Ньютона имеет несколько важных преимуществ: быстрая сходимость, высокая точность. Благодаря этому cubaeq находит корни кубического уравнения с точностью 9 знаков, к тому же для этого достаточно нескольких итераций.

Среди недостатков:

  • Написана на старом Turbo Pascal под DOS и 286 процессоры со всемы вытекающими отсюда последствиями;
  • Грязноватый код;
  • Решение в виде десятичного числа конечной хотя и высокой точности. Т.е. вы не получите точных решений, выраженных алгебраическим выражением в виде дробей, или корней и т.п.
  • Мало тестировалась, поэтому может работать некорректно при некоторых раскладах, в частности, если график функции сильно сжат, или другими словами, когда корни уравнения расположены очень близко друг к другу и разнятся менее чем 0.001.

Как пользоваться

Чтобы решить кубическое уравнение с помощью cubaeq, откройте командную строку DOS (Консоль), или загрузитесь с дискеты (шутка:D). Выполните команду:

cubaeq a b c d

,где вместо a, b, c, d подставьте коэфиценты решаемого уравнения. Аргумент ‘a’ не может быть нолём, в противном случае уравнение будет уже не кубическим. Также нельзя опускать какой-либо коэфициент. Если он опущен в уравнении, то для программы его надо представить как ‘0′. Ниже на скриншоте показан пример использования:

cubaeq - решение кубического уравнения

Программа решила уравнение:

-3x3+8x+1=0

Как видим, корни этого уравнения: x1=1.692230866, x2=1.56648526, x3= -0.1257456066. Точки локальных минимума и максимума xmin=-0.9428090416, xmax=0.942809416

И предвидя вопросы относительно cubaeq, как обычно это бывает и положено для каждой программы, список ответов на некоторые.

FAQ

Почему программа так называется?
Название – это сокращение cubica aequatio – кубическое уравнение (лат.)
Программа бесплатная?
Да. Вы можете свободно пользоваться ею и распространять в любых целях.
Могу ли я выдавать её за свою?
Нет. Менять и присваивать авторство запрещено.
А где можно взять исходный код?
Исходники я не выкладываю открыто, чтобы нерадивые студенты не халявили. Если надо, могу продать кому надо. Связь со мной.
Есть ли версия под Linux/Windows?
Да. Для Линукс с несколько изменённым интерфейсом, скомпилирована с Free Pascal. Для новых Windows используйте файл из папки Win32, (собран с TMT Pascal). На 64-разрядных машинах может не работать.
Что это за метод Ньютона такой?
Решение кубических уравнений – задача неординарная, как квадратного. Есть методы точного решения, когда уравнение имеет определённый вид, но там приходится иметь дело с комплексными числами. Метод Ньютона построен на проведении касательных в точках приближенного решения, и последовательного уточнения решения на каждом шаге. Подробнее можете узнать здесь или в учебниках по математическому анализу. Вообще cubaeq – это скорее программная реализация этого метода на примере кубоиды, чем точное средство поиска решений.
Не могу запустить/выдаёт ошибку.
Запускайте программу под вашу ОС (выбрать из соответствующей папки). Возможно у вас очень новая операционная система или несовместимый процессор. Исходная версия Cubaeq работает под DOS в 16-битном режиме, или из консоли Windows/Linux в 32-битном. Могу посоветовать прибегнуть к использованию соответствующих эмуляторов.
Пишет "неверный аргумент"/показывает синтаксис использования
Аргументов должно быть ровно 4, отделяемые пробелом: каждый из них – вещественное число, десятичная часть которого отделена точкой, например: 1.4142135
Сообщения программы выдаются крякозябрами или ???
DOS/Windows: Выполните сначала команду: chcp 866 Если это не поможет, попробуйте перейти в полноэкранный режим. Linux: установите кодировку консоли utf-8.
Скачать cubaeq (Все версии в архиве)
Скачать с Яндекс.Диск: http://yadi.sk/d/fXlM83QJ9sgMY
Понравился пост? Поделись с другими!
Теги: , , ,
Комментариев пока нет.

Написать комментарий

   b2bbonbone