0

我有以下问题:

y=5;
syms x;
z = 1:5;
solve(exp(x*max(z))/sum(exp(x*z))-y,x)

我得到的输出是:

z = 1:5;

Warning: The solutions are parametrized by the symbols:
z1 = {0.08428351324821874240165938567037 -
2.5448937468890335808057943875982*I, 0.027288262408886135481488159484547
- 1.2999621981120554573735787663938*I,
0.08428351324821874240165938567037 +
2.5448937468890335808057943875982*I, 0.027288262408886135481488159484547
+ 1.2999621981120554573735787663938*I}

> In solve at 94
ans =
z1

但是,我需要一个数字解决方案。任何人都可以推荐一种对菜鸟友好的方法吗?

谢谢!(感谢@horchler 帮我改写问题)

4

2 回答 2

0

我假设这x是一个符号变量,而向量z是数字?所以,像这样:

syms x y;
z = 1:5;
solve(exp(x*max(z))/sum(exp(x*z))==y,x)

返回

Warning: The solutions are parametrized by the symbols:
z1 = RootOf(y*z^4 - z^4 + y*z^3 + y*z^2 + y*z + y, z)

> In solve at 180 

ans =

    log(z1)

solve确实给你一个解决方案,只是不是一个明确的解决方案。它告诉你,你有几个解是一些多项式的根。具有的元素越多z(并且取决于 的具体值z),多项式的阶数就越高。二次和三次的根很容易找到。四边形(具有常数系数)也可以被分解。一些五次函数也可以,但对于更高阶,根的已知解析解非常少。您可能需要使用数字技术来获得解决方案。

编辑:对于您的方程式,您可以尝试替换: let xp = exp(x)。那么您的版本solve可能会更轻松。所以:

syms xp;
y = 5;
z = 1:5;
log(solve(xp^max(z)/sum(xp.^z)==y,xp))

返回

ans =

    0.027288262408886135481488159484547 - 1.2999621981120554573735787663938*i
    0.027288262408886135481488159484547 + 1.2999621981120554573735787663938*i
    0.08428351324821874240165938567037 - 2.5448937468890335808057943875982*i
    0.08428351324821874240165938567037 + 2.5448937468890335808057943875982*i
于 2013-07-14T19:28:47.880 回答
0

我相信我自己使用 fzero 函数找到了一个不错的解决方案:

>> f=@(x,y,z)exp(x*max(z))/sum(exp(x*z))-y;
    z=-0.1:0.005:0.015;
    y=0.52;
    x=fzero(@(x) f(x,y,z),50)
x =
  146.7938
于 2013-07-15T09:12:03.547 回答