⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 savecase.m

📁 matlab语言 编写的电力系统仿真代码
💻 M
字号:
function fname_out = savecase(fname, p1, p2, p3, p4, p5, p6, p7)%SAVECASE  Saves a MATPOWER case file, given a filename and the data matrices.%%   savecase(fname, baseMVA, bus, gen, branch)%   savecase(fname, baseMVA, bus, gen, branch, areas, gencost)%   savecase(fname, comment, baseMVA, bus, gen, branch)%   savecase(fname, comment, baseMVA, bus, gen, branch, areas, gencost)%   fname = savecase(fname, comment, baseMVA, bus, gen, branch, areas, gencost)%%   Writes a MATPOWER case file, given a filename and the data matrices.%   The fname parameter is the name of the file to be created or%   overwritten. If fname ends with '.mat' it saves the case as a MAT-file%   otherwise it saves it as an M-file. Optionally returns the filename,%   with extension added if necessary. The optional comment argument is%   either string (single line comment) or a cell array of strings which%   are inserted as comments.%   MATPOWER%   $Id: savecase.m,v 1.10 2004/09/21 01:50:36 ray Exp $%   by Carlos E. Murillo-Sanchez, PSERC Cornell & Universidad Autonoma de Manizales%   and Ray Zimmerman, PSERC Cornell%   Copyright (c) 1996-2004 by Power System Engineering Research Center (PSERC)%   See http://www.pserc.cornell.edu/matpower/ for more info.%% define named indices into bus, gen, branch matrices[PQ, PV, REF, NONE, BUS_I, BUS_TYPE, PD, QD, GS, BS, BUS_AREA, VM, ...    VA, BASE_KV, ZONE, VMAX, VMIN, LAM_P, LAM_Q, MU_VMAX, MU_VMIN] = idx_bus;[GEN_BUS, PG, QG, QMAX, QMIN, VG, MBASE, ...    GEN_STATUS, PMAX, PMIN, MU_PMAX, MU_PMIN, MU_QMAX, MU_QMIN] = idx_gen;[F_BUS, T_BUS, BR_R, BR_X, BR_B, RATE_A, RATE_B, ...    RATE_C, TAP, SHIFT, BR_STATUS, PF, QF, PT, QT, MU_SF, MU_ST] = idx_brch;[AREA_I, PRICE_REF_BUS] = idx_area;[PW_LINEAR, POLYNOMIAL, MODEL, STARTUP, SHUTDOWN, N, COST] = idx_cost;%% default argumentsif isstr(p1) | iscell(p1)    comment = p1;    baseMVA = p2;    bus     = p3;    gen     = p4;    branch  = p5;    if nargin > 6        areas   = p6;        gencost = p7;    endelse    comment = '';    baseMVA = p1;    bus     = p2;    gen     = p3;    branch  = p4;    if nargin > 5        areas   = p5;        gencost = p6;    endend%% verify valid filenamel = length(fname);rootname = [];if l > 2    if strcmp(fname(l-1:l), '.m')        rootname = fname(1:l-2);        extension = '.m';    elseif l > 4        if strcmp(fname(l-3:l), '.mat')            rootname = fname(1:l-4);            extension = '.mat';        end    endendif isempty(rootname)    rootname = fname;    extension = '.m';    fname = [rootname, extension];end%% open and write the fileif strcmp(extension, '.mat')        %% MAT-file    if exist('gencost') == 1        eval(['save ', rootname, ' baseMVA bus gen branch areas gencost;']);    else        eval(['save ', rootname, ' baseMVA bus gen branch;']);    endelse                                %% M-file    %% open file    [fd, msg] = fopen(fname, 'wt');     %% print it to an m-file    if fd == -1        error(['savecase: ', msg]);    end        %% function header, etc.    if exist('gencost') == 1 & ~isempty(gencost)        fprintf(fd, 'function [baseMVA, bus, gen, branch, areas, gencost] = %s\n', rootname);    else        fprintf(fd, 'function [baseMVA, bus, gen, branch] = %s\n', rootname);    end    if length(comment) ~= 0        if isstr(comment)            fprintf(fd, '%% %s\n', comment);        elseif iscell(comment)            for k = 1:length(comment)                fprintf(fd, '%% %s\n', comment{k});            end        end    end    fprintf(fd, '\n%%%%-----  Power Flow Data  -----%%%%\n');    fprintf(fd, '%%%% system MVA base\n');    fprintf(fd, 'baseMVA = %g;\n\n', baseMVA);        %% bus data    ncols = size(bus, 2);    fprintf(fd, '%%%% bus data\n');    fprintf(fd, '%%\tbus_i\ttype\tPd\tQd\tGs\tBs\tarea\tVm\tVa\tbaseKV\tzone\tVmax\tVmin');    if ncols >= MU_VMIN             %% opf SOLVED, save with lambda's & mu's        fprintf(fd, '\tlam_P\tlam_Q\tmu_Vmax\tmu_Vmin');    end    fprintf(fd, '\nbus = [\n');    if ncols < MU_VMIN              %% opf NOT SOLVED, save without lambda's & mu's        fprintf(fd, '\t%d\t%d\t%g\t%g\t%g\t%g\t%d\t%.8g\t%.8g\t%g\t%d\t%g\t%g;\n', bus(:, 1:VMIN).');    else                            %% opf SOLVED, save with lambda's & mu's        fprintf(fd, '\t%d\t%d\t%g\t%g\t%g\t%g\t%d\t%.8g\t%.8g\t%g\t%d\t%g\t%g\t%.4f\t%.4f\t%.4f\t%.4f;\n', bus(:, 1:MU_VMIN).');    end    fprintf(fd, '];\n\n');        %% generator data    ncols = size(gen, 2);    fprintf(fd, '%%%% generator data\n');    fprintf(fd, '%%\tbus\tPg\tQg\tQmax\tQmin\tVg\tmBase\tstatus\tPmax\tPmin');    if ncols >= MU_QMIN             %% opf SOLVED, save with mu's        fprintf(fd, '\tmu_Pmax\tmu_Pmin\tmu_Qmax\tmu_Qmin');    end    fprintf(fd, '\ngen = [\n');    if ncols < MU_QMIN              %% opf NOT SOLVED, save without mu's        fprintf(fd, '\t%d\t%g\t%g\t%g\t%g\t%.8g\t%g\t%d\t%g\t%g;\n', gen(:, 1:PMIN).');    else                            %% opf SOLVED, save with mu's        fprintf(fd, '\t%d\t%g\t%g\t%g\t%g\t%.8g\t%g\t%d\t%g\t%g\t%.4f\t%.4f\t%.4f\t%.4f;\n', gen(:, 1:MU_QMIN).');    end    fprintf(fd, '];\n\n');        %% branch data    ncols = size(branch, 2);    fprintf(fd, '%%%% branch data\n');    fprintf(fd, '%%\tfbus\ttbus\tr\tx\tb\trateA\trateB\trateC\tratio\tangle\tstatus');    if ncols >= QT                  %% power flow SOLVED, save with line flows        fprintf(fd, '\tPf\tQf\tPt\tQt');    end    if ncols >= MU_ST               %% opf SOLVED, save with mu's        fprintf(fd, '\tmu_Sf\tmu_St');    end    fprintf(fd, '\nbranch = [\n');    if ncols < QT                   %% power flow NOT SOLVED, save without line flows or mu's        fprintf(fd, '\t%d\t%d\t%g\t%g\t%g\t%g\t%g\t%g\t%g\t%g\t%d;\n', branch(:, 1:BR_STATUS).');    elseif ncols < MU_ST            %% power flow SOLVED, save with line flows but without mu's        fprintf(fd, '\t%d\t%d\t%g\t%g\t%g\t%g\t%g\t%g\t%g\t%g\t%d\t%.4f\t%.4f\t%.4f\t%.4f;\n', branch(:, 1:QT).');    else                            %% opf SOLVED, save with lineflows & mu's        fprintf(fd, '\t%d\t%d\t%g\t%g\t%g\t%g\t%g\t%g\t%g\t%g\t%d\t%.4f\t%.4f\t%.4f\t%.4f\t%.4f\t%.4f;\n', branch(:, 1:MU_ST).');    end    fprintf(fd, '];\n\n');        %% OPF data    if exist('gencost') == 1 & ~isempty(gencost)        %% area data        fprintf(fd, '%%%%-----  OPF Data  -----%%%%\n');        fprintf(fd, '%%%% area data\n');        fprintf(fd, 'areas = [\n');        if ~isempty(areas)            fprintf(fd, '\t%d\t%d;\n', areas(:, 1:PRICE_REF_BUS).');        end        fprintf(fd, '];\n\n');                    %% generator cost data        fprintf(fd, '%%%% generator cost data\n');        fprintf(fd, '%%\t1\tstartup\tshutdown\tn\tx0\ty0\t...\txn\tyn\n');        fprintf(fd, '%%\t2\tstartup\tshutdown\tn\tc(n-1)\t...\tc0\n');        fprintf(fd, 'gencost = [\n');        if ~isempty(gencost)            n = gencost(1, N);            if gencost(1, MODEL) == PW_LINEAR                n = 2 * n;            end            template = '\t%d\t%g\t%g\t%d';            for i = 1:n                template = [template, '\t%g'];            end            template = [template, ';\n'];            fprintf(fd, template, gencost.');        end        fprintf(fd, '];\n\n');    end        %% end    fprintf(fd, 'return;\n');        %% close file    if fd ~= 1        fclose(fd);    endendif nargout > 0    fname_out = fname;endreturn;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -