牛顿法,类型问题

时间:2018-03-25 02:17:02

标签: python types

a=input("Write your function")
b=input("Input the derivative of your function ")

def f(x):
   return a

def fprime(x):
   return b


guess= 1
for n in range(1, 100):
   nextguess = guess - f(guess)/fprime(guess)
   print(nextguess)
   guess = nextguess

错误代码:

Traceback (most recent call last):
  File "C:\Users\Anton Morian\kod\Projekt.py", line 13, in <module>
    nextguess = guess - f(guess)/fprime(guess)
TypeError: unsupported operand type(s) for /: 'str' and 'str'

2 个答案:

答案 0 :(得分:0)

首先,你不需要funtions。 其次,python中的input()返回str。您需要将其转换为int才能进行数学运算。

我不是一个数学家,所以不要试图在这里尝试实现,但尝试这个代码。

a=input("Write your function")
b=input("Input the derivative of your function ")

guess= 1
for n in range(1, 100):
   nextguess = guess - int(a)/int(b)
   print(nextguess)
   guess = nextguess

答案 1 :(得分:0)

这是我的最终结果,您怎么看?是的,我知道使用全局变量。

顺便说一下,它的newtows方法

restart = True
import re
from decimal import Decimal
while restart:
  print("Hej ska du vara! Detta är Newtons metod. Jag kan räkna ut nollställen ALLA nollställen, coolt va?!? Testa gärna mig :)")
  a=(input("Skriv din funktion"))
  b=(input("Ange dervatan till din funktion"))

  def f(x):
     return eval(re.sub("x", str(x), a))

  def fprime(x):
     return eval(re.sub("x", str(x), b))

  gissa = None
  inputText = "Ange din gissning av ett nollställe: "

  def getInput():
      global gissa
      global inputText
      gissa = float(input(inputText))

      if fprime(gissa) == 0:
          inputText = "Gissningen ej definierad, ange en ny: "
          return True
      else:
          return False

  while getInput():
      pass

  for n in range(1, 50):
      nextgissa = gissa - f(gissa)/fprime(gissa)
      gissa = nextgissa

  gissa=Decimal(gissa)
  output=round(gissa,2)
  print("Nollstället är", output)
  restart=input("Tryck på valfri tagent för att starta om eller enter för att avsluta!")
  if restart=="":
      restart = False
      print("Hejdå ska du vara!")