Error declaring and summing array of functions - Cell contents assignment to a non-cell array object

2 views (last 30 days)
I need to sum four functions with common data like this:
TE1 = [180 310 455 600; 0.18 0.25 0.34 0.41];
S = [16.6 19.2 21.7];
eps1 = @(B,bt,n,t)(B * (S(1)^n) / (1 - bt) * t^(1 - bt));
f1m = zeros(4,1);
for i = 1:4
f1m{i} = @(B,bt,n)(((eps1(B,bt,n,TE1(1,i)) - TE1(2,i)) / TE1(2,i))^2);
end
f1 = @(B,bt,n)(sum(f1m(B,bt,n)));
and i get
Cell contents assignment to a non-cell array object.
Error in optim_fi (line 28)
f1m{i} = @(B,bt,n)(((eps1(B,bt,n,TE1(1,i)) - TE1(2,i)) / TE1(2,i))^2);
Can anybody help me solve my problem?

Accepted Answer

Jan
Jan on 26 Mar 2017
Edited: Jan on 26 Mar 2017
f1m was created as double vector:
f1m = zeros(4,1);
Then you need round parenthesis, not curly braces for indexing as in cell arrays:
for k = 1:4
f1m(k) = @(B,bt,n)(((eps1(B,bt,n,TE1(1,i)) - TE1(2,k)) / TE1(2,k))^2);
end
I've replaced i by k, see Answers:i-and-j-as-variable-names
[EDITED] Sorry, the zeros() was the problem, not the assignment:
f1m = cell(4,1);
for i = 1:4
f1m{i} = @(B,bt,n)(((eps1(B,bt,n,TE1(1,i)) - TE1(2,i)) / TE1(2,i))^2);
end
  2 Comments
Denis Perotto
Denis Perotto on 26 Mar 2017
That didn't help
TE1 = [180 310 455 600; 0.18 0.25 0.34 0.41];
S = [16.6 19.2 21.7];
eps1 = @(B,bt,n,t)(B * (S(1)^n) / (1 - bt) * t^(1 - bt));
f1m = zeros(4,1);
for k = 1:4
f1m(k) = @(B,bt,n)(((eps1(B,bt,n,TE1(1,k)) - TE1(2,k)) / TE1(2,k))^2);
end
f1 = @(B,bt,n)(sum(f1m(B,bt,n)));
Result
Conversion to double from function_handle is not possible.
Error in optim_fi_1 (line 6)
f1m(k) = @(B,bt,n)(((eps1(B,bt,n,TE1(1,k)) - TE1(2,k)) / TE1(2,k))^2);

Sign in to comment.

More Answers (0)

Categories

Find more on Creating, Deleting, and Querying Graphics Objects in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!