在没有Scipy的python中求解x,

2024-05-13 20:27:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Python来求解一个方程,而不使用任何scipy特性。c=5,方程为c=10-20(exp(-0.15*x)-exp(-0.5*x))。 如何求解公差为0.0001的x。在

请原谅我的入门级编程伙计们。这是我上的第一堂课。在

从数学导入经验 c=5 定义x(c): c=10-20(膨胀系数*(-0.15*x)-膨胀系数*(-0.5*x)) 返回x(5)


Tags: 定义编程数学scipy特性经验方程伙计
2条回答

您似乎希望“从头开始”实现此功能。以下提示:

  • 我们可以用代数简化一下。你真正想要的是找到x,使exp(-0.15*x)+exp(-0.5*x)-0.2=0
  • 对于给定的x值,你知道有多少误差。例如,如果x=1,那么c(1)=1.267,那么您的误差是1.267。您需要一直“猜测”值,直到您的错误小于0.0001。在
  • 数学告诉我们,这个函数是单调递减的;所以,在1的左边没有检查答案。在

希望你能从这些提示中解决它。但这应该是一个答案,所以代码如下:

def theFunction(x): return exp(-0.15*x) + exp(-0.5*x) - 0.2
error = 1.267
x = 1
littleBit = 1
while (abs(error) > 0.0001):
  if error > 0: x += littleBit
  else: x -= littleBit
  oldError = error
  error = theFunction(x)
  if (error*oldError < 0): littleBit *= 0.5 
print x

注意,循环中的最后三行有点“聪明”,一个更简单的解决方案是只设置littleBit=0.00001,并在整个程序中保持恒定(这将慢得多,但仍能完成任务)。作为一个练习,我建议尝试用这种更简单的方法来实现它,然后计算两种方法所需的时间,看看你是否能找出节省时间的地方。在

您可能想看看SymPy。它是Python的专用代数符号操作库,具有BSD许可证。如果你正在寻找一个“库存”的/标准的库解决方案,那么正如其他人提到的那样,你将不得不做一些功课,并可能实现你自己的解算器。在

作为结束语,除非这是一个类作业,或者你的老板对第三方开放源码库有病态的憎恨,否则没有什么理由不使用SciPy包。在IIRC中,它们基本上被实现为封装在Python模块中的高度优化的C二进制文件,因此您可以获得非常快的性能和Python API的易用性。在

相关问题 更多 >