How to import array into fsolve function

For asking my question I desined a very simple function:
function F = solve(x,a)
F(1) = x(1)-a;
F(2) = x(2)-3;
end
I want to solve the above function with fsolve function for an array (I know that the above function is super simple but I want to find out how to solve using fsolve for an array)
a = [1, 2];
fun = @(x)solve(x,a);
x0 = [1, 1];
x = fsolve(fun, x0)
When a is not a matrix, there is no problem but when a would be a = [1, 2] or any other matrix there is an error.
Could we do it using matlab?
The problem can be solved like the following using a for loop but can I do it without for loop?
a = [1, 2];
for i=1:2
fun = @(x)solve(x,a(i));
x0 = [1, 1];
x = fsolve(fun, x0)
x1(i) = x(1)
x2(i) = x(2)
end

Answers (1)

You have three choices:
  • for loop
  • hidden for loop using arrayfun (convenient)
  • redesign the way you create your function to be able to effectively calculate a number of different functions at the same time, and then use a single fsolve call.
For example you could pass in a vector of a values and use something like
F = [x(2) - 3;
x(:) - a(1:7);
3*x(6:7) + x(2:3) - a(8:9)]
and so calculate a number of different things in parallel.

1 Comment

octa
octa on 16 Feb 2022
Edited: octa on 16 Feb 2022
Thanks, but I can't understand your code. The second and third line are not clear (I only have x(1) and x(2) but you tried to consider x as 1*7 dimension, and a as 1*9 dimension
and
how can I do it using "arrayfun"?

Sign in to comment.

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Asked:

on 16 Feb 2022

Edited:

on 16 Feb 2022

Community Treasure Hunt

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

Start Hunting!