Висновок графіків функцій в delphi, комп'ютерна документація від а до я

Висновок графіків функцій в Delphi

Вивчаючи доступну літературу з програмування, яку я знайшов в Інтернеті, а також деякі програми, я прийшов до висновку, що програмісти чи не усвідомлюють, чи то не хочуть напружуватися на цю тему, і все роблять, як в школі вчили. Будують графіки, як на папері. Тим самим применшуючи можливості комп'ютера. Залишаючи ті ж недоліки методу побудови, і навіть посилюючи їх.

По-перше висновок на екран - це висновок на дискретний носій. Цей факт майже ніяк не враховується. У тексті буде пояснено.

Програма добре виводить графіки, коли функція має як позитивні, так і негативні значення. Причому весь графік поміщається в зазначеному прямокутнику.

Тепер подивимося, а скільки обчислень значень функції робить програма? В даному випадку (25-0) /0.01=2500. Для будь-якого прямокутника виведення. Чим був зумовлений вибір кроку dx? Швидше за все, безперервністю лінії графіка. Який, до речі, так і залишився переривчастим на деяких ділянках, там, де функція змінюється швидко. Борються з цим, зменшуючи dx, причому частіше радикально - відразу в 10, і навіть в 100 разів, доводячи до 0.0001; менше мені не доводилося зустрічати. А це 250000 обчислень функції. І графіки все одно переривчасті. Благо комп'ютери швидкі. Але от якщо обчислювати функцію, задану неявно, то графік буде будується повільніше. Виберемо прямокутник виведення 600 * 400. Таким чином по горизонталі ми можемо мати тільки 600 значень. По осі У, відповідно, теж. Питання: куди йдуть інші 249400 результату обчислень? Частина йде на побудову вертикальних відрізків прямих, що з'єднують сусідні ординати, а левову частку інших поїдає Round. Ось тобі і дискретний висновок. Звідси випливає, що функцію потрібно вважати в 600 точках, а відрізки вертикальних прямих можна намалювати олівцем. І dx потрібно вибирати в нашому випадку (25-0) / 600 = 0,0416666. Графік вийде найякісніший, який тільки можливо отримати. Потім, немає необхідності обчислювати її значення двічі .Можно раз, запам'ятавши результат в масиві (Масив має розмір не більше дозволу монітора). В таких умовах швидкість виведення не змінюється.

По-друге, сам метод побудови (обчислення значень функції з кроком dx) працює як фільтр, відсікаючи високочастотні гармоніки, тобто я хочу сказати, що якщо до функції f (x) додати щось на зразок g (x) * sin ( 2 * pi / dx * x), то результат виведення буде плачевним. Цей елемент ніяк не змінить попередній графік. Хоча він може бути основним носієм інформації про функції. І вже звичайно дуже непросто вивести на екран графік дискретної функції (мається на увазі універсальними програмами загального користування, подібними наведеної). Якщо взяти f (x) = 2 * Sin (x) * exp (x / 5) + exp (x * x) * sin (2 * pi / dx * x), то дана програма другий доданок не помітить, хоча буде витрачати час на розрахунок f (x) = 2 * Sin (x) * exp (x / 5) * exp (x * x) * sin (2 * pi / dx * x). А в цьому випадку графік константи. Наведена програма, як я згадував, некоректно відобразить і його, але це ж навчальна програма. Тому претензій не пред'являємо.

А ось якщо взяти TAB MathGrapher 1.0 (поширена в Інтернеті) і просто ввести 5 * Sin (200 * pi * x), то ми отримаємо чистий нуль. Замість 5, зрозуміло, можна написати будь-яку функцію, та й замість Sin (200 * pi * x) будь-яку періодичну з кратною частотою, і програма видасть невірний графік.


Додати закладку на матеріал: