%% Program: Ocena studentów metodą rozmytą z wykresem przerywanych linii (plot) % 1. Przygotowanie środowiska clearvars; close all; clc; % 2. Definicje skal i korekty x = 2:0.01:5; % skala ocen od 2.00 do 5.00 d = 0.01 * 7; % korekta ocen (np. zespół 7-os.) % 3. Funkcje przynależności z Fuzzy Toolbox mf_NS = @(v) trapmf(v, [4.31 4.81 5 5]); % przedmioty ścisłe mf_NJ = @(v) trapmf(v, [4.21 4.61 5 5]); % przedmioty językowe mf_OB = @(v) gaussmf(v, [20 100]); % obecność: σ=20, μ=100 % 4. Rysowanie funkcji NS z przerywanymi liniami (plot) figure; plot(x, mf_NS(x), 'k-', 'LineWidth',1.5); hold on; plot([x(1) x(end)], [1 1], '--k', 'LineWidth',1); % pozioma y=1 plot([4.8 4.8], [0 1], '--k', 'LineWidth',1); % pionowa x=4.8 plot([5.0 5.0], [0 1], '--k', 'LineWidth',1); % pionowa x=5.0 hold off; axis([4 5.2 0 1.1]); xlabel('Ocena x'); ylabel('\mu_{NS}(x)'); title('Przynależność przedmiotów ścisłych (NS)'); text(4.5,0.6,'NS','FontSize',12); % 5. Rysowanie funkcji NJ z przerywanymi liniami figure; plot(x, mf_NJ(x), 'k-', 'LineWidth',1.5); hold on; plot([x(1) x(end)], [1 1], '--k', 'LineWidth',1); plot([4.6 4.6], [0 1], '--k', 'LineWidth',1); plot([5.0 5.0], [0 1], '--k', 'LineWidth',1); hold off; axis([4 5.2 0 1.1]); xlabel('Ocena x'); ylabel('\mu_{NJ}(x)'); title('Przynależność przedmiotów językowych (NJ)'); text(4.35,0.6,'NJ','FontSize',12); % 6. Rysowanie funkcji OB (obecność) z przerywaną linią poziomą x_ob = 0:0.01:100; % skala obecności w % figure; plot(x_ob, mf_OB(x_ob), 'k-', 'LineWidth',1.5); hold on; plot([x_ob(1) x_ob(end)], [1 1], '--k', 'LineWidth',1); hold off; axis([0 100 0 1.1]); xlabel('Obecność [%]'); ylabel('\mu_{OB}(x)'); title('Przynależność obecności (OB)'); text(70,0.6,'OB','FontSize',12); % 7. Dane ocen sześciu studentów (kolumny: INF MAT FIZ ANG NIE MEC FRA ROB) raw_scores = [ ... 4.8, 5.0, 4.7, 4.4, 4.7, 4.4, 4.3, 4.5; 4.4, 4.7, 4.8, 4.5, 4.4, 4.9, 4.6, 4.7; 4.9, 4.9, 4.6, 4.7, 4.4, 4.6, 3.8, 4.3; 4.7, 4.8, 4.9, 4.8, 4.5, 4.8, 3.9, 4.0; 5.0, 4.6, 4.7, 5.0, 5.0, 4.7, 4.8, 4.5; 4.9, 4.4, 4.9, 4.3, 4.2, 4.5, 4.5, 4.6 ]; scores = raw_scores - d; % zastosuj korektę attendance = [87; 84; 83; 85; 94; 80]; % obecność [%] % 8. Indeksy przedmiotów dla NS i NJ idx_NS = [1,2,3,6]; % INF, MAT, FIZ, MEC idx_NJ = [4,5,7,8]; % ANG, NIE, FRA, ROB % 9. Obliczenie decyzji rozmytej (MIN → MAX) nS = size(scores,1); dec_min = zeros(nS,1); for i = 1:nS % stopnie przynależności do NS/NJ mu_vals = zeros(1,8); mu_vals(idx_NS) = mf_NS( scores(i,idx_NS) ); mu_vals(idx_NJ) = mf_NJ( scores(i,idx_NJ) ); % stopień przynależności obecności mu_att = mf_OB( attendance(i) ); % decyzja MIN ze wszystkich kryteriów dec_min(i) = min([mu_vals, mu_att]); end % wybór najlepszego studenta: maximum z dec_min [bestVal, bestIdx] = max(dec_min); % 10. Wyświetlenie wyników fprintf('Decyzje MIN dla studentów 1–6:\n'); disp(dec_min); fprintf('Najlepszy student to nr %d z wartością %.2f\n', bestIdx, bestVal);