.n Исследование функций одной переменной
.a
.d 33333
.s
*Исследование функций одной переменной

Данная статья предназначена для исследования функции одной переменной. Вы задаёте формулу расчёта, диапазон изменения независимой переменной, а также параметры отображения графика функции. После нажатия кнопки "Принять" система попытается найти все её корни и экстремумы в заданном диапазоне, а также выведет график. Страница представляет собой обычную статью, использующую при написании стандартные возможности сайта, поддерживаемые при написании любых прочих статей. Как она написана можно узнать, перейдя по ''{*$index.php?~=fpp&file=shurem/if1.s этой*}'/ ссылке. 

**Основные исходные данные

;Формула по умолчанию
~fu="x*x*x-10*x*x-20*x+3"
;Формула пользователя (введённая)
~fp=vvod("fp")
;Если нет значения (NULL) введённой формулы, то в поле ввода подставится формула по умолчанию 
~fx=sif(nz(fp),fu,fp)
;Назначение статьи обработчиком её же форм ввода
@ofs()
Задайте формулу вычисления функции, используя в качестве независимой переменной малую латинскую букву x. 

;Поле ввода строки с формулой длиной до 100 символов 
=pvs("fp",fx,100)

При написании формулы для возведения переменной x в целую степень рекомендуется использовать несколько операций умножения (*). Если степени большие или нецелые - применяйте функцию ''pow(x,k)'/, где x - основание, а k - степень. Также можно использовать функции ''abs()'/ - модуль числа, ''sqrt()'/ - квадратный корень, ''exp()'/ - экспонента, ''log()'/ или ''ln()'/ - натуральный логарифм, ''log10()'/ - логарифм по основанию 10, ''pi()'/ - число пи, ''cos()'/ - косинус, ''sin()'/ - синус, ''tan()'/ или ''tg()'/ - тангенс, ''acos()'/ - арккосинус, ''asin()'/ - арксинус, ''atan()'/ - арктангенс, ''rand(k,m)'/ - целое случайное число в диапазоне от k до m включительно, а также их произвольные суперпозиции. Слишком сложной суперпозицией страницу можно "вырубить". Если не жалко времени - дерзайте. На самом деле допустимых функций больше, но для этого надо читать документацию, которой пока нет...
~a=vvod("a")
~b=vvod("b")

Кроме формулы необходимо задать диапазон чисел, в котором функция будет исследоваться. 
~a=vvod("a")
~a=sif(nz(a),-3,a)
~b=vvod("b")
~b=sif(nz(b),13,b)

;Поле ввода числа
Нижняя граница диапазона (a): =pvc("a",a)

Верхняя граница диапазона (b): =pvc("b",b)

Величины a и b также можно использовать при записи формулы.

**Настройки графика
~w=vvod("w")
~w=sif(nz(w),800,w)
~h=vvod("h")
~h=sif(nz(h),600,h)
~lsx=vvod("lsx")
~lsx=sif(nz(lsx),10,lsx)
~vsy=vvod("vsy")
~vsy=sif(nz(vsy),20,vsy)
~psx=vvod("psx")
~psx=sif(nz(psx),10,psx)
~nsy=vvod("nsy")
~nsy=sif(nz(nsy),10,nsy)
~ctt=vvod("ctt")
~ctt=sif(nz(ctt),100,ctt)

Форму представления графика функции можно поменять. Для это нужно изменить несколько параметров области вывода: 
- ширину (w) =pvc("w",w)  
- высоту (h) =pvc("h",h) 
- смещение слева (lsx) =pvc("lsx",lsx) 
- смещение сверху (vsy) =pvc("vsy",vsy) 
- смещение справа (psx) =pvc("psx",psx) 
- смещение снизу (nsy) =pvc("nsy",nsy)
- число точек табулирования (ctt) =pvc("ctt",ctt)

Очевидно, что изменяя эти параметры, систему можно заставить работать не верно. Но тут что кому нравится: шашечки или ехать. Пробуем?
;Конец формы с кнопками Принять Закрыть
@kf(1)
;Блок выводится, если введено (не NULL) значение расчётной формулы
? nz(fp)=0
**График
;Табуляция выражения с одной переменной (tv1)
;fp - формула; a-начало диапазона; b-конец диапазона; ctt-число точек табулирования
~r=tv1(fp,a,b,ctt)
***Табулированные для графика значения с разумным округлением
;Начало центрированной таблицы
@nt(1)
;Строка таблицы со значениями аргумента
;st может иметь сколько угодно аргументов - скаляров и векторов
;Первый аргумент - способ оформления 1 - обычный; 2,3 - для заголовков, есть и другие
@st(1,r('x'))
;Строка таблицы со значениями заданного выражения
@st(1,r('y'))
;Конец таблицы
@kt()
;Инициализация холста для рисования графика
~g=holst(w,h,lsx,vsy,psx,nsy)
;Добавляем данные - серию r - вектора аргументов и значений, полученных табуляцией tv1 
@gdvs(g,r('x'),r('y'),'r')
;Выводим точки данных (vtd)
@gvtd(g,3)
;Соединяем прямыми линиями точки серии r
@gsts(g,'r')
;Добавляем  оси координат 
@gdok(g)
;Строим горизонтальную сетку
@gvgs(g,2)
;Строим вертикальную сетку
@gvvs(g,2)
;Сохраняем картинку в jpg-файл и получаем его имя
~f=gsf(g)
;Выводим изображение по центру страницы
@vis(f)
При каждой перезагрузке страницы график случайным образом меняет цвет. 
**Все корни выражения в заданном диапазоне
;Вычисляем корни выражения в диапазоне
~mk=vkv1(fp,a,b)
Корни вычисляются перебором значений в диапазоне и уточнением на подотрезке смены знака выражения методом "лопопамного" деления. 
;Выводим полученный массив на страницу (vms)
@vms(mk)
**Все экстремумы в заданном диапазоне
~me=vev1(fp,a,b)
Внутренние экстремумы локализуются методом трёх точек (средняя больше или меньше соседних - кандидат на экстремум) и потом уточняются перебором внутри выявленных подотрезков с мелким шагом. Результат бывает не слишком точен. Хотите строже, точнее и изящней - к Максиме, Маткаду и иже с ними. Здесь по рабоче-крестьянски.

Нулевой и последний элемент списка с цифровым номером - значения на границах диапазона. max - глобальный максимум, min - глобальный минимум. Остальное - локальные максимумы и минимумы.   
@vms(me)
?