Multiplying anonymous function by a vector

9 visualizzazioni (ultimi 30 giorni)
I'm trying to plot 4 different graphs in respect to 4 different function handles for 10 revolutions using for loop. I've created a function file and a m-file but the error Operator '.*' is not supported for operands of type 'cell' just keeps popping out.
%% Function file
function [x,y] = my_polar(fhandle, N)
th = 0:0.01:2*pi;
for i =0:N-1
x = fhandle.*cos(th);
y = fhandle.*sin(th);
th = th+2*pi;
end
end
%% m-file
f1 = @(th) exp(0.01*th).*sin(5*th);
f2 = @(th) sin(10*th) + 0.15;
f3 = @(th) sin(0.5*th).*(0.85 + sin(th));
f4 = @(th) 10 + sin(2*pi.*th);
fset = {f1;f2;f3;f4};
for i=1:4
subplot(2,2,i);
[x,y] = my_polar(fset(i), 10);
plot(x,y);
title(char(fset(i)));
end

Risposta accettata

Cris LaPierre
Cris LaPierre il 22 Apr 2021
You have defined your function to have an input - th. Therefore, when you use your function handle, you have to supply it an input. Perhaps you meant to do the following?
x = fhandle(th).*cos(th);
The error message about 'cell' is because you add your function handles to a cell array, fset. When you use parentheses to index a cell array, it returns a cell array. Use braces to pass the function handle into the function.
[x,y] = my_polar(fset{i}, 10);
Your final error will be about trying to create a title from the function handle. You might find this answer insightful. You probably want to use func2str. Just be aware that it also does not work with cells.
  1 Commento
Stanley Ka
Stanley Ka il 22 Apr 2021
It worked! Thank you so much. I'm new to programming so I'm still learning a lot of things, but now I know that even different brackets can have so much impact on the entire code. Thanks again for replying so fast!

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Performance and Memory in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by