知识分享|分段函数线性化及matlab测试

目录

1 使用0-1变量将分段函数转换为线性约束

2 连续函数采用分段线性化示例

3 matlab程序测试

4 matlab测试结果说明

5 分段线性化应用


1 使用0-1变量将分段函数转换为线性约束

2 连续函数采用分段线性化示例

3 matlab程序测试

clc;clear all;gn=10;tn=1;x_pf=sdpvar(1, tn,'full');Pgone=8;gw1=sdpvar(gn+1,tn,'full');gz1=binvar(gn, tn,'full');gl1=10/gn;for i=1:1gl2(i,:)=0:gl1:10;endcon=[];con = [con, x_pf(1,:)==gl2(1,:).^2*gw1];con = [con, gw1(1,:)<=gz1(1,:)];for i=2:gn    con = [con, gw1(i,:)<=gz1(i-1,:)+gz1(i,:)];endcon = [con, gw1(gn+1,:)<=gz1(gn,:)];con = [con, sum(gw1)==ones(1,tn)];con = [con, sum(gz1)==ones(1,tn)];con = [con, Pgone(1,:)==gl2(1,:)*gw1];con = [con, gw1>=0];f=1;ops=sdpsettings('solver','cplex');result=optimize(con,f,ops);

4 matlab测试结果说明

在上述测试程序中,Pgone是平方之前的变量,x_pf是平方项,为了测试运算效果,目标函数采用定值,这样就能验证约束是不是严格限制,上述程序将Pgone取值为8,最终得到x_pf得64,将Pgone改成5,则x_pf得25,可以看出,此分段线性化模型严格约束。

大家在测试过程中,可以调节gn的值,该值代表的是分段数量,调节该值能够发现,随着分段数量增多,分段线性化的精度也会越来越高,如,当Pgone=5,gn=3时,x_pf=27.78,随着gn增大,x_pf值也就更加精确。

5 分段线性化应用

在电力系统中,常规机组的成本涉及到机组功率的平方项,这时候就可以采用分段线性化,如日前日内多阶段多时间尺度源荷储协调调度(matlab代码)考虑源荷两侧不确定性的含风电电力系统低碳调度等程序中均有应用。

以下是使用Matlab进行分段函数线性化的示例代码: ```matlab % 定义分段函数 x = linspace(-5, 5, 100); y = zeros(size(x)); for i = 1:length(x) if x(i) < -2 y(i) = 0; elseif x(i) < 0 y(i) = x(i) + 2; elseif x(i) < 2 y(i) = -x(i) + 2; else y(i) = 0; end end % 绘制原始函数 figure; plot(x, y); title('原始函数'); % 线性化分段函数 x0 = 0; % 线性化点 y0 = x0 + 2; % 线性化点处的函数值 k1 = (y0 - 0) / (x0 - (-2)); % 前半段的斜率 k2 = (0 - y0) / (2 - x0); % 后半段的斜率 x1 = linspace(-5, x0, 100); % 前半段的线性化区间 x2 = linspace(x0, 5, 100); % 后半段的线性化区间 y1 = k1 * (x1 - (-2)); % 前半段的线性化函数 y2 = k2 * (x2 - x0) + y0; % 后半段的线性化函数 % 绘制线性化函数 figure; plot(x, y, x1, y1, x2, y2); title('线性化函数'); legend('原始函数', '线性化函数'); ``` 在这个示例中,我们定义了一个分段函数,并使用`for`循环将其在`[−5,5]`范围内离散化为100个点。然后,我们使用Matlab的`plot`函数绘制了原始分段函数。 接下来,我们选择一个线性化点`x0`,并计算出前半段和后半段的斜率。然后,我们使用`linspace`函数在`[-5,x0]`和`[x0,5]`范围内分别计算出前半段和后半段的线性化函数。最后,我们使用`plot`函数将原始函数和线性化函数一起绘制出来。 注意,这个示例只是一个简单的示例,实际应用中可能需要更复杂的分段函数线性化方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电力程序小学童

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值