How to turn a function handle with 3 inputs (1 variable and 2 parameters) and then assign the inputs parameters and get a function handle with one input? ?
4 ビュー (過去 30 日間)
回答済み: Jeff Miller 2022 年 1 月 15 日
Consider the following
Now, I would like to create another function handle which is only a function of x. You migh suggest the following solution:
but this is not what I want since I need to pass g(x) as input to another function and there I want to reduce the computational time. If I follow this solution whenever I call g, say g(1), it needs f, too plus that it does 3 arithmatics (3 sums) but I would like to have 2 arithmatics since g(x)=x+2.
回答 (3 件)
Steven Lord 2022 年 1 月 14 日
Let's look at the actual time difference between the two approaches.
h = @(x) x+2;
Is this really the bottleneck in your code?
I realize that this was probably just a simple example to demonstrate what you're trying to do, so can you show the output of timeit called on a more "realistic" f, g, and h functions from your actual application?
Matt J 2022 年 1 月 15 日
編集済み: Matt J 2022 年 1 月 15 日
Yes, what steps did you take that led you to such a monstrous 100MB mathematical expression? It sounds as if you have done nothing at all to vectorize the operations in your equations, like for example if you had rewritten a large matrix/vector operation in terms of their individual scalar components.
I suggest you show us just the first 20 lines of the expression you're trying to evaluate, so we can get a sense of the problem.
Matt J 2022 年 1 月 14 日
編集済み: Matt J 2022 年 1 月 14 日
But, this is computationally very expensive for my super big expressions.
What if you use the optimize flag?
Jeff Miller 2022 年 1 月 15 日
Not sure I understand the situation, but this sounds to me like a case where an OO approach could be very helpful. Consider:
classdef myFunc < handle
function obj = myFunc() % Constructor
obj.ComputedFromYandZ = 0;
function  = SetNewYandZ(obj,Y,Z) % Compute whatever depends on Y and Z
obj.ComputedFromYandZ = Y + Z;
function Result = ComputeFromX(obj,X) % Compute whatever depends on X with Y and Z fixed
Result = abs( X + obj.ComputedFromYandZ ) ;
% I included abs() here to make a function for fminsearch to
You can then use a function handle to a function that depends only on X (after setting Y and Z), something like this:
myF = myFunc;
% ans -5
% ans 50
Find more on Get Started with Symbolic Math Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!Start Hunting!