Szerintetek helyes a következő kód?
% 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']);




válasza:



válasza: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);
```
---
Kapcsolódó kérdések:
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...
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 bukott angyal szerelme The fallen angel love Köszönöm a válaszokat! ^^
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?
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!




