fminimax 无法执行赋值,因为左侧和右侧的元素数目不同。

求解器过早停止。

fminimax 已停止,因为它超过函数计算限制,
options.MaxFunctionEvaluations = 6.000000e+02。

无法执行赋值,因为左侧和右侧的元素数目不同。

img

img

img

足”的解决方法-该错误提示通常是由于在调用函数时未正确传入参数而导致的

如果在调用自定义函数时出现"输入参数的数目不足"的错误提示,可以按照以下步骤进行排查和解决:

  1. 检查函数的定义,确认函数参数的数量和名称是否正确。需要注意的是,如果函数参数中存在默认值,调用时可以不传入这些参数,但需要传入其后面的参数。

  2. 检查调用函数时传入的参数数量和名称是否与函数定义匹配。

  3. 检查传入参数的数据类型是否与函数定义中要求的一致,例如如果函数要求传入的参数是矩阵,而传入的实参是一个标量,就会触发该错误提示。

  4. 如果以上步骤都检查无误,可以尝试在函数定义中添加默认值或者修改函数参数的类型,以兼容传入的参数。

以下是一个简单的示例代码,演示了如何正确调用自定义函数并传入参数:

% 自定义函数,实现两数相加
function y = add(x1, x2)
y = x1 + x2;

% 调用自定义函数,传入参数
a = 1;
b = 2;
c = add(a, b); % 正确传入2个参数,返回值为3
d = add(a); % 错误传入1个参数,触发"输入参数的数目不足"错误提示

一般按照以下这几步分析

1定位到报错行
2查看一下等号左右两边元素个数,这里通过观察可能看不出问题,可以用size函数分别查看两边元素的个数
3充分理解等号左右两边变量的类型,到底是数值还是字符数组或字符串数组,有没有元胞数组等……,
4搞清楚左右两边是一个完整的矩阵还是单个元素,我见过有人将矩阵和单个元素用等号连接
5对容易让人混淆的情形,要着重考虑,比如代码 A = char(ones(1,10)); A(1) = '123' ,左边是字符数组A的第一个元素,该位置只能保存一个字符,而右边是一个字符数组,这个字符数组有3个元素,每个元素代表一个字符,这个操作将包含3个字符的字符数组赋值给只能包含一个字符的位置,这样一来出现“左侧和右侧的元素数目不同”的报错也属正常。修改方案A = string(ones(1,10)); A(1) = "123"这段代码将A修改为字符串数组,‘123’改为“123”,这样就将字符串保存到了字符串数组中


可以通过增加 MaxFunctionEvaluations 的值,以便有更多的迭代次数来找到最优解。解决超过函数计算限制问题

修改options.MaxFunctionEvaluations 参数来更改计算的求解次数,如果还不行,又可能你的数据或函数有问题,比如没有有效的极小(大)值,导致无法求解。无法执行赋值,因为左侧和右侧的元素数目不同这个错误通常是因为赋值语句左右两侧的向量或矩阵的元素数目不相同导致的。解决方法就是,检查赋值语句左右两侧的向量或矩阵的维度和元素数目是否一致。

借鉴chatgpt4:
这个错误信息表示在求解器(fminimax)中,函数计算的限制已经超过。你可以通过增加 options.MaxFunctionEvaluations 的值来解决这个问题。

例如,如果你使用的是 Python 的 scipy.optimize.minimize 函数,你可以这样修改:


from scipy.optimize import minimize

# 定义你的目标函数和初始参数
def objective_function(x):
    # ...
    
# 设置最大函数评估次数
options = {'maxiter': 6000}

# 调用 minimize 函数进行优化
result = minimize(objective_function, initial_guess, options=options)

在这个例子中,options['maxiter'] 就是设置的最大函数评估次数。将其设置为一个更大的值,就可以避免 "求解器过早停止" 这个错误。