【发布时间】:2015-05-24 07:13:35
【问题描述】:
我正在解决一个非常大的优化问题。目标函数和约束函数需要大量数据。目前我正在将数据作为结构传递给他们。
myFS(X, Dat, g_Index, f_Index) % Dat is a structure which includes many variables
您认为这是减少经过时间的有效方法吗?
还有什么更好的选择?
关于类定义,这就是给定答案的含义吗?
%% First we define the class in a separate file:
classdef myDataStructure < handle
properties
NRES;
NOBJ;
NVAR;
end
methods
function obj = myDataStructure()
end
end
end
%% In another file where the main program is, we initialize the class.
Dat = myDataStructure();
%% Initialize
Dat.NRES = 1;
Dat.NOBJ = 1;
Dat.NVAR = 1;
[myF, Dat_updated] = BBB(Dat);
%% Here we define the function and use the class
function [f, CalssDat] = BBB(CalssDat)
x = CalssDat.NRES;
y = CalssDat.NOBJ;
z = CalssDat.NVAR;
f = x + y + z;
CalssDat.NOBJ = 2;
end
【问题讨论】:
-
是的,我的回答是这个意思。只需记住一件事:在您的行中,
[myF,Dat_updated]=BBB(Dat);、Dat_updated和Dat将是相同的(即它们的ClassDat.NOBJ等于2) -
那很好。我将把它应用到我的方法上。谢谢@TamásSzabó
-
@TamásSzabó 我将您的方法应用于我的问题,但它并没有减少
CPU time。我使用Dat Struct的初始代码需要262秒,使用此类定义需要302 sec。我试图在课堂上和课堂外的另一时间初始化 Dat,但仍然需要302 sec。我还应该说,我使用的Dat struct几乎是巨大的,它通过了许多功能并进行了更新。但是Dat struc似乎仍然比它的class版本更有效。
标签: matlab function optimization parameter-passing