Can you help me find the mistake in my Matlab code?
2 次查看(过去 30 天)
显示 更早的评论
I use Matlab to find the optimal number of wells, however when I run the file of Optimization.m, it seems not work. I don't know where it is wrong. I have checked my functions, they are correctly, but when I set direct number to NPV.m, it run too slow. So, can you help me find my mistake in Optimization.m as the attached file and how to improve speed of process
6 个评论
Geoff Hayes
2016-1-10
Tien - are you sure that the data you are reading from each column corresponds to the variable that you are reading it into to? And that the units are the same? For example, your RFpl (recovery factor at end of plateau) has values between 30 and 70 (from the VariableSet.xlsx file, but your example from Tfigure43.m assigns 0.5 to this same variable. Does this mean that the wrong column from the Excel file is being assigned to this variable or has it not been converted correctly? Please verify that the data in the file is correct and that you are reading each column correctly.
As for performance, look at the following lines from Optimization.m
if NPV(j, OGIP, PGi, C, n, Pwh, ID, depth, cost, price, rate, RFpl) <= 0
wellCountOpt = 0;
npvOpt = 0;
wellCountNPV(i,:) = [wellCountOpt,npvOpt];
else
delta = 10;
npvOld = NPV(j, OGIP, PGi, C, n, Pwh, ID, depth, cost, price, rate, RFpl);
npvNew = NPV(j+delta, OGIP, PGi, C, n, Pwh, ID, depth, cost, price, rate, RFpl);
diff = npvNew - npvOld;
% etc.
Note that in the if condition you call
NPV(j, OGIP, PGi, C, n, Pwh, ID, depth, cost, price, rate, RFpl)
and if this isn't zero, then we calculate this again for npvOld in the else block. Rather than doing this twice, just do it the once as
npvResult = NPV(j, OGIP, PGi, C, n, Pwh, ID, depth, cost, price, rate, RFpl);
if nvpResult <= 0
% do something
else
delta = 10;
nvpOld = nvpResult;
% etc.
end
The same can be applied to your Tfigure43.m file which duplicates calls to this function.
采纳的回答
Geoff Hayes
2016-1-10
Requested that Tien verify that the data being read from each column was correct with respect to units and variable descriptions. Pointer out that the RFpl (recovery factor at end of plateau) has values between 30 and 70 (from the VariableSet.xlsx file), but that the example from Tfigure43.m assigned 0.5 to this same variable.
Tien verified that the data in the column was incorrect (percentages rather than the decimal equivalent).
0 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 MATLAB Support Package for Arduino Hardware 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!