sum of function handle
2 次查看(过去 30 天)
显示 更早的评论
Dear all, i have the following function:
sum_{1<=i<j<=n}(X_i-X_j)
and i need to write it as function handle. Can anyone help me please. Best regards.
4 个评论
Guillaume
2015-12-15
Your function does not appear to be the same thing at all as the expression you wrote in your question. Why is there a third iterator k, why is there a square ^2 and later a square root sqrt ?
回答(3 个)
Guillaume
2015-12-15
"I need to write it as function handle". Why do you need it? As Adam says, work it out as a normal function.
Anyway:
sumdiff = @(x) sum(diff(x(nchoosek(1:numel(x), 2)), [], 2)); %assume x is a vector
The way this works:
- nchoosek returns all the possible combinations of i and j that satisfy 1<=i<j<=n
- these combinations are use to index the original array as two columns, x(i) in the first column, x(j) in the second
- diff calculates the difference between the 2nd and 1st column
- sum sum all the differences
4 个评论
Adam
2015-12-15
编辑:Adam
2015-12-15
You can include anything you like in a handle function if it isn't an anonymous function.
You literally just define your function and then use function handle syntax to create a handle to it. The function could be 5000 lines long if you really want (obviously not advisable!), e.g.
function s = sumdiff(x)
...
end
f = @(x) sumdiff(x)
s = f(x);
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Data Type Identification 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!