最近事情比较少,无聊的时候就会搞点小事情,最近在琢磨这自定义个函数解方程。平时调包习惯了,偶尔也回归到原始的原理去加以理解,不说了,上代码:
解一元方程(二分法)
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