目前我在Secant方法上做了一個代碼,到目前爲止代碼運行正常。 但是,我仍然需要通過計算我在「割線」函數中使用的函數調用數來更新我的「count.funcCount」。我應該如何修改我的代碼?MATLAB - 如何計算函數調用次數
這是我到目前爲止的代碼:
function [ root, fcneval, count ] = secant(f, x0, x1, my_options)
my_options = optimset('MaxIter', 50, 'TolFun', 1.0e-5);
count = struct('iterations',0,'funcCount',0,'message',{'empty'});
xp = x0; %# Initialize xp and xc to match with
xc = x1; %# x0 and x1, respectively
MaxIter = 100;
TolFun = 1.0e-5;
%# Secant Method Loop
for i = 2:MaxIter
fd = f(xc) - f(xp); %# Together, the ratio of d and fd yields
d = xc - xp; %# the slope of the secant line going through xc and xp
xn = ((xc * fd) - (f(xc) * d))/fd; %# Secant Method step
if (abs(xc - xn) < TolFun) && (abs(f(xn)) < TolFun) %# Stopping condition
break;
elseif i > MaxIter %# If still can't find a root after maximum
%# 100 iterations, consider not converge
count.message = sprintf('Do not converge');
end
xp = xc; % Update variables xc and xp
xc = xn;
end
%# Get outputs:
root = xn;
fcneval = f(root);
count.iterations = i;
end %# end function
---------------------------------------
function [f] = fun(x)
f = cos(x) + x;
end
請幫幫我,謝謝你提前
你知道了Matlab'profile'命令不好嗎? – 2012-07-11 06:21:28
函數調用什麼?任何事情?你最終的目標是什麼? – Dan 2012-07-11 07:10:45
使用profiler,Luke! – 2012-07-11 08:38:42