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 13:25:38 浏览: 71
在你的代码中,我注意到以下几点可能导致最后得到的表中全是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` 的定义正确无误。
希望这能帮助到你!如果还有其他问题,请随时提问。
相关问题
报错显示的是fun=@myfun; 不在任何函数内
问题出在指定目标函数`myfun`的地方。根据您提供的代码,我没有看到`myfun`函数的定义。请确保在使用`fmincon`函数时,目标函数`myfun`已经被正确定义。
您需要创建一个名为`myfun`的函数,该函数接受一个参数`X`作为输入,并返回一个标量作为输出。这个函数应该根据问题的要求来计算目标函数值。然后,将这个函数赋值给变量`fun`,如下所示:
```matlab
fun = @myfun;
```
请确保在定义`myfun`函数时,所有的变量和计算逻辑都是正确的。如果您需要更多关于目标函数的帮助,请提供目标函数的详细描述和要求,我将尽力提供更多的指导。
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)为什么报错myfun无法识别
当出现错误提示 `myfun` 无法识别时,通常是因为 MATLAB 找不到对应的函数或无法访问到该函数。请确保 `myfun` 函数被正确定义并且在当前 MATLAB 工作路径中。
以下是一些常见的原因和解决方法:
1. 函数文件未保存:确保 `myfun` 函数文件已经保存在 MATLAB 工作路径中,并且文件名与函数名一致。
2. 函数文件名大小写错误:在 MATLAB 中,函数文件名是严格区分大小写的。请检查 `myfun` 函数文件的大小写是否与调用时一致。
3. 函数文件不在 MATLAB 工作路径中:如果 `myfun` 函数文件位于其他文件夹中,你需要添加该文件夹到 MATLAB 的工作路径中,或者使用绝对路径或相对路径来调用函数。
4. 函数定义不正确:确保 `myfun` 函数的定义正确无误,包括函数名、输入参数和输出参数的个数和类型。
请检查以上可能导致错误的原因,并根据实际情况进行修正。如果问题仍然存在,请提供更多的错误信息和 `myfun` 函数的代码,以便我更好地帮助你解决问题。
阅读全文