5

積分を使用してグラフの面積を計算しようとしています。

ユーザーは私に3つの数字を与えることになっています:

  • x1、x2 – 積分の境界
  • N は、プログラムが関数を分割する部分の数です

しかし、私は間違った結果を得続けています。

私が直面した最初の問題は、range が整数しか受け入れないことです。

またz=(x2-x1)/N、フロートにしようとすると、1 ステップ後にすることができず、フロートにしないとゼロに近づくため、Python はステップがゼロであるというエラーを表示します。

また、どのように要約でき(z*(f(i)+f(i+z)/2)ますか?

これが私のコードです:

# -*- coding: UTF-8 -*-
import math

def f(x) :
    y = (-1/6.0)*(x-1)*(x-2)*(x+2)*(x-4)
    return y 
x1=int(raw_input ('Δωστε το χ1 οπου αρχιζει η μετρηση του ολοκληρωματος \n ')) #greek letters
x2=int(raw_input ('Δωστε χ2 οπου θελετε να ολοκληρωνεται η μετρηση \n '))
N=int(raw_input('Δωστε τον αριθμο n που θα ειναι το πληθος \n των τραπεζιων που θα χρησιμοπιουνται στη προσσεγγιση  \n '))
z=(x2-x1)/N
for i in range(x1,x2,z):
    z=float(z)
    x1=float(x1)
    x2=float(x2)
    print (z*(f(i)+f(i+z))/2) 
4

2 に答える 2

6

あなたは読んx1でいて、それをint(読み取り:情報を捨てる)にキャストし、それから各反復でフロートにキャストバックします。失われた情報は再表示されません。

z=(x2-x1)/N

値は整数であるため、整数除算を実行します。つまり、N>(x2-x1)の場合、zゼロになります。そして、あなたは常に大きなものを選びたいので、N常にzゼロになります。

したがって、range()動作することはできません。

代わりに行う必要があるのは、入力をfloatとして読み取ることです。

number = float(raw_input("Please enter a number: "))

float()繰り返し適用しても何の役にも立たないことに注意してください。したがって、このコードは必要ありません。

for ...
    z=float(z)
    x1=float(x1)
    x2=float(x2)

また、(z *(f(i)+ f(i + z)/ 2)を要約するにはどうすればよいですか?

f()は線形関数ではないため、短くすることはできません。


もう1つrange()は、stepパラメーターは整数でなければならないということです。

ただし、独自の範囲関数を簡単に作成できます。

def frange(start, stop, steps):
    x = start
    difference = float(stop - start)
    for step in range(0, steps):
        next_x = start + difference * (1 + step) / steps
        yield x, next_x - x
        x = next_x

作業コード

# -*- coding: UTF-8 -*-
import math

def f(x) :
    y = (-1/6.0)*(x-1)*(x-2)*(x+2)*(x-4)
    return y 
x1 = float(raw_input ('Δωστε το χ1 οπου αρχιζει η μετρηση του ολοκληρωματος \n ')) #greek letters
x2 = float(raw_input ('Δωστε χ2 οπου θελετε να ολοκληρωνεται η μετρηση \n '))
N = int(raw_input('Δωστε τον αριθμο n που θα ειναι το πληθος \n των τραπεζιων που θα χρησιμοπιουνται στη προσσεγγιση  \n '))
result = 0
for x, delta_x in frange(x1, x2, N):
    result += delta_x * (f(x)+f(x+delta_x)) / 2
print result 
于 2012-10-20T12:28:42.367 に答える
2
  • x1とするため、x2ステップ サイズはfloatzです。
  • ここでは -loopの代わりにfor-loop のwhile方が簡単かもしれません。

x1 = float(raw_input ('Δωστε το χ1 οπου αρχιζει η μετρηση του ολοκληρωματος \n ')) #greek letters
x2 = float(raw_input ('Δωστε χ2 οπου θελετε να ολοκληρωνεται η μετρηση \n '))
N = int(raw_input('Δωστε τον αριθμο n που θα ειναι το πληθος \n των τραπεζιων που θα χρησιμοπιουνται στη προσσεγγιση  \n '))
z = (x2-x1)/N
x = x1
while x < x2:
    print (z*(f(x)+f(x+z))/2)
    x += z
于 2012-10-20T12:16:36.860 に答える