Multiplying a function stored in a function handle by a constant

조회 수: 15 (최근 30일)
fBasis = { @(x)sin(x) , @(x)sin(2*x) , @(x)sin(3*x) }
p = [2, 0, 0.5] end code
Your function would return the handle to a function that computes y = 2sin(x) + 0.5sin(3x).
How would you do something like this? I know it is not possible to multiply a function handle by a contant and for this poblem, I do not know what kinds of functions will be inputted in the array fBasis. Yes this is a small portion of a homework question but we are allowed to ask for help. A nudge in the right direction about how to start this would be very much appreciated.

채택된 답변

Adam Danz
Adam Danz 2019년 11월 24일
편집: Adam Danz 2019년 11월 24일
One approach would be to get the outputs to your fBasis functions and then multiply by p as you describe in your question. Here's a demo of that method.
x = 1:10; % Can be a vector, matrix, n-d array, etc.
vals = cellfun(@(f,p)p*f(x(:)),fBasis,num2cell(p),'UniformOutput',false);
y = reshape(sum(cell2mat(vals),2),size(x));
Another approach would be to add the p factors into your functions by converting the function handles to char arrays, factoring in the p values, combining all 3 function strings, and then converting back to an anonymous function.
Here are the assumptions that need to be met.
  • all anonymous function inputs are @(x)
  • all p factors are scalars
  • There is 1 p factor for each anonymous function.
% Input (from the question)
fBasis = { @(x)sin(x) , @(x)sin(2*x) , @(x)sin(3*x) };
p = [2, 0, 0.5];
% Convert to char arrays, remove @(x) and add the factors in p
fStr = cellfun(@(f,c) strrep(func2str(f),'@(x)',...
sprintf('%.5g*',c)),fBasis,num2cell(p),'UniformOutput',false);
% Combine all equations with +
fstrLong = strjoin(fStr,' + ');
% Convert back to an anonymous function
finalFunc = str2func(['@(x)',fstrLong]);
% Test it
x = 1:10; % row vector input
y = finalFunc(x)
x = (1:10)'; % Column vector input
y = finalFunc(x)
x = magic(5); % matrix input
y = finalFunc(x);

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Graphics Object Programming에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by