我目前正在努力绘制 R 中的下一个函数。
(F1 / F2^m * (R1 - F1)^((1 - s) / s)) - (m * (((R1 - F1))^(1 / s) + ((R2 - F2)) ^(1 / 秒)) / (F1^m + F2^m)) = 0
我想将 F2 绘制为 F1 的函数。即,F2 位于 y 轴,F1 位于 x 轴。 R1、R2 的值是固定常数,s、m 也是固定的。
由于该函数是非线性的,因此建议我使用数值近似来在先前定义的 F1 域中查找 F2 的值。
我开发了下一个代码,首先定义常量,然后是函数,以及求根函数:
rm(list=ls())
library(ggplot2)
R1_values <- c(100) # Example values for R1
R2_values <- c(100) # Example values for R2
s_values <- c(1) # Example values for s
m_values <- c(1) # Example values for m
# Define the original function to solve for F2
F2_function <- function(F1, F2, R1, R2, s, m) {
(F1 / F2^m * (R1 - F1)^((1 - s) / s)) - (m * (((R1 - F1))^(1 / s) + ((R2 - F2))^(1 / s)) / (F1^m + F2^m))
}
F1_values <- seq(0.01, 100, by = 0.1)
# Solve for F2
F2_values <- sapply(F1_values, function(F1) {
tryCatch({
#
uniroot(F2_function, c(0.01, 100), F1 = F1, R1 = R1, R2 = R2, s = s, m = m, tol = 1e-8)$root
}, error = function(e) NA)
})
data <- data.frame(F1 = F1_values, F2 = F2_values)
ggplot(data, aes(x = F1, y = F2)) +
geom_line() +
labs(title = "F2 as a Function of F1",
x = "F1",
y = "F2") +
theme_minimal()
然而,一切都会返回 NA 或极大的值(随机知道何时或如何)。即使该功能在其他软件(Geogebra)附图中已明确定义。
因此,我想请求帮助如何绘制图(并恢复 F1 域的每个部分的 F2 值)。
数学方程式如下:
PD:我认为 F2 对于每个 F1 有两个结果,但我也无法解决这个问题。
我们可以使用 Ryacas0 明确地解决这个问题。 注意有两个根 如果 F1 > 50,则
sqrt
的参数为负,因此使用 50 作为
上限而不是 100 并绘制两个根(正根为黑色)
我们有:
library(Ryacas0)
m <- s <- 1
R1 <- R2 <- 100
F1 <- Sym("F1")
F2 <- Sym("F2")
z <- (F1 / F2^m * (R1 - F1)^((1 - s) / s)) -
(m * (((R1 - F1))^(1 / s) + ((R2 - F2))^(1 / s)) / (F1^m + F2^m))
F2solve <- Solve(zs, F2)
F2solve
## Yacas vector:
## [1] F2 == (200 - 2 * F1 + sqrt((2 * F1 - 200)^2 - 4 * F1^2))/2
## [2] F2 == (200 - 2 * F1 - sqrt((2 * F1 - 200)^2 - 4 * F1^2))/2
f1 <- seq(0.1, 50, .1)
f2p <- (200 - 2 * f1 + sqrt((2 * f1 - 200)^2 - 4 * f1^2))/2
f2m <- (200 - 2 * f1 - sqrt((2 * f1 - 200)^2 - 4 * f1^2))/2
matplot(f1, cbind(f2p, f2m))