我怎样才能找到这个等式的明确解?

时间:2016-09-26 02:21:05

标签: matlab equation-solving

在我工作的领域,有一种称为SEDI的分数:

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)

但是得到了相同的错误消息。我想知道发生了什么。一些可能性:

  1. 有分析解决方案。 MATLAB无法找到它,但其他一些软件可以找到它。

  2. 有一个分析解决方案。如果我以不同的方式询问它,也许通过重新排列等式,MATLAB可以解决它吗?或者,通过向MATLAB提供更多信息 - 我知道F和H的范围仅为0到1,而SEDI的范围仅为-1到+1。

  3. 没有分析解决方案。

2 个答案:

答案 0 :(得分:1)

充其量没有简单明确的解决方案。通过0<f<10<h<1的限制,您可以找到针对sedih的各种值的解决方案。考虑sedi=0。然后是f=h

假设sedi=1/2。那么f就是 Equation for sedi equal one-half

如果sedi=1/3,则f

Result for f when sedi is one-third

可以使用 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]

enter image description here

答案 1 :(得分:0)

或者有一个分析解决方案,程序很难找到。我试图在Mathematica中做到这一点,它不想解决这个问题。但是,我能够手工解决它。如果我没有出错,有三个解决方案。但是,其中一个为0并且不符合原始等式。因此,最后两个解决方案是

f = 1 +/- exp(-s / 2)/ h

仔细检查,但