Zadanie: Analiza fragmentu widma w Octave

Dane

Masz do dyspozycji dane pomiarowe pewnego widma (np. widma energii). Widmo składa się z dwóch pików typu gaussowskiego, nałożonych na stałe tło. Dane zapisane są w pliku tekstowym i zawierają:

Kolumny są oddzielone tabulatorem. Plik z danymi jest tu: spectrum.dat.


Model fizyczny

Model, który powinien opisywać te dane, ma postać funkcji:

\[ y(x) = B + A_1 \exp\!\left( -\frac{(x-\mu_1)^2}{2\sigma_1^2} \right) + A_2 \exp\!\left( -\frac{(x-\mu_2)^2}{2\sigma_2^2} \right). \]

Parametry:

Łącznie 7 parametrów dopasowania.


Zakres zadania (zalecane etapy)

1. Wczytanie danych (funkcja uigetfile)

Skrypt w Octave powinien:

  1. otworzyć okno wyboru pliku za pomocą funkcji uigetfile,
  2. wczytać dane z wybranego pliku tekstowego,
  3. sprawdzić, czy dane mają dwie kolumny liczb o tym samym rozmiarze,
  4. rozdzielić dane na dwa wektory (np. \(x\) i \(y\)).

W przypadku błędnego formatu skrypt powinien wypisać czytelny komunikat w Command Window i zakończyć działanie.

2. Dopasowanie modelu do danych (dowolną metodą)

Należy dopasować parametry modelu \[ (B, A_1, \mu_1, \sigma_1, A_2, \mu_2, \sigma_2) \] tak, aby jak najlepiej opisywał on dane eksperymentalne.

Dopasowanie należy wykonać dowolną metodą z wykorzystaniem własnych bądź wbudowanych funkcji Octave.

Nie narzuca się konkretnej funkcji ani algorytmu. Student ma swobodę wyboru podejścia, ale musi rozumieć matematyczne zasady stosowanej metody.

Można pisać własne funkcje w oddzielnych skryptach, ale należy dołączyć je do projektu, jeżeli są używane w głównym skrypcie.

3. Statystyka Poissona i zredukowane \(\chi^2\)

Kolumna \( y \) zawiera liczbę zliczeń, więc zgodnie ze statystyką Poissona niepewność pojedynczego punktu wynosi:

\[ \sigma_i = \sqrt{y_i}. \]

W punktach, gdzie \( y_i = 0 \), należy przyjąć minimalną niezerową niepewność, np. \(\sigma_i = 1\).

Parametrem jakości dopasowania będzie zredukowane chi-kwadrat obliczane jako:

\[ \chi^2_{\text{red}} = \frac{1}{N - p} \sum_{i=1}^{N} \left( \frac{y_i - y_{\text{model}}(x_i)}{\sigma_i} \right)^2. \]

gdzie:

4. Wykres wyniku dopasowania

Skrypt ma wygenerować wykres zawierający:

Wymagane jest, aby wykres był czytelny i estetyczny, z jasno zaznaczonym rozróżnieniem między danymi pomiarowymi a modelem.

5. Prezentacja wyników w Command Window

Skrypt powinien wyraźnie wypisać w Command Window:

Przykładowy styl prezentacji (tylko jako wzór formatowania):


========== WYNIKI DOPASOWANIA MODELU ==========
Tło (B)               =   ...
Pik 1: amplituda A1   =   ...
       położenie μ1   =   ...
       szerokość σ1   =   ...
Pik 2: amplituda A2   =   ...
       położenie μ2   =   ...
       szerokość σ2   =   ...
Zredukowane chi^2     =   ...
===============================================

Uwaga o korzystaniu z narzędzi AI

Podczas wykonywania zadania student może korzystać z narzędzi AI, pod warunkiem, że rozumie działanie stosowanych procedur, algorytmów oraz kodu. Korzystanie z AI ma mieć charakter pomocniczy – nie zastępować własnego rozumowania, a jedynie je wspierać.


Termin wykonania zadania

12.01.2026