How can I nest a function in a function?

3 次查看(过去 30 天)
function AD = AD(n)
A = zeros(n);
for i=1:n
for j=1:n
A(i,j) = 1/(i+j-1);
end
end
Ainv = A\eye(n);
Eye = eye(n);
AD = Eye-Ainv*A;
end
function A = hilbert(n)
A = zeros(n);
for i=1:n
for j=1:n
A(i,j) = 1/(i+j-1);
end
end
end
I want to nest hilbert function in AD function, since hilbert is actually in AD. But I am getting "Unrecognized function or variable 'A'" error. What can I do here?

采纳的回答

Fangjun Jiang
Fangjun Jiang 2022-10-13
MyAD=AD(3)
MyAD = 3×3
1.0e-13 * 0 0 0.0089 -0.0711 0 0 0.1421 0.0711 0.0711
function AD = AD(n)
A = hilbert(n);
Ainv = A\eye(n);
Eye = eye(n);
AD = Eye-Ainv*A;
end
function A = hilbert(n)
A = zeros(n);
for i=1:n
for j=1:n
A(i,j) = 1/(i+j-1);
end
end
end
  2 个评论
Fangjun Jiang
Fangjun Jiang 2022-10-13
To be clear, hilbert(n) here is a 'local function'. There is no need to make it a 'nested function' based on its content.
See documents for their differences.
I think 'local function' is more suitable in this case.

请先登录,再进行评论。

更多回答(1 个)

John D'Errico
John D'Errico 2022-10-13
编辑:John D'Errico 2022-10-13
See that I wrote hilbert differently. Feel free to use doubly nested loops there. But why?
As well, NEVER name a function the same thing as a variable in that function!!!!!!!!! NEVER. NEVER. Having said that three times, it must be true. You named the function AD, then returned a variable named AD. A BAD idea.
ComputeAd(5)
ans = 5×5
1.0e-11 * 0.0171 0 -0.0071 -0.0099 -0.0099 0.0909 0.0455 0.1592 0.1137 0.1137 -0.3638 -0.3638 -0.1819 -0.1819 -0.3638 0.7276 0.3638 0.3638 0.3638 0.5457 -0.1819 -0.0909 -0.0909 -0.1819 -0.2728
It works.
function AD = ComputeAd(n)
A = hilbert(n);
Ainv = A\eye(n);
Eye = eye(n);
AD = Eye-Ainv*A;
function A = hilbert(n)
[i,j] = meshgrid(1:n);
A = 1./(i+j-1);
end
end
  3 个评论
VBBV
VBBV 2022-10-13
编辑:VBBV 2022-10-13
Check with
ComputeAd(5)
Matlab is case senstive. You might have used
ComputeAD(5)
This is different function and not present in code you copied
John D'Errico
John D'Errico 2022-10-13
Yes. You tried to call ComputeAD, but I named the function ComputeAd. Sorry about my choice of names.
Case sensitivity triumphs there. MATLAB told you it could not find that function, the clue you needed.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Line Plots 的更多信息

产品


版本

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by