我怎样才能找到这个方程的显式解?
How can I find an explicit solution to this equation?
在我工作的领域中有一种称为 SEDI 的分数:
我被要求为 F 求解这个方程。一个普遍可靠的消息来源告诉我应该有一个解析解。一般我用MATLAB来解决这样的问题,所以我尝试了
syms SEDI H F
solve(SEDI == ((log(F)-log(H)-log(1-F)+log(1-H)) / (log(F)+log(H)+log(1-F)+log(1-H))),F)
这给出了错误消息 Warning: Cannot find explicit solution.
然后我尝试重新排列为
solve(SEDI*(log(F) + log(H) + log(1-F) + log(1-H)) == log(F) - log(H) - log(1-F) + log(1-H),F)
但刚收到相同的错误消息。我想知道发生了什么事。一些可能性:
有解析解。 MATLAB找不到,其他软件可以。
有解析解。如果我以不同的方式询问它,MATLAB 可以解决它,也许是通过重新排列方程式?或者,通过向 MATLAB 提供更多信息——我知道 F 和 H 的范围只能从 0 到 1,而 SEDI 的范围只能从 -1 到 +1。
没有解析解。
或者存在程序难以找到的解析解。我试图在 Mathematica 中这样做,但它不想求解方程。但是,我能够手动解决它。如果我没有出错,有三种解决方案。然而,其中一个为 0 且不符合原方程。因此,最终的两种解法是
f= 1 +/- exp(-s/2)/h
仔细检查
充其量没有简单明确的解决方案。在0<f<1
和0<h<1
的限制下,可以找到sedi
和h
的各种值的解决方案。考虑 sedi=0
。然后f=h
.
假设sedi=1/2
。那么 f
就是
如果sedi=1/3
,那么f
就是
可以使用 Mathematica 和以下代码来玩这个:
sedi = 1/3;
h =.;
ToRadicals[
Solve[(sedi (Log[f] + Log[h] + Log[1 - f] + Log[1 - h]) ==
Log[f] - Log[h] - Log[1 - f] + Log[1 - h]) && 0 < f < 1 &&
0 < h < 1, f]]
此外,考虑 SEDI 值的轮廓:
ContourPlot[(Log[f] - Log[h] - Log[1 - f] + Log[1 - h])/(Log[f] + Log[h] + Log[1 - f] + Log[1 - h]),
{f, 0.001, 0.999}, {h, 0.001, 0.999}, ContourLabels -> True,
Contours -> {-0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 0,
0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9},
FrameLabel -> (Style[#, Bold, Large] &) /@ {"f", "h",
"Contours of SEDI"}, ContourShading -> None, ContourStyle -> Gray]
在我工作的领域中有一种称为 SEDI 的分数:
我被要求为 F 求解这个方程。一个普遍可靠的消息来源告诉我应该有一个解析解。一般我用MATLAB来解决这样的问题,所以我尝试了
syms SEDI H F
solve(SEDI == ((log(F)-log(H)-log(1-F)+log(1-H)) / (log(F)+log(H)+log(1-F)+log(1-H))),F)
这给出了错误消息 Warning: Cannot find explicit solution.
然后我尝试重新排列为
solve(SEDI*(log(F) + log(H) + log(1-F) + log(1-H)) == log(F) - log(H) - log(1-F) + log(1-H),F)
但刚收到相同的错误消息。我想知道发生了什么事。一些可能性:
有解析解。 MATLAB找不到,其他软件可以。
有解析解。如果我以不同的方式询问它,MATLAB 可以解决它,也许是通过重新排列方程式?或者,通过向 MATLAB 提供更多信息——我知道 F 和 H 的范围只能从 0 到 1,而 SEDI 的范围只能从 -1 到 +1。
没有解析解。
或者存在程序难以找到的解析解。我试图在 Mathematica 中这样做,但它不想求解方程。但是,我能够手动解决它。如果我没有出错,有三种解决方案。然而,其中一个为 0 且不符合原方程。因此,最终的两种解法是
f= 1 +/- exp(-s/2)/h
仔细检查
充其量没有简单明确的解决方案。在0<f<1
和0<h<1
的限制下,可以找到sedi
和h
的各种值的解决方案。考虑 sedi=0
。然后f=h
.
假设sedi=1/2
。那么 f
就是
如果sedi=1/3
,那么f
就是
可以使用 Mathematica 和以下代码来玩这个:
sedi = 1/3;
h =.;
ToRadicals[
Solve[(sedi (Log[f] + Log[h] + Log[1 - f] + Log[1 - h]) ==
Log[f] - Log[h] - Log[1 - f] + Log[1 - h]) && 0 < f < 1 &&
0 < h < 1, f]]
此外,考虑 SEDI 值的轮廓:
ContourPlot[(Log[f] - Log[h] - Log[1 - f] + Log[1 - h])/(Log[f] + Log[h] + Log[1 - f] + Log[1 - h]),
{f, 0.001, 0.999}, {h, 0.001, 0.999}, ContourLabels -> True,
Contours -> {-0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 0,
0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9},
FrameLabel -> (Style[#, Bold, Large] &) /@ {"f", "h",
"Contours of SEDI"}, ContourShading -> None, ContourStyle -> Gray]