在fmincon中使用目标函数和的有效方法是什么?

3次浏览(过去30天)
史蒂文·H
史蒂文·H 2021年8月16日
我准备使用fmincon的目标函数是一个(加权)函数的和,这样程序的用户可以选择所需的目标函数并指定权重因子。首先想到的是将目标函数定义为不同.m文件中定义的函数的和。这样,我以后就可以通过简单地创建一个新函数轻松地添加目标函数。然而,我意识到(更确切地说,我强烈怀疑)经常调用另一个文件中的函数代价很高。
我的问题是 :我上面描述的方法是否合理有效?如果不是,我还能使用什么既简单又高效的方法呢?
我想到的其他方法是
  1. 使用if语句在一个函数中编写所有代码,但这对我来说不是很好;
  2. 使用局部/嵌套函数;还不错,但对我来说,在.m文件中使用多个函数不太好。

接受的答案

马特·J
马特·J 2021年8月16日
编辑:马特·J 2021年8月16日
然而,我意识到(更确切地说,我强烈怀疑)经常调用另一个文件中的函数代价很高。
不,不完全是。如果在一个长for循环中重复调用,可能会出现这种情况,但在这里,用户手动选择一些所需的函数,这可能意味着循环将相当短。
10评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年8月18日
当你有一个 结束 语句,然后生成一个“静态工作空间”。静态工作空间有一个“契约”,被调用的函数不能(不允许)“噗”变量的存在——因此具有静态工作区的函数有更多的优化机会。
例如,当via_mfunc1被自己处理时,它不知道via_mfunc2不会赋值('caller')并在工作空间中搞砸一些事情。静态工作空间表示,任何被调用的函数都将被阻塞。不只是调用函数:如果在静态工作空间中调用脚本,则不允许创建新变量。
...当您可以开始依赖于可以看到的赋值,而不必担心无法看到的赋值时,您就可以编写更紧凑的代码,不必在变量突然有新值或新数据类型时插入检查。
因此,总的来说,带有静态工作区的函数会更高效。但是对于这个测试中使用的简单函数,这可能不会出现。
您可能已经注意到脚本中的函数必须具有匹配 结束 声明……这迫使他们拥有静态的工作空间。只有带有静态工作区的函数才能有嵌套函数和共享变量。

登录评论。

更多答案(0)

s manbetx 845


释放

R2017b

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!