Anonymous function from for loop
8 次查看(过去 30 天)
显示 更早的评论
Hello, I am having trouble creating an anonymous function matrix using a for loop. My code looks like this:
n=4; %Or w/e number. Could be 100.
for i = 1:n
f{i,1} = @(x) (x.^i).*(1-x)
end
The output is this:
f =
@(x)(x.^i).*(1-x)
@(x)(x.^i).*(1-x)
@(x)(x.^i).*(1-x)
@(x)(x.^i).*(1-x)
The problem is that the "i" is not changing. It should look like this:
f =
@(x)(x.^1).*(1-x)
@(x)(x.^2).*(1-x)
@(x)(x.^3).*(1-x)
@(x)(x.^4).*(1-x)
Any ideas? Also, I will later have to take the derivative of each row. Is there a simple way to do it? Like this maybe:
derivative(1) = der(f{1})
derivative(2) = der(f{2})
Thanks in advance!
0 个评论
采纳的回答
Sean de Wolski
2014-10-28
编辑:Sean de Wolski
2014-10-28
Although it is showing i, as the variable, this is actually hardwired to the numeric value.
for ii = 1:n
feval(f{ii},pi)
end
Yields:
ans =
-6.7280
ans =
-21.1367
ans =
-66.4028
ans =
-208.6106
In order to see the value for the captured variables in the anonymous function, you can use functions
fns = functions(f{1})
fns.workspace{1}
In order to take the derivative analytically, I would use Symbolic Math and syms
syms x ix
f = (x.^i).*(1-x)
f =
-x^4*(x - 1)
diff(f,x)
ans =
- 4*x^3*(x - 1) - x^4
0 个评论
更多回答(1 个)
Gethal
2014-10-28
2 个评论
Sean de Wolski
2014-10-28
You can multiply the output of anonymous functions
f(1)*f(2)
But since the function requires an input, multiplying it directly doesn't work. It sounds to me like the symbolic approach is the best for your overall use case. Solve everything symbolically and then subs in the values when you need them.
另请参阅
类别
在 Help Center 和 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!