function [con,coneq]=mycon(X)%问题一约束条件 con=0; P=[4.4901e-111 6.60623e-15 7.68032e-11 0.007247314 2.50069e-07 2.15396e-10 2.94705e-11 4.87396e-11 8.59366e-09 5.94481e-06 0.000371065 3.41489e-06 5.60873e-09 0.000469465 2.00014e-07 5.00066e-07 8.2025e-08 9.08461e-08 9.6715e-10 7.29328e-07 4.41833e-06 1.77322e-07 1.58563e-07 9.51448e-08 0.088172208 1.4874e-06 5.74562e-07 0.000520471 0.521131447 0.000605418 8.79791e-07 0.000978475 0.000117916 5.13213e-05 0.000287595 0.883311226 0.00011256 0.000411525 0.243954983 0.079683551 0.103336874 6.70351e-06 0.001197113 0.014224718 0.000609612 0.019271399 0.004518329 1.68283e-06 0.054471398 0.175329789 0.000406706 0.943555623 0.064860147 4.24276e-07 0.046837987 0.062945587 0.000347477 0.000575744 8.22513e-07 0.000754555 0.000401314 0.000877429 0.000233442 3.62872e-06 0.001025476 0.000862572 0.001042486 0.257983673 0.106539695 0.000584556 0.000834802 0.086557877 0.180885238 0.001073287 0.000609361 0.001210604 0.212989238 0.167339606 0.001093772 0.229861622 4.97329e-06 0.977307926 0.000211465 5.31377e-06 0.00104578 0.11414342 0.19826523 6.22023e-06 8.33075e-06 0.20684399 7.33043e-06 5.16035e-16 0.001365569 0.165368564 0.000895718 0.114302777 0.001514608 0.000996671 0.953892892 0.975436983 1 0.962824657 0.971288328 0.143061377 0.233731624 0.00113885 0.952132631 0.971587812 0.96260471 0.050235014 0.845818834 0.95325841 0.955270802 0.968177082 0.956739165 0.979440957 0.949251393 0.975528342 0.975977374 0.967301778 0.974146885 0.972149912 1]; for i=1:123 con=con+X(2*i-1); end con=con-10000 coneq=[]; end %以下为规划主体程序 %E为最高额度,D为信誉评级 fun=@myfun; nlcon=@mycon; E=[100 100 100 100 100 100 100 100 100 100 100 100 100 40 60 100 100 100 100 100 100 100 60 100 100 100 100 100 60 100 100 60 100 60 60 60 100 60 60 60 60 100 60 60 40 100 60 60 60 60 100 60 100 100 60 60 60 60 60 60 60 60 100 100 60 100 60 100 60 100 60 60 60 100 100 60 60 40 60 100 60 60 60 60 60 60 60 60 60 60 60 60 60 100 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60 60]; D=[36 52 82 99 100 101 102 103 107 108 109 111 112 113 114 115 116 117 118 119 120 121 122 123]; lb=zeros(2*123,1);ub=zeros(2*123,1); Lb=[10,0.04];Ub=[100,0.15]; for i=1:123 lb(2*i-1:2*i)=Lb;ub(2*i-1:2*i)=Ub; ub(2*i-1)=E(i); end lb(D*2-1)=0; ub(D*2-1)=0; x0=ub;x0(D*2-1)=0;x0(1)=20; [x,fval]=fmincon(fun,x0,[],[],[],[],lb,ub,nlcon)%非线性规划为什么报错
时间: 2024-04-11 09:30:38 浏览: 61
Constitutive Equations Research Project-开源
非线性规划报错可能是由于约束条件的问题引起的。首先,您需要确保约束函数`mycon`返回两个输出参数`con`和`coneq`。
其次,您还需要检查约束函数中的计算逻辑是否正确。在您的约束函数中,`con`的计算似乎是将所有的`X`中的奇数索引位置的值相加,并与10000进行比较。但是,根据您提供的代码,没有对`X`进行索引操作,因此在这一步可能会报错。
请确保在计算约束条件之前,根据问题的要求使用正确的索引来访问`X`中的值。同时,您还可以通过打印输出来调试约束函数,以查看变量的值和计算结果是否正确。
另外,请注意,在进行非线性规划时,初始化变量x0应尽可能接近最优解,以提高算法的收敛性。您可以根据问题的要求和约束条件来选择合适的初始值。
如果问题仍然存在,请提供更多关于约束条件和目标函数的详细信息,以便我能够更好地帮助您解决问题。
阅读全文