【问题标题】:Refresh part of a plot during fminsearch optimization在 fminsearch 优化期间刷新部分绘图
【发布时间】:2020-09-11 12:31:29
【问题描述】:

我遇到了一个问题,需要在 fminsearch 的每次迭代中更新部分绘图。

总之,在我的“main_optimization”文件中,我有这部分代码,旨在绘制要由我的模型拟合的实验数据。这是我想在整个过程中保留的情节:

figure (1)

subplot(1,3,1)
plot(Pexp,Rexp(:,1),'ro',Pexp,Rexp(:,2),'go',Pexp,Rexp(:,3),'bo');
xlabel('P/MPa');
ylabel('\rho /mol.L^{-1}');

subplot(1,3,2)
plot(Pexp,Aexp(:,1),'ro',Pexp,Aexp(:,2),'go',Pexp,Aexp(:,3),'bo');
xlabel('P/MPa');
ylabel('\alpha /K^{-1}');

subplot(1,3,3)
plot(Pexp,Kexp(:,1),'ro',Pexp,Kexp(:,2),'go',Pexp,Kexp(:,3),'bo');
xlabel('P/MPa');
ylabel('k_{T} /K^{-1}');

然后我调用 fminsearch 来优化我的模型,并在我的目标函数文件中执行以下操作,目的是从先前的迭代中删除模型结果并绘制新的结果。

if ishandle(plotRHO)==1
    delete(plotRHO);
end
if ishandle(plotALFA)==1
    delete(plotALFA);
end
if ishandle(plotKAPPA)==1
    delete(plotKAPPA);
end

subplot (1,3,1)
hold on
plotRHO=plot(Pexp,rhocalc(:,1),'r-',Pexp,rhocalc(:,2),'g-',Pexp,rhocalc(:,3),'b-');
legend(num2str(AAD_RHO),'Location','southeast');
hold off

subplot (1,3,2)
hold on
plotALFA=plot(Pexp,apcalc(:,1),'r-',Pexp,apcalc(:,2),'g-',Pexp,apcalc(:,3),'b-');
legend(num2str(AAD_AP),'Location','southeast');
hold off

subplot (1,3,3)
hold on
plotKAPPA=plot(Pexp,ktcalc(:,1),'r-',Pexp,ktcalc(:,2),'g-',Pexp,ktcalc(:,3),'b-');
legend(num2str(AAD_KT),'Location','southeast');
hold off

我尝试了不同的东西,比如在主文件中使用初始图或 {} 初始化 plotRHO、plotALFA、plotKAPPA,然后将它们作为目标函数的输入,这样我就可以避免在第一次迭代中出错ishandle 函数。 当我这样做时,它会删除第一个绘图并绘制第一次迭代的线,但它不会再次绘图也不会删除旧的,因为句柄始终为 0(我认为它不应该)。

如果我删除 ishandle 并删除它们,因为我知道它们存在,它们不会删除任何内容,并且会显示警告说找不到对象。

在我的目标函数的每个函数评估中始终保留我的实验点并仅更新模型结果的最聪明的方法是什么?它要么继续绘制每一行(并且当我由于(内存问题?)而停止程序时才打开图形,或者只是第一次绘制然后从不更新或删除,尽管程序正在优化..

提前感谢您的帮助,

最好的问候

PS:很抱歉发了这么长的帖子

更新:我真的不明白为什么,但如果我在目标函数文件的开头将 plotRHO、plotALFA 和 plotKAPPA 定义为全局变量,删除和重新绘制将按我的意愿工作。但据我所知,应该避免使用全局变量,当然在这种情况下它们也可以使用

【问题讨论】:

  • 使用 drawnow 强制 MATLAB 立即执行绘图
  • 谢谢,但这只能解决等到最后剧情的问题。主要问题是在为新功能评估绘制模型结果之前删除旧模型结果,同时保留实验结果。
  • 只需绘制实验数据和新的模拟数据并致电drawnow。我没有发现问题
  • 我只是想要一个解决方案,我不想在每次迭代中都绘制实验数据。但只需在主文件中绘制一次并在整个过程中保留它。我知道我可以通过将 plotRHO plotKAPPA 和 plot ALFA 定义为全局变量来解决这个问题。我只是不明白为什么,我确信有一种方法可以在不使用全局变量的情况下做到这一点。
  • 比使用hold on

标签: matlab optimization plot graph-visualization fminsearch


【解决方案1】:

实际上,我通过将 plotRHO 、 plotKAPPa 和 plotALFA 设置为我有目标函数的文件中的全局变量来解决我的问题。 我确信应该有更聪明的方法来避免使用全局变量,但我没有设法得到它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 2019-01-10
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    相关资源
    最近更新 更多