Выделение полного квадрата с помощью Mathematica
Запись от arch_m размещена 17.02.2020 в 15:53
Показов 5403
Комментарии 2
|
Задача в общем простая. Построить функцию которая бы выделяла полный квадрат из произвольного квадратного полинома. Вещь в хозяйстве весьма полезная. Сперва наметим пути реализации. 1) Нужно создать тест который определял бы, что данное выражение является квадратным многочленом относительно хотя бы одной переменной. 2) Если тест сработал нужно вычленить эту переменную. 3) Нужно найти коэффициенты многочлена. 4) Самое простое. С помощью найденных коэффициентов и переменной построить выражение с выделенным полным квадратом. Зададим многочлен q = a*x^2 + b*x + c; Построим тест qpQ[X_] := MemberQ[Exponent[X, Variables[X]], 2]; Проверим его в действии {qpQ[q], qpQ[a], qpQ[4], qpQ[x^2 + 2 x + y^2]} {qpQ[q], qpQ[a], qpQ[4], qpQ[x^2 + 2 x + y^2]} {True, False, False, True} Работает, как видно. Построим теперь функцию извлекающую переменную. var[X_] := Variables[X][[Position[Exponent[X, Variables[X]], 2][[1, 1]]]] /;qpQ[X] Функция работает тогда, когда тест на квадратный многочлен удовлетворителен. var[q] x Как видно, функция со своей задачей справляется. Коэффициенты полинома находит встроенная функция CoefficientList[q, var[q]] {c, b, a} Ну что-ж, все готово. Можно писать модуль. fsq[X_] := Module[{sqtest, vr, cf, out}, sqtest := MemberQ[Exponent[X, Variables[X]], 2]; vr := Variables[X][[Position[Exponent[X, Variables[X]], 2][[1, 1]]]]; cf := CoefficientList[X, vr]; out := cf[[3]] (vr + Expand[cf[[2]]/(2 cf[[3]])])^2 +fsq[cf[[1]] - cf[[2]]^2/(4 cf[[3]])]; If[sqtest, out, X, X] ] Проверим полученную функцию в действии. fsq[q] Работает как видно. fsq[x^2 + 2 x + 5 y^2 + 6 y + 14] Ну что ж, все получилось. Теперь сгенерируем кнопочку, что бы использовать функцию прямо в ячейке. CreatePalette[ Button[Defer[fsq[\[SelectionPlaceholder]]], None, BaseStyle -> "Evaluate", ImageSize -> {100, 25}]] Можно, конечно, полученную функцию и кнопку оформить как пакет, но ... я воздержусь от этого. |
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 2
Комментарии
-
arch_m,
А вы проверяли вашу программу на тот случай, если коэффициенты представлены в виде квадратов чисел? Ну например так x2 + 22x + 32Запись от wer1 размещена 17.02.2020 в 16:04
-
Математика автоматически возведет коэффициенты в квадрат. Программа работает относительно неопределенных переменных.
А вот что математика делает с таким выражением
fsq[4^2*Sin[x]^2 + 5 Sin[x] + 25]
Вот еще интересный случай.
fsq[a^2*x^2 + 2 x + 4]
Язык и функционал Математики специально заточен на решении символьных задач.Запись от arch_m размещена 17.02.2020 в 16:16


