tip:用R解方程

最近事情比较少,无聊的时候就会搞点小事情,最近在琢磨这自定义个函数解方程。平时调包习惯了,偶尔也回归到原始的原理去加以理解,不说了,上代码:

解一元方程(二分法)

f <- function(x){
  a = 1;b= -2;c = -15
  return(a*x*x + b*x + c)
}#自定义一个一元函数,参数可自己修改
  
sov <- function(m,n){
  if (n-m< 0.00001) {
    print((m+n)/2)
  }#设计好精度,m,n代表区间
  else if (f(m)*f(n)<0) {
   if(f((m+n)/2) == 0){
     print((m+n)/2)
   } 
   else{
     if (f((m+n)/2)*f(m)>0){
       m=(m+n)/2
       sov(m,n)
     }
     else if (f((m+n)/2)*f(n)>0) {
       n=(m+n)/2
       sov(m,n)
     }
   }
  }
}

 p = sov(m = 4,n = 6)#求解在[4,6]间的解
[1] 5

解线性方程组(克莱默法则)

简单介绍下克莱默法则:(图片来着百度)

来自百度
A=matrix(c(3,-5,2,1,
           
           5,-6,2,-3,
           
           8,4,3,6,
           
           5,2,3,1),nrow=4,ncol=4,byrow=T)#定义线性方程组的系数矩阵

B=c(-3,7,2,9)#定义待求解的值

X=sapply(c(1:4),function(i,A,B){
           D1=A      
           D1[,i]=B
           det(D1)/det(A)},  
         A=A,B=B)
#用sapply做循环,将系数矩阵A对应每一列值做替换得到D1矩阵,det()是可求对应行列式的值
 X
[1]  0.8293839  1.2511848  1.5829384 -2.3981043

你可能感兴趣的:(tip:用R解方程)