用指数项求解方程

时间:2015-05-25 19:00:16

标签: matlab symbolic-math logarithm equation-solving

我有等式1 =((πr 2 n )/ n! ∙e ( - πr 2

我想用MATLAB解决它。以下是正确的代码吗?答案对我来说并不清楚。

n= 500;
A= 1000000;
d= n / A;
f= factorial( n );
solve (' 1 = ( d * pi * r^2 )^n / f  . exp(- d * pi * r^2) ' , 'r')

我得到的答案是:

Warning: The solutions are parametrized by the symbols:
k = Z_ intersect Dom::Interval([-(PI/2 -
Im(log(`fexp(-PI*d*r^2)`)/n)/2)/(PI*Re(1/n))], (PI/2 +
Im(log(`fexp(-PI*d*r^2)`)/n)/2)/(PI*Re(1/n)))

> In solve at 190 

ans =

    (fexp(-PI*d*r^2)^(1/n))^(1/2)/(pi^(1/2)*d^(1/2)*exp((pi*k*(2*i))/n)^(1/2))
   -(fexp(-PI*d*r^2)^(1/n))^(1/2)/(pi^(1/2)*d^(1/2)*exp((pi*k*(2*i))/n)^(1/2))

2 个答案:

答案 0 :(得分:2)

您的代码存在多个问题。

1。首先,您正在评估浮点数中的某些部分。只要您知道解决方案是准确的,这并不总是坏的。但是,factorial(500)溢出到Inf。事实上,对于factorial,任何大于170的内容都会溢出,任何大于21的输入都可能不准确,因为结果会大于flintmax。此计算应通过sym/factorial符号执行:

n = sym(500);
f = factorial(n);

1.22e1134返回大约等于f的整数。

2。您正在使用句点('.')来指定乘法。在大多数符号数学函数所基于的MuPAD中,句点为shorthand for concatenation

此外,正如R2015a文件中所述(可能更早):

  

将来的版本中将删除字符串输入。使用syms来声明变量,并将它们作为逗号分隔的列表或向量传递。

如果您没有使用过字符串,我不会认为您的命令可能被误解并返回如此混乱的结果。以下是如何将solve用于符号变量:

syms r;
n = sym(500);
A = sym(1000000);
d = n/A;
s = solve(1==(d*sym(pi)*r^2)^n/factorial(n)*exp(-d*sym(pi)*r^2),r)

,几分钟后,返回一个1000 x 1的解决方案矢量,所有解决方案都很复杂。正如@BenVoigt建议的那样,您可以尝试solve'Real'选项。但是,至少在R2015a中,以lambertw表示返回的四个解决方案实际上并不真实。

答案 1 :(得分:1)

有几点需要注意:

  1. MATLAB未使用工作区中Adf的值。
  2. f . exp根本没有做你想要的,这是乘法。它变成了一个未知函数fexp
  3. 'Real', true的其他选项传递给solve可以消除大部分无关条件。
  4. 您可能应该避免调用接受字符串的solve版本,而是使用符号工具箱(syms 'r'