我有两个功能:
x = seq(0, 3, len = 100)
y1 = function(x){
x^2 -2*x +2
}
y2 = function(x){
-4*x + 1
}
为了找到两个函数之间的插值,得到插值函数的正值,我知道
(1-z)*y1(x) + z*y2(x) = 0
(1-z)*y1'(x) + z*y2'(x) = 0
然后我知道z = y1(x)/(y1(x)-y2(x))所以我得到了
2*x^3-10*x^2+16*x-12 = 0
我使用R来查找上述函数的根:
> polyroot(c(-12, 16, -10, 2))
[1] 1+1i 1-1i 3+0i
或
x = uniroot(function(x)2*x^3 -10*x^2+16*x-12, lower= 0, upper = 3)
$root
[1] 3
$f.root
[1] 0
$iter
[1] 0
$estim.prec
[1] 0
然后
z = (x^2 - 2*x +2)/ (x^2+2*x+1)
> z
[1] 0.3125
y3 = function(x){(1-z)*(x^2-2*x+2) + z*(-4*x+1)}
y3(x)
但是y3(x)仍然是负面的部分,我该如何解决这个问题呢?
答案 0 :(得分:0)
首先,您问题中某些代码的精简版。
x = seq(0, 3, len = 100)
y1 = function(x) x^2 -2*x +2
y2 = function(x) -4*x + 1
z = function(x) y1(x)/(y1(x)-y2(x))
现在有一些可视化的绘图。
plot(x,y1(x),ylim=c(-12,5),type="l",ylab="y")
lines(x,y2(x),col="blue")
lines(x,z(x),col="red")
abline(h=0,v=0,col="gray")
legend("bottomleft",c("y1(x)","y2(x)","z(x)"),fill=c("black","blue","red"))
由于你的y3(x)函数仍然是负数的原因,我认为这更像是一个数学问题,而不是一个编程问题。绘制y3(x),我确实看到它们有许多负值。我对你问题的其他部分不太清楚,所以我不确定如何解决你问题的这一部分。