首页 > 解决方案 > 如何在 r 中使用 multiroot 和基于矩阵的函数

问题描述

我有一个必须以矩阵形式调用的函数。我曾尝试使用multirootfrom packagerootSolve来计算根,但它根本不起作用。有没有一种方法可以重新定义下面的函数,或者是否有另一种基于 Newton-Raphson 技术的替代方法?

library(rootSolve)

  f <- function(q,m){
      c(F1 = 12 * ((exp(q[, 1]) * m[1])/(exp(q[, 1]) * m[1] + exp(q[, 2]) * m[2] + m[3])) - c(1,2),
        F2 = 12 * ((exp(q[, 2]) * m[2])/(exp(q[, 1]) * m[1] + exp(q[, 2]) * m[2] + m[3])) -c(3,3))
    }
    m = c(0.1,0.2,0.7)

标签: rmath

解决方案


将其包装在执行转换的外部函数中。由于问题已更改,请注意我们使用末尾注释中显示的原始数据。

multiroot(function(q) f(t(q), m), c(1,1))

给予:

$root
[1] -14.67979 -14.67979

$f.root
          F1           F2 
5.618059e-06 1.123612e-06 

$iter
[1] 13

$estim.precis
[1] 3.370836e-06

笔记

f 和 m 假定为:

库(rootSolve)

f <- function(q,m){
  c(F1 = 12 * ((exp(q[, 1]) * m[1])/(exp(q[, 1]) * m[1] + exp(q[, 2]) * m[2] + m[3])),
    F2 = 12 * ((exp(q[, 2]) * m[2])/(exp(q[, 1]) * m[1] + exp(q[, 2]) * m[2] + m[3])))
}
m = c(1,0.2,0.9)

推荐阅读