close all clear all logintimeout(5); DSN = 'CS3331-SCORE'; % ====== Get homework/quiz score Conn = database(DSN, '', ''); %ping(Conn) cursorA = exec(Conn, 'select * from combined'); cursorA = fetch(cursorA); A = cursorA.data; close(cursorA); close(Conn); id = [A{:,1}]'; name = A(:,2); % This big-5 strings are trashed already! hw1 = [A{:,4}]'; hw2 = [A{:,5}]'; hw3 = [A{:,6}]'; hw4 = [A{:,7}]'; quiz1 = [A{:,8}]'; quiz2 = [A{:,9}]'; quiz3 = [A{:,10}]'; quiz4 = [A{:,11}]'; quiz5 = [A{:,12}]'; student_n = length(id); hw = [hw1 hw2 hw3 hw4]; quiz = [quiz1 quiz2 quiz3 quiz4 quiz5]; % ====== Find the average of each quiz, excluding 0 score temp = quiz; % ====== Replace 0's with NaN's temp(find(temp==0)) = nan; % ====== Display mean of quiz ===> 35.7611 38.0265 24.7321 35.5088 34.2700 % nanmean(temp) % ====== The average of quiz 3 is too low ... quiz(:,3) = quiz(:,3)+10; % ====== Start the real computation hw_sum = sum(hw')'; quiz_sum = sum(quiz')'-min(quiz')'; % The lowest score is not used % ====== Normalize to [0, 1] max_hw_sum = 100+80+100+80; max_quiz_sum = 200; %norm_hw_sum = hw_sum/max(hw_sum); %norm_quiz_sum = quiz_sum/max(quiz_sum); norm_hw_sum = hw_sum/max_hw_sum; norm_quiz_sum = quiz_sum/max_quiz_sum; norm_final = 0.3*norm_hw_sum + 0.7*norm_quiz_sum; %norm_final = (norm_final-min(norm_final))/(max(norm_final)-min(norm_final)); % Distortion expo = 0.8; norm_final = 1-(1-norm_final).^expo; % Normalize to a proper range %maximum = 95; minimum = 40; %final_score = norm_final*(maximum-minimum) + minimum; final_score = 100*norm_final; score = round(final_score)+2; ave_score = mean(score); med_score = median(score); % ====== scores between 50 and 60 become 60 score(find(50