Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 带约束的向量_Matlab_Vector_Constraints - Fatal编程技术网

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 &

我正在写关于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(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];
这意味着:在放电时,