[未答复] 索引超出数组范围。

[复制链接]
dljtlgd 发表于 2021-3-28 09:11:08
本帖最后由 dljtlgd 于 2021-4-4 19:08 编辑

我在用fmincon求解一个优化问题时,程序报错:索引超出数组范围,请问如何更改


代码如下:
主函数
%x(2*i-1):贷款利率
%x(2*i):贷款额度
clc,clear
lb=zeros(2*123,1);
ub=zeros(2*123,1);
Lb=[0.04,10];
Ub=[0.15,100];
for i=1:123
    lb(2*i-1:2*i)=Lb;
    ub(2*i-1:2*i)=Ub;
end
fun=@myfun;
x0=zeros(2*123,1);
nclon=@mycon;
[x,fval]=fmincon(fun,x0,[],[],[],[],lb,ub,nclon)

定义函数
function con=mycon(x)
con=0;
for i=1:123
    con=con+x(2*i);
end
con=con-3000;
con=con'
end;


定义函数
function q=f(x,i)
%x为贷款利率,i为信用等级
A=[1 2 6 7 8 9 13 15:19 22 24 26 27 31 42 48 54 59 64 81 84 88 89 91 ];
B=[5 10 12 20 21 23 28 30 32 33 34 35 37 38 43 45 51 57 58 60 61 62 63 65 66 67 71 74 76 79 83 85 93 95 97 98 100];
C=[3 4 11 14 25 29 39 41 40 44 46 47 49 50 53 55 56 68 69 72 73 75 77 78 80 86 87 90 94 96 104 105 110];
if any(A==i)
    q=640.944*x^3-258.57058*x^2-37.965*x-1.1215;
elseif any(B==i)
    q=552.8291*x^3-225.0505*x^2+33.9947*x-1.0165;
elseif any(C==i)
    q=504.7170*x^3-207.3859*x^2+32.1569*x-0.9735;
else
    q=1;
end
q=q';
end



function y=myfun(x)
F=[0.994942013400847        0.0737228849330415        0.0719226187290684        0.221286220806457        0.0404645812338566        0.0660249538195811        0.0676091804831482        0.0513330813510301        0.0396139550336188        0.0438393192261949        0.0370909932389417        0.0421634641308401        0.0319334797688542        0.0338276521856866        0.0275939412385009        0.0279419896072872        0.0298249706740377        0.0325784101461342        0.0361575983184535        0.0359546692420744        0.0253924975783816        0.0194483808788259        0.0338410327258366        0.0224297317660776        0.0143937660575192        0.0127449662041798        0.0118815800501189        0.0122194944594126        0.0105528271698503        0.0168638921892660        0.0106001517292257        0.0103961672465831        0.0167828163019697        0.0159277819912309        0.0103438235790093        0.0145507474780894        0.0118220392611327        0.0108542992658107        0.0113120788616440        0.0140307671188294        0.0112439929847070        0.0108377835442383        0.0107723371221688        0.0122362280105275        0.0143366717776650        0.0149040174593799        0.0136003319856721        0.0125776095663745        0.0100185265908252        0.0108470600107113        0.0116652244348160        0.00912180078945457        0.0108849810211646        0.0115210018023909        0.00798705990063362        0.0117849653271070        0.0103551507092321        0.00897899418803545        0.0116613815167975        0.0136739465464668        0.00783327821709425        0.0103558097311492        0.0157200372144076        0.0108867832580449        0.00863336956053639        0.00861000579343320        0.0135557421464738        0.0136536255958085        0.00796307459335092        0.00846536159376625        0.0109236896581269        0.00855099116339777        0.0106303762310989        0.00846502974392471        0.0107880879999310        0.0107459465574896        0.00762393742257572        0.00792555820833444        0.00784649561770758        0.00780292655459886        0.00851224753444855        0.00855499355543309        0.0114147084234681        0.00774916066521739        0.00778629194133663        0.00621230136622753        0.00866715244594207        0.00764789951481037        0.00782002502535320        0.00749822753083556        0.00766963196405854        0.00753613909015449        0.00742285241347901        0.00732805289653729        0.00780297844961978        0.00746687188875630        0.00755433921828952        0.00728694369323810        0.00769518534481180        0.00763564653765826        0.00860356328863178        0.0103321883881081        0.0134842369394508        0.0133801451432778        0.0133841022710542        0.0134964195999171        0.0107924381034382        0.00826536347335170        0.0107744225937213        0.00864572303369098        0.0128730659862898        0.0132001467577809        0.0136691416128407        0.0135386695630756        0.0135951497464095        0.0107756558865667        0.0107730775553982        0.0135954957351097        0.0107171671238579        0.00862395975748495        0.0131385571262745        0.0131028886564358        0.0107841098079693]';
pf=[100        25        50        75        50        50        100        25        25        100        100        100        50        75        100        75        75        75        75        75        75        50        50        50        100        75        50        75        50        100        50        50        75        25        50        100        50        50        75        100        75        75        75        75        100        75        75        75        50        75        75        50        50        75        50        75        50        50        75        100        25        75        100        75        50        50        100        100        50        50        75        50        75        50        75        75        25        25        25        25        50        50        75        25        25        25        50        25        25        25        25        25        25        25        25        25        25        25        25        50        50        75        100        100        100        100        75        50        75        50        100        100        100        100        100        75        75        100        75        50        100        100        75]';
t=[0        1        0        0        0        0        0        1        1        0        0        0        1        0        0        0        0        0        0        0        0        0        0        0        0        0        0        1        0        0        0        0        0        1        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        1        0        0        0        0        1        0        0        0        0        0        0        0        0        0        0        1        1        1        1        0        0        0        1        1        1        0        1        1        1        1        1        1        1        1        1        1        1        1        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0]';
y=0;
for i=1:123
t=(x(2*i-1)*x(2*i)-log(F(i))/4.26*((100/pf(i)+t(i))/5)*log(F(i))/4.26*x(2*i-1).*x(2*i)).*(1-f(x(2*i-1),i));
y=y+t;
end
y=-y;
end







报错:
索引超出数组范围。


出错 myfun (line 7)
t=(x(2*i-1)*x(2*i)-log(F(i))/4.26*((100/pf(i)+t(i))/5)*log(F(i))/4.26*x(2*i-1).*x(2*i)).*(1-f(x(2*i-1),i));


出错 fmincon (line 546)
      initVals.f = feval(funfcn{3},X,varargin{:});


出错 qiujie (line 13)
[x,fval]=fmincon(fun,x0,[],[],[],[],lb,ub,nclon)


原因:
    Failure in initial objective function evaluation. FMINCON cannot continue.

附件1企业指标.xls

69 KB, 下载次数: 0

您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表