我有以下问题:
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
但是,我需要一个数字解决方案。任何人都可以推荐一种noob友好的方法吗?
谢谢! (感谢@horchler帮助我重新解释这个问题)
答案 0 :(得分: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
的具体值),多项式的顺序就越高。正方形和立方体的根源很容易找到。 Quartical(具有常系数)也可以被考虑在内。一些quintics也可以,但是对于更高的订单,很少有已知的分析解决方案。您可能需要使用数字技术来获得解决方案。
修改强>:
对于您的等式,您可以尝试替换:让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
答案 1 :(得分: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