Advertisement
Cai_B

MATLAB Script to calculate the Energy in Capacitor and Resistor via Simpsons Rule

Mar 27th, 2025
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.58 KB | Software | 0 0
  1. clc;
  2. clear all;
  3. close all;
  4.  
  5. data = tdfread('Q2_Clean_03.txt'); % Takes in the data from Q2
  6.  
  7. Intervals = [11, 101, 1001, 10001]; % Different number of intervals
  8.  
  9. % Energy stored in capacitor over 60ms calculated via simpsons rule
  10. fprintf('Energy stored in capacitor over 60ms calculated via simpsons rule\n');
  11. for i = 1:length(Intervals)
  12.     N = Intervals(i);
  13.     data.timei = linspace(min(data.time), max(data.time), N);
  14.  
  15.     data.Presi = interp1(data.time, data.Pres, data.timei);
  16.     data.Pcapi = interp1(data.time, data.Pcap, data.timei);
  17.  
  18.     a = min(data.time);
  19.     b = max(data.time);
  20.     n = N - 1;
  21.     dx = (b - a)/n;
  22.  
  23.     % Simpsons rule for Capacitor
  24.     first = data.Pcapi(1);
  25.     last = data.Pcapi(end);
  26.     Pcapi_middle = data.Pcapi(2:end-1);
  27.     odd_terms = Pcapi_middle(1:2:end);
  28.     even_terms = Pcapi_middle(2:2:end);
  29.  
  30.     % Simpsons rule for Resistor
  31.     first_R = data.Presi(1);
  32.     last_R = data.Presi(end);
  33.     Presi_middle = data.Presi(2:end-1);
  34.     odd_terms_R = Presi_middle(1:2:end);
  35.     even_terms_R = Presi_middle(2:2:end);
  36.  
  37.     CapacitorEnergy = dx/3 * (first + last + 4*sum(odd_terms) + 2*sum(even_terms));
  38.     Resistor_Energy = dx/3 * (first_R + last_R + 4*sum(odd_terms_R) + 2*sum(even_terms_R));
  39.  
  40.     fprintf('N = %d, E_capacitor = %.6f J\n', N, CapacitorEnergy);
  41.    
  42.  
  43.     fprintf('N = %d, E_Resistor = %.6f J\n', N, Resistor_Energy);
  44.    
  45. end
  46.  
  47. % Time is 10ms
  48. TimeLimit = data.time <= 0.01;
  49. Limit_time = data.time(TimeLimit);
  50. Limit_Pcap = data.Pcap(TimeLimit);
  51. Limit_Pres = data.Pres(TimeLimit);
  52.  
  53. fprintf('Energy stored in capacitor over 10ms calculated via simpsons rule\n');
  54. for i = 1:length(Intervals)
  55.     N = Intervals(i);
  56.     timei = linspace(min(Limit_time), max(Limit_time), N);
  57.     Pcapi = interp1(Limit_time, Limit_Pcap, timei);
  58.     Presi = interp1(Limit_time, Limit_Pres, timei);
  59.  
  60.     a = min(Limit_time);
  61.     b = max(Limit_time);
  62.     n = N - 1;
  63.     dx = (b - a)/n;
  64.  
  65.     first = Pcapi(1);
  66.     last = Pcapi(end);
  67.     Pcapi_middle = Pcapi(2:end-1);
  68.     odd_terms = Pcapi_middle(1:2:end);
  69.     even_terms = Pcapi_middle(2:2:end);
  70.  
  71.     first_R = Presi(1);
  72.     last_R = Presi(end);
  73.     Presi_middle = Presi(2:end-1);
  74.     odd_terms_R = Presi_middle(1:2:end);
  75.     even_terms_R = Presi_middle(2:2:end);
  76.  
  77.     E_capi_Simp = dx/3 * (first + last + 4*sum(odd_terms) + 2*sum(even_terms));
  78.     Resistor_Energy10 = dx/3 * (first_R + last_R + 4*sum(odd_terms_R) + 2*sum(even_terms_R));
  79.  
  80.     fprintf('N = %d, E_capacitor = %.6f J\n', N, E_capi_Simp);
  81.    
  82.  
  83.     fprintf('N = %d, E_Resistor = %.6f J\n', N, Resistor_Energy10);
  84.  
  85. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement