function function1() 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,y]=fmincon(fun,x0,[],[],[],[],lb,ub,nlcon)%非线性规划 result=[]; result=[result,x]; result1 = zeros(123,2); for i=1:123 result(2*i-1)=result1(i,1); result(2*i)=result1(i,2); end Ftable = array2table(result1, "VariableNames", ["贷款金额", "贷款利率"]); writetable(Ftable,"第一问贷款策略.xlsx"); end为什么我最后得到的表中全是0
时间: 2024-04-13 17:25:38 浏览: 89
在你的代码中,我注意到以下几点可能导致最后得到的表中全是0:
1. 在主函数 `function1` 中,你定义了一个空的 `result1` 数组,并尝试将其转换为表格 `Ftable`。然而,`result1` 数组没有被填充任何数据,因此在转换为表格时会得到全为0的结果。
2. 在非线性规划求解过程中,你并没有更新 `result1` 数组的值。在 `function1` 中的 `x` 是非线性规划求解的结果,但你没有将其赋值给 `result1` 数组。
为了解决这个问题,请按照以下步骤进行修改:
1. 在非线性规划求解的过程中,将求解结果 `x` 赋值给 `result1` 数组。可以在求解结束后添加以下代码行:
```matlab
result1 = reshape(x, 2, [])';
```
这行代码将一维的求解结果 `x` 转换为一个二维数组 `result1`,其中每一行包含贷款金额和贷款利率。
2. 在创建表格 `Ftable` 时,使用更新后的 `result1` 数组:
```matlab
Ftable = array2table(result1, "VariableNames", ["贷款金额", "贷款利率"]);
```
这样,你将会得到包含正确非线性规划结果的表格。
此外,还需要确保你的目标函数 `myfun` 和约束函数 `mycon` 的定义正确无误。
希望这能帮助到你!如果还有其他问题,请随时提问。
阅读全文
相关推荐







