如何在r中使用基于矩阵的函数的多重根
我有一个必须以矩阵形式调用的函数。我曾尝试使用包如何在r中使用基于矩阵的函数的多重根,r,math,R,Math,我有一个必须以矩阵形式调用的函数。我曾尝试使用包rootSolve中的multiroot来计算根,但根本不起作用。有没有一种方法可以重新定义下面的函数,或者有没有另一种基于牛顿-拉斐逊技术的方法 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),
rootSolve
中的multiroot
来计算根,但根本不起作用。有没有一种方法可以重新定义下面的函数,或者有没有另一种基于牛顿-拉斐逊技术的方法
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)
库(rootSolve)
f将其包装在执行转换的外部函数中。由于问题已更改,请注意,我们使用了结尾处注释中显示的原始数据
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将其包装在执行转换的外部函数中。由于问题已更改,请注意,我们使用了结尾处注释中显示的原始数据
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您的函数没有解决方案。您可以看到,函数值表达式中的分子是相同的,并且在给定m
的值时始终为正。
因此,您试图求解exp(q[,1])*m[1]=0
和exp(q[,2])*m[2]=0
。
这是不可能的,因为exp(…)
总是大于零
如果您尝试为q
使用不同的起始值,您将得到不同的答案。您的函数没有解决方案。您可以看到,函数值表达式中的分子是相同的,并且在给定m
的值时始终为正。
因此,您试图求解exp(q[,1])*m[1]=0
和exp(q[,2])*m[2]=0
。
这是不可能的,因为exp(…)
总是大于零
如果您尝试为q
使用不同的起始值,您将得到不同的答案。我刚刚注意到它,并对其进行了编辑。但同样地,exp
只涵盖q的
。我的意思是(exp(q[,1])
。我希望这在更正后更有意义。我刚刚注意到了它,并对它进行了编辑。但是exp
只涵盖q的
。我的意思是(exp(q[,1])
。我希望这在更正后更有意义t()
do?我以为它可能在做转置,但我没有得到我预期的结果。我预期第一个函数的结果是-0.13353114,0.6931472
,第二个函数的结果是0.2719337,0.4054651
。但我也注意到当c(1,2)时,我得到了类似的结果
第一个函数替换为c(1,3)
。第二个函数c(3,3)
替换为c(2,3)
。显然是一些转置。t(x)
是x的转置。对于纯向量,它与矩阵(x,1)
相同。注意多根(函数(q)f(t(q),m),c(1,1))$f.root
,是c(0,0)
使用问题中的f
和m
转换为6位数字。你不会像另一个答案中所解释的那样得到精确的零,即两个正数的比率不能为零,而且即使解存在,也只能期望解达到数值近似。我实际上编辑了问题,但很快当我这样做的时候,我收到了一个错误。我对q
的预期解决方案是q我从你的解释中意识到的另一件事。q
是一个矩阵,得到它的转置会改变一切。如果它是一个向量,就不会有任何问题。如果你改变问题,那么你需要改变答案来对应。如果f和m是a修改后的问题中的s和q是您评论中显示的矩阵,然后使用multiroot(函数(q)f(矩阵(q,2),m),q)
什么是t()
do?我以为它可能在做转置,但我没有得到我预期的结果。我预期第一个函数的结果是-0.13353114,0.6931472
,第二个函数的结果是0.2719337,0.4054651
。但我也注意到当c(1,2)时,我得到了类似的结果
第一个函数替换为c(1,3)
。第二个函数c(3,3)
替换为c(2,3)
。显然是一些转置。t(x)
是x的转置。对于纯向量,它与矩阵(x,1)
相同。注意多根(函数(q)f(t(q),m),c(1,1))$f.root
,是c(0,0)
使用问题中的f
和m
转换为6位数字。你不会像另一个答案中所解释的那样得到精确的零,即两个正数的比率不能为零,而且即使解存在,也只能期望解达到数值近似。我实际上编辑了问题,但很快当我这样做的时候,我收到了一个错误。我对q
的预期解决方案是q我从你的解释中意识到的另一件事。q
是一个矩阵,得到它的转置会改变一切。如果它是一个向量,就不会有任何问题。如果你改变问题,那么你需要改变答案来对应。如果f和m是a修改后的问题中的s和q是您评论中显示的矩阵,然后使用多根(函数(q)f(矩阵(q,2),m),q)