Графический калькулятор: как найти соответствующую часть графика для отображения - PullRequest
3 голосов
/ 26 мая 2011

Я работаю над графическим калькулятором (вы знаете, тот, в котором вы вводите формулу, скажем, x ^ 2, и вы получаете график этой функции).Проблема, которую я имею, состоит в том, как сместить и масштабировать представление графика, чтобы показать интересный раздел функции.

Я исчерпал все «простые» идеи, которые у меня были.Позвольте мне показать пример: - sin (x) => интересный раздел находится между y = [-1,1] и смещением (0,0) - x ^ 2 => интересный раздел находится между y = [0, 100] исмещение (0,0).(100 выбрано произвольно) - 100x ^ 2 - 10000 => y = [-10000, 100 *], а смещение равно (-10000, 0)

Я подумал, что могу назначить «диапазон» и «смещение 'для каждого типа функции и создайте некоторую математику, чтобы сложить / умножить / и т. д. эти диапазоны вместе так же, как результат будет вычислен.Тем не менее, это требует «создания» некоторой математики, и потенциал для хорошо скрытых логических недостатков слишком велик.

Должен быть несложный способ сделать это, но я просто не могу его найти.Есть ли конкретные условия для поиска?Любые указатели на алгоритм?

Ответы [ 3 ]

3 голосов
/ 26 мая 2011

Какая интересная проблема. Я никогда не думал об этом, но я бы начал с поиска:

  1. Два корня уравнения, ближайшего к началу координат (можно использовать алгоритм Ньютона-Рафсона ).
  2. Максимумы и минимумы. Для этого вам нужно найти места, где производная функции равна 0. Вы можете сделать численное дифференцирование и примерно найти места, где производная пересекает 0, или, если вы чувствуете амбициозность, вы может использовать автоматическое дифференцирование . Найдя 0-пересечения производной, вернитесь и оцените исходное уравнение в этих точках.
  3. Значение функции в каждой из этих точек оси X.

Затем возьмите самые отдаленные точки на каждой оси, добавьте к ним 10% и используйте их в качестве координат ограничительной рамки.

Существуют очевидные крайние случаи: функция может не иметь ни одного, ни бесконечного числа корней. Функция может не иметь максимума или минимума. Я не совсем уверен, как вы можете обнаружить эти случаи, но вы можете захотеть встроить ограничения для шагов (1) и (2), например, найти первые N корней или первые N экстремумов, считая от 0. Другой предел возможно, вы должны убедиться, что ваша экскурсия по одной оси никогда не превышает N экскурсии по другой оси.

1 голос
/ 26 мая 2011

Две интересные точки наиболее распространенных графиков - это начало системы координат (для ориентации) и точка пересечения функции, которую легко вычислить.Следовательно, я бы выбрал масштаб так, чтобы были видны и начало координат (0,0), и точка пересечения y (0, y0), а также некоторый отступ, то есть интервал [-y0 - y0 / 5;y0 + y0 / 5].Если начало координат и точка пересечения y оказываются близкими или даже одинаковыми, я бы выбрал видимый интервал, скажем, [-5;5].

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

0 голосов
/ 26 мая 2011

Одним из возможных определений интересной зоны является плотность следующих точек:

  1. f (x) = 0 (пересечение x-zxis)
  2. f '(x) =0 (мин / макс)
  3. f '' (x) = 0 (изменение направления кривизны)
  4. f '' '(x) = 0 (макс. Кривизна, возможно, мин. Кривизнаможет быть не очень интересно)
...