我正在尝试使用matlab绘制电路的能量(W)。方程是:
绘制电压,电流和功率并不是那么难(我想我写了正确的代码,请告诉我你是否认为它是错的!):
%Variables
t1=20e-3;t2=60e-3;N=1000;f=50;
t=linspace(t1,t2,N);
Vmax = 10; %Peak Voltage
Imax = 2; %Peak Current
f = 50; %Frequency in Hertz
omega = 2 * pi * f;
phi_default = -pi/4; %Constant for phase difference
%Equations
Vsrc = Vmax * sin(omega * t); %Equation for Voltage
Isrc = Imax * sin((omega * t) + phi_default); %Equation for Current
Psrc = Vsrc .* Isrc; %Equation for Power
%Plotting the result
figure(1); %Window 1
plot(t,Vsrc, 'b', t, Isrc, 'r', t, Psrc, 'g'); %Plotting Voltage, Current and Power
现在的问题是我无法想出一种在matlab中绘制能量的方法。我认为应该使用Δt (Delta t)
函数来定义diff(t)
,并且总能量应该是这样的:
平均功率Pavr
由计算,其中T为周期。
所以问题是,如何将总瞬时能量绘制为范围范围内相位差的函数,我认为for loop
应该是必须计算的每个阶段的价值。
此外,我想绘制同一时期的平均功率。
感谢。
答案 0 :(得分:2)
通过在一段时间内积分功率来计算能量。当你在这里处理离散值时,你必须用和来近似积分。在您的情况下,作为时间函数的瞬时能量是
Winst = (t2 - t1) / N * cumsum(Psrc);
cumsum
为您提供了向量Psrc
的所有元素的累积总和,(t2 - t1) / N
是时间间隔。
为了计算能量作为phi的函数,你必须确定你想要考虑的时间段。您首先计算给定phi的能量,然后在固定时间间隔t1 ... t2:
上再次积分phi = -pi/2:phi_step:0
Wphi = zeros(1, length(phi));
for k = 1:length(phi)
Vsrc = Vmax * sin(omega * t);
Isrc = Imax * sin((omega * t) + phi(k));
Psrc = Vsrc .* Isrc;
Wphi(k) = (t2 - t1) / N * sum(Psrc);
end
plot( phi, Wphi);
平均功率只是Psrc
的平均值:
Pavg = sum(Psrc) / length(Psrc)