在我工作的领域,有一种称为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。
没有分析解决方案。
答案 0 :(得分:1)
充其量没有简单明确的解决方案。通过0<f<1
和0<h<1
的限制,您可以找到针对sedi
和h
的各种值的解决方案。考虑sedi=0
。然后是f=h
。
如果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]
答案 1 :(得分:0)
或者有一个分析解决方案,程序很难找到。我试图在Mathematica中做到这一点,它不想解决这个问题。但是,我能够手工解决它。如果我没有出错,有三个解决方案。但是,其中一个为0并且不符合原始等式。因此,最后两个解决方案是
f = 1 +/- exp(-s / 2)/ h
仔细检查,但