Matlab 带约束的向量
我正在写关于MATLAB的论文,我有以下问题: 我有一个向量(Matlab 带约束的向量,matlab,vector,constraints,Matlab,Vector,Constraints,我正在写关于MATLAB的论文,我有以下问题: 我有一个向量(Pbat=zero(8760,1);),这个向量,取决于另外两个向量(Pgen和Pload),应该如下改变: for i=1:length(Pload) if i==1 Pbat(i) = 1000; else if Pload(i) < Pgen(i) %// Battery charging if Pbat(i) < Pbat_max &
Pbat=zero(8760,1);
),这个向量,取决于另外两个向量(Pgen
和Pload
),应该如下改变:
for i=1:length(Pload)
if i==1
Pbat(i) = 1000;
else
if Pload(i) < Pgen(i) %// Battery charging
if Pbat(i) < Pbat_max && Pbat(i) > Pbat_min
Pbat(i) = (Pbat(i-1)+(Pgen(i)-Pload(i));
else
Pbat(i) = Pbat(i-1);
end
elseif Pload(i) > Pgen(i) %// Battery discharging
if Pbat(i) < Pbat_max && Pbat(i) > Pbat_min
Pbat(i) = (Pbat(i-1)-(Pload(i)-Pgen(i));
else
Pbat(i) = Pbat(i-1);
end
else
Pbat(i) = Pbat(i-1);
end
end
end
i=1时的:长度(Pload)
如果i==1
Pbat(i)=1000;
其他的
如果Pload(i)Pbat_min
Pbat(i)=(Pbat(i-1)+(Pgen(i)-Pload(i));
其他的
Pbat(i)=Pbat(i-1);
结束
elseif Pload(i)>Pgen(i)%//蓄电池放电
如果Pbat(i)Pbat_min
Pbat(i)=(Pbat(i-1)-(Pload(i)-Pgen(i));
其他的
Pbat(i)=Pbat(i-1);
结束
其他的
Pbat(i)=Pbat(i-1);
结束
结束
结束
然而,
Pbat
应该适用于它在诸如Pbat\u min之类的约束条件下可能获得的所有值。我看到您的代码存在的问题是,在计算Pbat(I)
之前,您要检查Pbat(I)
是否在限制范围内[Pbat\u min,Pbat\u max]
。由于Pbat
初始化为0,在该检查中,Pbat(i)
将始终为零,测试可能会失败(如果Pbat\u min>0
)
现在有一个不同的注释:要计算Pbat(i)
,你要么加(Pgen(i)-Pload(i))
,要么减去(Pload(i)-Pgen(i))
。这是完全相同的运算(简单数学)。此外,如果差值为零,你什么也不加——仍然是相同的运算。因此,你可以通过
Pbat(i) = Pbat(i-1) + (Pgen(i) - Pload(i));
要包括本答案注释中所述的充电效率,我们需要更多的逻辑,因为它仅适用于充电时的充电效率。为此,我们可以引入一个增强的效率
nAug = [1, n];
这意味着:放电时效率为1
,充电时效率为n
。现在,如果Pgen(i)Pload(i)
,我们可以将我们的差值乘以第一个元素(1
),返回0
(第一种情况)或1
(第二种情况)并添加1
,这样我们就可以用它来逻辑索引增强向量nAug
:
Pbat(i) = Pbat(i-1) + nAug((Pgen(i)>Pload(i))+1) * (Pgen(i) - Pload(i));
计算后,您可以检查Pbat(i)
是否在边界内,否则将其设置为边界值:
if Pbat(i) > Pbat_max
Pbat(i) = Pbat_max;
elseif Pbat(i) < Pbat_min
Pbat(i) = Pbat_min;
end
如果Pbat(i)>Pbat_max
Pbat(i)=Pbat_max;
其他方面(i)
一切结合在一起都会让您:
for i=1:length(Pload)
if i==1
Pbat(i) = 1000;
else
% Calculate next value
Pbat(i) = Pbat(i-1) + nAug((Pgen(i)>Pload(i))+1) * (Pgen(i) - Pload(i));
% Check bounds
if Pbat(i) > Pbat_max
Pbat(i) = Pbat_max;
elseif Pbat(i) < Pbat_min
Pbat(i) = Pbat_min;
end
end
end
i=1时的:长度(Pload)
如果i==1
Pbat(i)=1000;
其他的
%计算下一个值
Pbat(i)=Pbat(i-1)+nAug((Pgen(i)>Pload(i))+1)*(Pgen(i)-Pload(i));
%检查边界
如果Pbat(i)>Pbat_max
Pbat(i)=Pbat_max;
其他方面(i)
我看到您的代码存在的问题是,在计算Pbat(I)
之前,请检查Pbat(I)
是否在限制范围内[Pbat_min,Pbat_max]
。由于Pbat
初始化为0,在该检查中,Pbat(I)
将始终为零,测试可能会失败(如果Pbat_min>0
)
现在有一个不同的注释:要计算Pbat(i)
,你要么加(Pgen(i)-Pload(i))
,要么减去(Pload(i)-Pgen(i))
。这是完全相同的运算(简单数学)。此外,如果差值为零,你什么也不加——仍然是相同的运算。因此,你可以通过
Pbat(i) = Pbat(i-1) + (Pgen(i) - Pload(i));
要包括本答案注释中所述的充电效率,我们需要更多的逻辑,因为它仅适用于充电时的充电效率。为此,我们可以引入一个增强的效率
nAug = [1, n];
这意味着:放电时效率为1
,充电时效率为n
。现在,如果Pgen(i)Pload(i)
,我们可以将我们的差值乘以第一个元素(1
),返回0
(第一种情况)或1
(第二种情况)并添加1
,这样我们就可以用它来逻辑索引增强向量nAug
:
Pbat(i) = Pbat(i-1) + nAug((Pgen(i)>Pload(i))+1) * (Pgen(i) - Pload(i));
计算后,您可以检查Pbat(i)
是否在边界内,否则将其设置为边界值:
if Pbat(i) > Pbat_max
Pbat(i) = Pbat_max;
elseif Pbat(i) < Pbat_min
Pbat(i) = Pbat_min;
end
如果Pbat(i)>Pbat_max
Pbat(i)=Pbat_max;
其他方面(i)
一切结合在一起都会让您:
for i=1:length(Pload)
if i==1
Pbat(i) = 1000;
else
% Calculate next value
Pbat(i) = Pbat(i-1) + nAug((Pgen(i)>Pload(i))+1) * (Pgen(i) - Pload(i));
% Check bounds
if Pbat(i) > Pbat_max
Pbat(i) = Pbat_max;
elseif Pbat(i) < Pbat_min
Pbat(i) = Pbat_min;
end
end
end
i=1时的:长度(Pload)
如果i==1
Pbat(i)=1000;
其他的
%计算下一个值
Pbat(i)=Pbat(i-1)+nAug((Pgen(i)>Pload(i))+1)*(Pgen(i)-Pload(i));
%检查边界
如果Pbat(i)>Pbat_max
Pbat(i)=Pbat_max;
其他方面(i)
我看到您的代码存在的问题是,在计算Pbat(I)
之前,请检查Pbat(I)
是否在限制范围内[Pbat_min,Pbat_max]
。由于Pbat
初始化为0,在该检查中,Pbat(I)
将始终为零,测试可能会失败(如果Pbat_min>0
)
现在有一个不同的注释:要计算Pbat(i)
,你要么加(Pgen(i)-Pload(i))
,要么减去(Pload(i)-Pgen(i))
。这是完全相同的运算(简单数学)。此外,如果差值为零,你什么也不加——仍然是相同的运算。因此,你可以通过
Pbat(i) = Pbat(i-1) + (Pgen(i) - Pload(i));
要包括本答案注释中所述的充电效率,我们需要更多的逻辑,因为它仅适用于充电时的充电效率。为此,我们可以引入一个增强的效率
nAug = [1, n];
这意味着:在放电时,