# [R] Using multiroot for root solution for a matrix based function

Berend Hasselman bhh @end|ng |rom x@4@||@n|
Tue Nov 17 20:34:12 CET 2020

```Forgot to send this to R-help.

In a comment  G. Grothendieck provided an answer. Have you tried it?

Define a function f.mod that converts a vector to a matrix like this

f.mod <-  function(q,m) f(matrix(q,2),m)

Then try multiroot with an appropriate starting value

q.start <- rep(0,4)
multiroot(f.mod, q.start, parms=m)

Finally convert the answer provided by multiroot to a matrix.

You can also use other solvers. Such as nleqslv like this

library(nleqslv)
nleqslv(q.start,f.mod,m=m) # uses Broyden
nleqslv(q.start,f.mod,m=m,method="Newton") # uses Newton

The second call of nleqslv uses less iterations that multiroot.

Berend Hasselman

> On 17 Nov 2020, at 09:19, quinter sam <qsam0000 using gmail.com> wrote:
>
> I have a function which is actually an output of another function and I
> therefore cannot change it. I am trying to use *multiroot * from
> package *rootSolve
> * to compute the roots of the function but its not working at all. Is there
> something I am not seeing or is there another alternative that is based on
> Newton-Raphson technique?
>
> library(rootSolve)
> f <- function(q,m){
> c(F1 = 12 * ((exp(q[, 1]) * m)/(exp(q[, 1]) * m + exp(q[, 2]) * m
> + m)) - c(1,2),
> F2 = 12 * ((exp(q[, 2]) * m)/(exp(q[, 1]) * m + exp(q[, 2]) * m +
> m)) - c(3,3))
> }
> m = c(0.1,0.2,0.7)
>
> I am trying to solve for *q* and from based on the given m, I expect
> something like this;
> q <- matrix(c(-0.1335314,0.6931472,0.2719337,0.4054651), nrow=2)
>
> How would I call the multiroot for the function f to hopefully get the
> above results. I thought of using newtonRaphson from package pracma but
> that possibly only handles univariate inputs.
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help