1. ホーム
  2. matlab

[解決済み】「名前が重複する関数は定義できません」エラーが出るが、重複する関数はない。

2022-02-05 17:54:09

質問内容

Matlabで勾配降下の関数を書こうとして、次のようなエラーが発生しました。 Function with duplicate name "gradientDescent" cannot be defined . 私が取り組んでいるプログラムには2つの関数があり、2つ目の関数を削除すると問題が解消されます。2つの関数は全く違う名前なのに、なぜこのようなことが起こるのか理解できません。以下はそのコードです。

function dJ = computeDerivative(X, y, theta, feature)
m = length(y); % number of training examples
hypothesis = X * theta;
error = ((hypothesis - y) / m) .* X(feature, :)
dJ = sum(error);    
end

function theta = gradientDescent(X, y, theta, alpha, num_iters)
%GRADIENTDESCENT Performs gradient descent to learn theta
%   theta = GRADIENTDESENT(X, y, theta, alpha, num_iters) updates theta by 
%   taking num_iters gradient steps with learning rate alpha

m = length(y); % number of training examples    
for iter = 1:num_iters

for i = 1:length(theta)
    theta(i) = theta(i) - alpha * computeDerivative(X, y, theta, i)    
end

end
end

解決方法は?

MATLABの関数を作成する場合、各関数は別々のファイルに記述し、各ファイルの名前は関数名と同じにする必要があります。しかし、メインファイルがあり、ローカル関数が必要な場合、同じファイルにローカル関数を書くことができますが、メイン関数だけがその関数にアクセスすることができます。この場合、computeDerivativeがメイン関数で、gradientDescentがローカル関数になります。