五、实验程序
%程序说明:ph变量是多行三列的变量,每一列分别对应书中PH1 PH2 PH3;行列数等于迭代次数
%pt变量是多行三列的变量,每一列分别对应书中PT1 PT2 PT3;行列数等于迭代次数
%W变量是一行多列向量,代表书中的全日发电耗水量,列数等于迭代次数 clc;clear;
syms sym_pt sym_ph sym_f sym_w sym_pld sym_y %定义变量 sym_f=3+0.4.*sym_pt+0.00035.*sym_pt^2; %火电消耗方程 sym_w=2+0.8.*sym_ph+1.5.*0.001.*sym_ph^2;%水电消耗方程 sym_df=char(diff(sym_f,'sym_pt'));%火电消耗方程求导 sym_dw=char(diff(sym_w,'sym_ph'));%水电消耗方程求导
sym_mw=[double(sym_df) double('==sym_y*(') double(sym_dw) double(')')]; %建立等式方程
[sym_ph,sym_pt]=solve('sym_ph+sym_pt-sym_pld==0',char(sym_mw),'sym_ph','sym_pt');%求解方程组 format long
%%%用水量误差值设定 e=50;
%%%%实际全日发电耗水量 wd=1.5e7;
%%%y值的初值 y(1)=0.5; %%负荷功率
pld=[350 700 500]; %%实际负荷功率初值 w(1)=0;
%%迭代次数 k=1;
%%%y每次迭代增量 add_num=1e-4; ri=[8 10 6];
while (abs(w(k)-wd)>e) && k<=3000
%公式ph(k,:)=(0.4-0.8.*y(k)+0.0007.*pld)./(0.003.*y(k)+0.0007); ph(k,:)=double(subs(sym_ph,{sym_pld,sym_y},{pld,y(k)}));
% 公式pt(k,:)=(0.8.*y(k)-0.4+0.003.*y(k).*pld)./(0.003.*y(k)+0.0007); pt(k,:)=double(subs(sym_pt,{sym_pld,sym_y},{pld,y(k)}));
%公式w(k)=sum((2+0.8.*ph(k,:)+(1.5e-3).*ph(k,:).^2).*ri.*3600);
w(k)=double(3600.*(ri(1).*subs(sym_w,{ph(k,1)})+ri(2).*subs(sym_w,{ph(k,2)})+ri(3).*subs(sym_w,{ph(k,3)}))); if w(k)>wd
add=add_num; else
add=(-1).*add_num;
end k=k+1;
y(k)=y(k-1)+add; w(k)=w(k-1); end k=k-1;
disp(['迭代次数:']) disp(k(end))
disp('全日发电耗水量为:') disp(w(end)) disp('y值:') disp(y(end))
disp('火电厂分担负荷PT1 PT2 PT3 分别为:') disp(pt(end,:))
disp('水电厂分担负荷PH1 PH2 PH3 分别为:') disp(ph(end,:))
六、实验结果
迭代次数: 5000
全日发电耗水量为:
1.500327200785120e+07 y值:
0.514199999999998
火电厂分担负荷PT1 PT2 PT3 分别为: 1.0e+02 *
2.457677384828078 4.865049279757391 水电厂分担负荷PH1 PH2 PH3 分别为: 1.0e+02 *
1.042322615171922 2.134950720242608
3.489408196940642 1.510591803059359