Anonymous functions and integration
古いコメントを表示
I want to integrate an anonymous function but be able to manipulate it first. For example
f = @(x) [x -x sin(x)];
r = integral (f'*f, 0, 1, 'ArrayValued', true);
This isn't possible. I would have to define a new function but this isn't flexible. Any alternatives to directly manipulate f?
1 件のコメント
Either
r = integral (@(x)f(x)'*f(x), 0, 1, 'ArrayValued', true);
or
g = @(x)f(x)'*f(x) ;
r = integral (g, 0, 1, 'ArrayValued', true);
but that's what you call defining a new function I guess.
採用された回答
その他の回答 (1 件)
Mike Hosea
2013 年 4 月 22 日
MATLAB files can be flexible when they are combined with the use of anonymous functions. Anonymous functions can also be supplied as parameters to anonymous functions. The example given can be handled with simple nesting:
f1 = @(x)[x -x sin(x)]
f2 = @(x)x'*x;
g = @(x)f2(f1(x));
r = integral (g, 0, 1, 'ArrayValued', true);
More cleverness may be required in some cases, I guess. You can extend f2 to accept multiple inputs based on x or nest deeper, constructing what amounts to an evaluation tree to minimize redundant computations. -- Mike
2 件のコメント
Jim
2013 年 4 月 22 日
Mike Hosea
2013 年 4 月 22 日
編集済み: Mike Hosea
2013 年 4 月 22 日
I expect no significant difference on a simple function like this. It should be more valuable if the real f1 is rather expensive to evaluate or if the real f2 involves many uses of the input rather than just a pair. I didn't intend my response to be so much a competing answer to Kye's as a response to your concern with his solution. I probably should have made it a comment under his answer.
カテゴリ
ヘルプ センター および File Exchange で Loops and Conditional Statements についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!