Create a local system of equations function from a set of anonymous functions
5 views (last 30 days)
Show older comments
Hello,
I have a set of N anounimous functions which are created using this code
equations = {'@(x1,x2)x1.^2+x2-6','@(x1,x2)-2.5.*x1+x2.^2-2'};%Set your equations
N = numel(equations);
f = cell(1,N);
for i = 1:N
f{i} = str2func(equations{i});
end
The thing is, in a later part of the program I would like to use fsolve to solve the system of equation and fsolve requires the a function in this equivalent form:
function F = root2d(x)
F(1) = x(1).^2+x(2)-6;
F(2) = -2.5.*x(1)+x(2).^2-2;
end
where root2d is the function inputted in fsolve. I was wondering if there was a way to create a function in this form from the upper form or a way to use fsolve using the upper form?
Kind regards
0 Comments
Answers (2)
Paul
on 7 Jul 2023
Edited: Paul
on 7 Jul 2023
One approach:
equations = {'@(x1,x2)x1.^2+x2-6','@(x1,x2)-2.5.*x1+x2.^2-2'};%Set your equations
N = numel(equations);
f = cell(1,N);
for i = 1:N
f{i} = str2func(equations{i});
end
F = @(x) cellfun(@(func) func(x(1),x(2)),f)
sol1 = fsolve(F,[2 2])
F(sol1)
[f{1}(sol1(1),sol1(2)) , f{2}(sol1(1),sol1(2))]
0 Comments
Dyuman Joshi
on 7 Jul 2023
Edited: Dyuman Joshi
on 7 Jul 2023
Another approach (Note - requires Symbolic Toolbox)
equations = {'@(x1,x2) x1.^2+x2-6','@(x1,x2) -2.5.*x1+x2.^2-2'};%Set your equations
f = str2sym(equations);
z = matlabFunction(f,"File", "root2d", "Vars",{symvar(f)});
out = fsolve(z,[2 2])
z(out)
0 Comments
See Also
Categories
Find more on 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!