Kezdőoldal » Közoktatás, tanfolyamok » Házifeladat kérdések » Szerintetek helyes a következő...

Cápaci42 kérdése:

Szerintetek helyes a következő kód?

Figyelt kérdés

% Vezeteknev_V.m


% 1. Adatok betöltése

data = load('Teljes Nev.txt'); % vagy readtable ha .csv-t használsz

wavelength = data(:, 1); % hullámhossz adatok

spectrum = data(:, 2); % spektrum adatok


% 2. A háttér (a + b*x) illesztése

background = @(params, x) params(1) + params(2)*x;


% A két Gauss függvény összegének illesztése

gauss_sum = @(params, x) params(3)*exp(-((x-params(4))/params(5)).^2) + ...

params(6)*exp(-((x-params(7))/params(8)).^2);


% Az illesztett modell teljes függvénye (háttér + Gauss)

model = @(params, x) background(params, x) + gauss_sum(params, x);


% 3. Paraméterek kezdő értékeinek meghatározása

% a, b, a1, b1, c1, a2, b2, c2

% Kezdeti értékek tippelése:

a_init = min(spectrum); % háttér érték (alapvonal)

b_init = 0; % háttér lineáris

a1_init = max(spectrum) - a_init; % első Gauss amplitúdó

b1_init = wavelength(spectrum == max(spectrum)); % első csúcs helye

c1_init = 2; % első Gauss szélessége (kb.)

a2_init = a1_init * 0.5; % második Gauss amplitúdó

b2_init = b1_init + 5; % második csúcs helye (kb. 5 nm különbség)

c2_init = c1_init; % második Gauss szélessége (kb. ugyanakkora)


% Kezdő paraméterek vektora

init_params = [a_init, b_init, a1_init, b1_init, c1_init, a2_init, b2_init, c2_init];


% 4. Nemlineáris illesztés

options = optimset('Display', 'off');

params_opt = lsqcurvefit(@(params, x) model(params, x), init_params, wavelength, spectrum, [], [], options);


% 5. Illesztett adatok és maradványok számítása

fitted_spectrum = model(params_opt, wavelength);

residuals = spectrum - fitted_spectrum;


% 6. Grafikonok ábrázolása


% 6.1 Mért és illesztett spektrum

figure;

subplot(2,1,1);

plot(wavelength, spectrum, 'b-', 'DisplayName', 'Mért spektrum');

hold on;

plot(wavelength, fitted_spectrum, 'r--', 'DisplayName', 'Illesztett spektrum');

xlabel('Hullámhossz (nm)');

ylabel('Fotonszám (counts)');

title('Mért és illesztett spektrum');

legend('show');


% 6.2 Maradványok grafikonja

subplot(2,1,2);

plot(wavelength, residuals, 'k-', 'DisplayName', 'Maradványok');

xlabel('Hullámhossz (nm)');

ylabel('Maradványok (counts)');

title('Maradvány függvény');

legend('show');


% 7. c1 és c2 paraméterek kiíratása

disp(['c1: ', num2str(params_opt(5)), ' nm']);

disp(['c2: ', num2str(params_opt(8)), ' nm']);

2025. máj. 8. 10:01
 1/2 anonim ***** válasza:
Nem ismerjük a txt fájlt, meg nekem a "spectrum"-ot nem engedi meghívni (deprecated).
2025. máj. 8. 17:33
Hasznos számodra ez a válasz?
 2/2 anonim ***** válasza:
42%

A kód alapvetően jól van felépítve, de van néhány dolog, amit érdemes javítani vagy pontosítani a helyes működés és a stabilabb futás érdekében. Itt a részletes visszajelzés:


---


### ✅ **Ami rendben van:**


* A kód logikája helyes: betöltés → modelldefiníció → kezdőértékek → illesztés → ábrázolás.

* A modell definiálása `anonymous function`-ként szép és olvasható.

* `subplot`-ok használata a grafikus megjelenítéshez jól működik.

* Az `lsqcurvefit` alkalmazása megfelelő ilyen típusú illesztésre.


---


### ⚠️ **Javítandó / Ellenőrizendő részek:**


1. **Fájl betöltése:**


```matlab

data = load('Teljes Nev.txt');

```


* A `load()` csak akkor működik így, ha a `txt` fájl *numerikus értékeket* tartalmaz szóközökkel vagy tabulátorral tagolva.

* **Ha vesszőkkel tagolt CSV-t** használsz, inkább:


```matlab

data = readmatrix('Teljes Nev.txt');

```


vagy


```matlab

data = readtable('Teljes Nev.txt');

wavelength = data{:,1};

spectrum = data{:,2};

```


2. **Paraméterek indexelése:**


* A `params(3)*exp(...)` stb. részeknél figyelj arra, hogy a `params` helyes indexeket tartalmazzon (összesen 8 darab).


3. **Első Gauss-csúcs helyének kiválasztása:**


```matlab

b1_init = wavelength(spectrum == max(spectrum));

```


* Ez akkor működik, ha **csak egy maximum van**. Ha több pont is eléri a maximumot, akkor `b1_init` vektor lesz, ami hibát okoz.

* **Javaslat:**


```matlab

[~, idx_max] = max(spectrum);

b1_init = wavelength(idx_max);

```


4. **`lsqcurvefit` használata:**


* Az utolsó argumentum `options` a `lsqcurvefit`-ben nem ebben a pozícióban van.

* Helyes hívás:


```matlab

params_opt = lsqcurvefit(@(params, x) model(params, x), init_params, wavelength, spectrum, [], [], options);

```


➤ **Ez MATLAB R2019b-től működik így**, de ha régebbi verziód van, akkor `options`-t `optimoptions`-sel kell létrehozni és `lsqcurvefit` utolsó argumentumaként megadni.


---


### 🛠 **Ajánlott módosítások (összefoglalva):**


* Ellenőrizd a fájlformátumot (`load` vs. `readtable`).

* Használj biztonságos max-kiválasztást.

* Győződj meg arról, hogy a kezdőértékek valóban skalárok.

* Ha hibát ad az illesztésnél, próbáld ki:


```matlab

options = optimset('Display', 'off', 'MaxIter', 1000, 'TolFun', 1e-6);

```


---

2025. máj. 8. 22:40
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:

Miért keveri a beszélt és nyomtatott média következetesen a "nem lehet" és "nem szabad" (= tilos) kifejezéseket?

Amit nem lehet, az (fizikailag) lehetetlen. Pl. "Nem lehet lehozni a csillagokat az égről." Amit nem szabad (tilos) azt igenis lehet, de valamilyen módon szankcionálják. Pl. "Nem lehet az étteremben rágyújtani." Dehogynem lehet, legfeljebb megbüntetnek. Viszont ma már...

Melyik a helyes válasz a következő kérdésre?

Mutassátok meg azokat a vegyületeket, amelyeknek a hasadásakor a legtöbb energia szabadul fel: a) lipidek, b) szénhidrátok, c) fehérjék, d) nukleinsavak.

A következő szövegnek helyes e fordítása? [ Lent ]

A bukott angyal szerelme The fallen angel love Köszönöm a válaszokat! ^^

Kérdésem a következő lenne, az alábbi mondatban a "megtudtad, meg tudtad" hogyan helyes?

Ha meg tudtad álmodni, meg is tudod tenni! Vagy Ha megtudtad álmodni, meg is tudod tenni! A mondatban egybeírva, vagy külön kell írni?

Írnátok egy-egy helyes példamondatot a következő szavakkal?

Elolvastam a jelentésüket, de úgy érzem, sokkal könnyebben bekerülnének a szókincsembe, ha hallanék (a jelen helyzetben olvasnék) velük egy-egy mondatot. Indiszponált, rezignált, ováció, releváns, deviancia, pragmatikus, aspektus, attraktív, introvertált.




Minden jog fenntartva © 2026, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!