首页 > 解决方案 > Nsolve什么都不做

问题描述

当我尝试使用 Nsolve 求解两个变量时,它只返回输入。这是什么意思?

NSolve[{(1 - x)/x^2 == 2*1.2/Pi^2*5.5*10^(-10)*0.5^2*0.06/0.02*(2*Pi*T/(0.51*10^6))^(3/2)*Exp[13.6/T], 
  x*T^(3/2) == (Pi^2/(2*1.2))*67/(2*10^(-15)*5.5*10^(-10)*0.5^2*0.06/0.02*2.7^(3/2))}, {x, T}]

标签: wolfram-mathematica

解决方案


您正在处理巨大的近似十进制数,因此将所有内容都转换为精确的有理数

Simplify[{(1 - x)/x^2 == 2*(12/10)/Pi^2*(55/10)*10^(-10)*(5/10)^2*(6/100)/(2/100)*
  (2*Pi*T/((51/100)*10^6))^(3/2)*Exp[(136/10)/T], 
  x*T^(3/2) == (Pi^2/(2*(12/10)))*67/(2*10^(-15)*(55/10)*10^(-10)*(5/10)^2*
  (6/100)/(2/100)*(27/10)^(3/2))},x>0&&T>0]

返回

{(1 - x)/x^2 == (11*E^(68/(5*T))*Sqrt[3/(34*Pi)]*T^(3/2))/425000000000000000,
  24057*T^(3/2)*x == 33500000000000000000000000000*Sqrt[30]*Pi^2}

假设 x>0 和 T>0 等从第二个等式

x == 33500000000000000000000000000*Sqrt[30]*Pi^2/(24057*T^(3/2))

代之以从第一个方程中消除 x 和

Simplify[(1 - (33500000000000000000000000000*Sqrt[30]*Pi^2/(24057*T^(3/2))))/
  (33500000000000000000000000000*Sqrt[30]*Pi^2/(24057*T^(3/2)))^2 ==
   2*(12/10)/Pi^2*(55/10)*10^(-10)*(5/10)^2*(6/100)/(2/100)* 
   (2*Pi*T/((51/100)*10^6))^(3/2)*Exp[(136/10)/T],T>0]

返回

33500000000000000000000000000*Sqrt[6]*Pi^2*(210681*Sqrt[5] + 
6700000000000*Sqrt[17]*E^(68/(5*T))*Pi^(3/2)) == 5068352817*T^(3/2)

然后看一个 Plot 来估计一个解在 T 中的位置

Plot[33500000000000000000000000000*Sqrt[6]*Pi^2*(210681*Sqrt[5] + 
  6700000000000*Sqrt[17]*E^(68/(5*T))*Pi^(3/2)) - 5068352817*T^(3/2),{T,10^22,10^23}]

这表明在 T==8.4*10^22 和 T==8.5*10^22 之间有一个解决方案

因此 x==3.092*10^-9 和 x==3.0376*10^-9 之间的解决方案

使用 FindRoot 和边界值来避免更多的数值问题

FindRoot[{(1 - x)/x^2 == 2*(12/10)/Pi^2*(55/10)*10^(-10)*(5/10)^2*(6/100)/(2/100)*
  (2*Pi*T/((51/100)*10^6))^(3/2)*Exp[(136/10)/T], 
  x*T^(3/2) == (Pi^2/(2*(12/10)))*67/(2*10^(-15)*(55/10)*10^(-10)*(5/10)^2*
  (6/100)/(2/100)*(27/10)^(3/2))},
  {{x,3092*10^-12,30376*10^-13},{T,84*10^21,85*10^21}},WorkingPrecision->32]

返回

{x -> 3.0625719427168463423734410827584827274789818044761`32.*^-9, 
 T -> 8.45379297284849685875884058676955508420831`32.*^22}

然后

{(1 - x)/x^2==2*(12/10)/Pi^2*(55/10)*10^(-10)*(5/10)^2*(6/100)/(2/100)*
  (2*Pi*T/((51/100)*10^6))^(3/2)*Exp[(136/10)/T], 
 x*T^(3/2)==(Pi^2/(2*(12/10)))*67/(2*10^(-15)*(55/10)*10^(-10)*(5/10)^2*
  (6/100)/(2/100)*(27/10)^(3/2))}/.
{x -> 3.0625719427168463423734410827584827274789818044761`32.*^-9,
 T -> 8.45379297284849685875884058676955508420831`32.*^22}

返回

{True,True}

检查每一步以确保我没有犯任何错误。


推荐阅读