r语言中popsd和sd的区别_R语言中也可以帮你解方程

d1dabe775f15737bd1c361daa09df93d.gif

方程的求根大家应该在高中就已深入骨髓,今天给大家介绍下在R语言中如何实现方程的求根以及方程中参数的确定。我们需要借助R包rootSolve开始我们的教程。包的安装就不再赘述了。直接进入主题,在此包中求根函数涉及以下三个:

1. uniroot 求一个方程式的一个根。

c2841b69e0c5ca7650cf6876939ceeb8.png

其中主要的参数是extendInt,在指定范围无法获得相对应的根时,可以利用此参数进行扩展x上下限从而得到对应的根。默认是no,如果我们不确定我们的根是否在我们填写的范围,那么可以设置本参数为yes。

我们来看下实例:

f1 function(x) (121 - x^2)/(x^2+1)f2 functiontry(uniroot(f1, c(0,10)))try(uniroot(f2, c(0, 2)))

ec243e4c9cb69d2dbcb1211c1bdee9ab.png

u1 0,u2 0,

64d17f9988bf1b9482a11f6a3ae452c5.png

2. polyroot 求一个带有复杂参数多项式的根。比如f(x)=z1+z2*x+z3*x^2+…+zn*x^(n-1)。

只需要将所有的参数按照x的排序逐渐增大的顺序将参数以次输入函数即可得到对应的f(x)=0的根。

3. multiroot 求多个方程集合的根。

ad791e868b4b4ecf006e94ecbc71de41.png

其中主要的就是model构建以及parms参数的输入。

来看下下面的实例:

#构建模型model2function(x, parms)      c(F1 = x[1] + x[2] + x[3]^2 - parms[1],        F2 = x[1]^2 - x[2] + x[3] - parms[2],        F3 = 2 * x[1] - x[2]^2 + x[3] -parms[3]) # 求解parmscmultiroot(model2,c(1, 1, 1), parms = parms)

cd06cdf7ae4ed2e52f3123f84d7ef922.png

#处理parms求解multiroot(model2, c(0, 0, 0), parms = parms*2)

e0297186f805203fe251b4f1117b8d4b.png

以上结果中:

Root指的方程根的位置的x的值;

f.root指的方程根位置的y值。

Iter指的迭代的次数。

Estim.pricis指的评估的精准度,主要指的f.root的绝对值的均值

在后期的更新之后此包具有了获取系数值的功能,涉及两个函数

4. runsteady 动态计算参数直至其导数不再发生变化。

0ddb27e81138118e0a670e4b777a50f5.png

具体的应用直接看实例:

58f5a94bae602fc615a277535410e4eb.png

#构建模型model pars) { with(as.list(c(y, pars)),{   Min      = r*OM  oxicmin  = Min*(O2/(O2+ks))  anoxicmin = Min*(1-O2/(O2+ks))* SO4/(SO4+ks2)   dOM  =Flux - oxicmin - anoxicmin  dO2  =-oxicmin -2*rox*HS*(O2/(O2+ks)) + D*(BO2-O2)  dSO4 = -0.5*anoxicmin +rox*HS*(O2/(O2+ks)) +D*(BSO4-SO4)  dHS  =0.5*anoxicmin -rox*HS*(O2/(O2+ks)) + D*(BHS-HS)   list(c(dOM, dO2, dSO4, dHS), SumS = SO4+HS)})}#参数的设置pars c(D = 1, Flux = 100, r = 0.1, rox = 1,          ks = 1, ks2 = 1, BO2 = 100, BSO4 = 10000, BHS= 0) #需要计算的参数y #计算print(system.time(  ST2 ))

438bdb90aad550868454da74dc88aed9.png

stode, stodes, steady,steady.1D, steady.2D, steady.3D, 和 steady.band函数都是基于牛顿迭代法获取对应的参数值。

其中stode和stodes的用法一样,其有时候和runsteady有同样的效果,区别就是为了适应生物学的方程stode和stodes函数有一个关键的参数pos可以保证参数的正性:

print(system.time(  ST <- stode(y = y, func = model, parms =pars, pos = TRUE)))

有结果可以看到具有一定的一致性。

575cd985abeb6f8e3326396fd94e7c7c.png

steady.1D, steady.2D, steady.3D主要是针对1维,2维,3维偏微分方程的求解。

53a11cfd0534731db0ab162c98db9b3e.png

这一块我也是一头雾水,那位大神懂的可以留言,让大家都膜拜膜拜af68b1809da131dddc0b52251b0b4f2b.pngc3e001b7f1c13e5778e6d1e21eaca6f1.png

欢迎学习交流!

6e7383b65b336e58405a912a899468c9.png

fc0e979b07a08d22019c0c9283d9ded9.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值