如何在 R 中绘制没有解析解的方程?
How to plot an equation with no analytical solution in R?
我一直在尝试在 R 中绘制方程。变量固定在(对于本例)a=0.06
、b=-0.01
、i=0
、t=0.005
, r=0.0025
、s=0.015
而我打算改变变量 e
。主要方程中的一些函数是,
等式看起来像这样,
理想情况下,随着 e
的增加,我希望在 Q
和 x
之间绘制一个图。
t = 0.0005
A = 0.06
B = -0.01
r = 0.00025
s = 0.015
i=0
M= function(e) e*A - i*B
N= function(e) t/(1+t*e-t*i)
P= function(e) (s/t)*(1+N(e)*(r+t))
我不知道如何进行。我想创建一个 (e, Q, x) 列表,其中 x 是给定 e
的方程的根,然后可能使用插值然后在 R 中绘制 (Q, x)。
有没有更直接的方法来绘制 x 与 Q 的关系图?如果没有,我还能尝试什么?另外,如果使用 Mathematica 或 MATLAB 更容易,我很想知道。
t <- 0.0005
A <- 0.06
B <- -0.01
r <- 0.00025
s <- 0.015
i<-0
Q <- function(e){
N <- t/(1+t*e-t*i)
M <- e*A - i*B
P <- (s/t)*(1+N*(r+t))
M/P
}
RHS <- function(x, e){
N <- t/(1+t*e-t*i)
M <- e*A - i*B
P <- (s/t)*(1+N*(r+t))
Q <- M/P
V <- exp(-(r+2*N)/x/r/N)
exp(-1/(x*N)) + V* (0.5-Q) + Q*V^2
}
LHS <- function(e){
1 - Q(e)
}
x <- function(e){
suppressWarnings(sapply(e, \(u)
optimise(\(x) (RHS(x,u) - LHS(u))^2,
c(-100000, 100000))$min))
}
# assume
e <- 0.1
LHS(e)
RHS(x(e), e)
#plot:
e <- seq(0, 1000)
plot(x(e), Q(e), ty='l')
我一直在尝试在 R 中绘制方程。变量固定在(对于本例)a=0.06
、b=-0.01
、i=0
、t=0.005
, r=0.0025
、s=0.015
而我打算改变变量 e
。主要方程中的一些函数是,
等式看起来像这样,
理想情况下,随着 e
的增加,我希望在 Q
和 x
之间绘制一个图。
t = 0.0005
A = 0.06
B = -0.01
r = 0.00025
s = 0.015
i=0
M= function(e) e*A - i*B
N= function(e) t/(1+t*e-t*i)
P= function(e) (s/t)*(1+N(e)*(r+t))
我不知道如何进行。我想创建一个 (e, Q, x) 列表,其中 x 是给定 e
的方程的根,然后可能使用插值然后在 R 中绘制 (Q, x)。
有没有更直接的方法来绘制 x 与 Q 的关系图?如果没有,我还能尝试什么?另外,如果使用 Mathematica 或 MATLAB 更容易,我很想知道。
t <- 0.0005
A <- 0.06
B <- -0.01
r <- 0.00025
s <- 0.015
i<-0
Q <- function(e){
N <- t/(1+t*e-t*i)
M <- e*A - i*B
P <- (s/t)*(1+N*(r+t))
M/P
}
RHS <- function(x, e){
N <- t/(1+t*e-t*i)
M <- e*A - i*B
P <- (s/t)*(1+N*(r+t))
Q <- M/P
V <- exp(-(r+2*N)/x/r/N)
exp(-1/(x*N)) + V* (0.5-Q) + Q*V^2
}
LHS <- function(e){
1 - Q(e)
}
x <- function(e){
suppressWarnings(sapply(e, \(u)
optimise(\(x) (RHS(x,u) - LHS(u))^2,
c(-100000, 100000))$min))
}
# assume
e <- 0.1
LHS(e)
RHS(x(e), e)
#plot:
e <- seq(0, 1000)
plot(x(e), Q(e), ty='l')