Статті

Метод найменших квадратів у Gnuplot

В курсі лабораторних робіт з загальної фізики студенти починають отримувати навички аналізу та обробки отриманих експериментальних даних. В багатьох випадках аналіз починається з графічного метода і на цьому етапі важливо перейти від наївно-візуального аналізу ("шкільного") до правильного статистичного аналізу (що підтримується "візуальним" контролем, того що відбувається).

Знов таки в багатьох випадках це означає використання метода найменших квадратів для пошуку параметрів функціональної залежності що має описувати експериментальні дані. При цьому будемо вважати що вигляд функціональної залежності ми знаємо (зазвичай це підказують певні теоретичні міркування). В цьому випадку метод найменших квадратів дозволяє визначити значення параметрів функції за яких графік цієї функції пройде максимально близько до наявних експериментальних значень (які звісно не будуть точно попадати на теоретичну криву через наявність похибок).

Для лінійної функції y=kx+b є готові аналітичні формули для обрахунку коефіцієнтів k,b , але в загальному випадку таких формул не має (або як мінімум їх треба буде виводити і вони мажуть виявитись громіздкими, або треба автоматизувати процес) тому важливим є використання комп'ютерних програм які можуть шукати апроксимуючу функцію використовуючи метод найменших квадратів (називають "проводять фіт").

Перше, з чого починають студенти, це, скоріше всього вже їм відома, програма Microsoft Excel. Але в області саме статистичної обробки є інші спеціалізовані програми. Прикладом такої програми є Gnuplot. Це проект з відкритим кодом що розвивається вже багато років та використовується багатьма вченими в своїй науковій діяльності.

Пакет Gnuplot був розроблений для побудови графіків, має багато можливостей по налаштуванню формату побудови та типів графіків. Але крім просто побудови графіків в gnuplot є можливість використання метода найменших квадратів.

Пакет Gnuplot на відміну від Excel розроблений для використання в командному режимі.

Розглянемо мінімальний приклад послідовності роботи з програмою.

Завантажуємо останню версію (наразі версія 5.2.7) з сайту проекту gnuplot.info. Можна використовувати інсталятор або просто портативну версію в архиві. Якщо у вас linux, скоріше всього компіьована версія вже є вашому пакетному менеджері.

Інсталюємо або разархівуємо програму і створюємо робочу папку там де тепер розміщений у вас gnuplot (наприклад папку "work"). Далі будемо створювати файли в робочій папці та запускати програму теж з неї.

Готові файли з прикладом можна завантажити тут (zip архів).

Тепер маємо підготувати файл з даними. Це має бути текстовий файл в якому в колонках записуються дані. Коментарі в файлі починаються з символу #

Файл lab8.txt

#### w(HZ) U(V)
2500.00 1.80
2600.00 1.90
2700.00 2.10
2800.00 2.60
2900.00 2.90
3000.00 3.30
3100.00 3.70
3200.00 3.80
3300.00 4.00
3400.00 3.80
3500.00 3.50
3600.00 3.20
3700.00 3.00
3800.00 2.70
3900.00 2.60
4000.00 2.00
4100.00 1.70

Далі можна запустити інтерактивний інтерпретатор команд wgnuplot.exe і по командно виконувати всю послідовність, а можна записати всі команди в один файл який буде передаватись як параметр в програму. Підемо останнім шляхом.

Створимо файл lab8.plt в який запишемо команди

set grid
set key center
set xlabel 'w (Hz)'
set ylabel 'U (V)'

Gamma=850
U=3300
Omega=3000

f(x) = U/sqrt(Gamma**2+(1/x*Omega**2-x)**2)
fit f(x) "lab8.txt" u 1:2 via U,Gamma,Omega

p [2000:] "lab8.txt" u 1:2 t 'Data' ,\
f(x) t 'Fit'
pause -1 "pause"

Разберемо що робить кожна команда.

set grid - налаштуванні відображення сітки

set key center - налаштування центрування

set xlabel 'w (Hz)' - задаємо підпис осі x

set ylabel 'U (V)' - задаємо підпис осі y

Gamma=850 , U=3300, Omega =3000 - задаємо початкові значення параметрів які будемо використовувати в функції апроксимації.

f(x) = U/sqrt(Gamma**2+(1/x*Omega**2-x)**2) - задаємо функцію якою будемо апроксимувати дані (повний перелік функцій які підтримуються gnuplot можна переглянути у документації програми)

fit f(x) "lab8.txt" u 1:2 via U,Gamma,Omega - команда фіта методом найменших квадратів заданою користувачем функцією f(x). fit - команда яка запускає фіт, f(x) - ім'я функції якою буде проводитись фіт, "lab8.txt" - файл з даними, u 1:2 - кажемо програмі використовувати 1 та 2 колонку для пошуку даних у файлі даних, via U,Gamma,Omega - використовуючи задані параметри. Результат та проміжна інформація виводиться або на екран в інтерактивному режимі або в файл fit.log (знаходиться у папці з якої запускали програму) у випадку роботи в командному режимі.

p [2000:] "lab8.txt" u 1:2 t 'Data' ,\

f(x) t 'Fit' - будує графік з даними та отриманою функцією апроксимацією даних.

pause -1 "pause" - в кінці виводиться виконання запиняється поки користувач не тисніть далі.

Запустити створений командний файл можна командою в командному інтерпретаторі cmd.exe.
"../bin/wgnuplot.exe" lab8.plt

(якщо ви працюєте в windows). Або знов так створити командний файл run.cmd та запускати його.

У вікні яке відкрилось можна переглянути отриманий результат та зберегти графік у бажаному форматі.

Формати графічного файла можуть бути растровими (png, emf) або векторним (pdf) - останній масштабується "красиво" до будь якого розміру.

stasbeh жовтня 29 2019 457 прочитання 0 коментар 0 оцінка Друк

0 коментар

Коментувати

Щоб отримати можливість додавання коментарів, будь ласка, спочатку авторизуйтесь на сайті через власний обліковий запис.
  • Коментарі відсутні


Доступ до оцінювання мають лише зареєстровані користувачі. Будь ласка, Вхід to vote.
Чудово! (0)0 %
Добре (0)0 %
Нормально (0)0 %
Задовільно (0)0 %
Погано (0)0 %