1

x n + 1 = x n 2 +cの形式で反復するプログラムを作成しようとしています。どうすればよいですか?

たとえば、c=1およびx0 = 1/2の場合

(1/2)2 + 1 = 5/4、
(5/4)2 + 1 = 25/16 + 1 =41/16
...など

私のコードはここでは機能しません:

def main():
   import math
   print("This program iterates a function of the form x^2 + c:")
   x=complex(input("Enter a seed value:"))
   c=complex(input("Enter a value for c"))

for i in range(50):
   f(0) = x*x + c
   f(i) = f(i-1)*f(i-1) + c
   print(f(i))
main()

f(0)Pythonではmatlabを使用したり、好きにしたりすることはできませんがf(i)、これに代わるものは何ですか?

4

5 に答える 5

2

Python ではタブ移動が重要です。以下のコードを試してください。これはあなたの意図が何であるかを推測するためのロングショットですが、最終的な結果にはるかに近づきます

def main(x):
    import math
    print("This program iterates a function of the form x^2 + c:")
    c = complex(input("Enter a value for c"))

    print "C : %s" % c

    f = [x * x + c]

    for i in range(1, 50):
        f.append(f[i - 1] * f[i - 1] + c)

    print f

main(2)
于 2012-05-05T06:20:29.127 に答える
2

すべての部分的な結果を保持することに興味がない場合は、次のように繰り返すことができます。

import math
print("This program iterates a function of the form x^2 + c:")
x = complex(input("Enter a seed value:"))
c = complex(input("Enter a value for c"))

f = x * x + c
for _ in range(50):
   f = f * f + c
   print(f)
于 2012-05-05T06:34:03.770 に答える
1

関数を呼び出しましょうf

def f(x, c):
    return x * x + c

次に、main()次のように呼び出すことができます。

def main():
    n = complex(input("Enter a seed value: "))
    c = complex(input("Enter a value for c: "))

    print n
    for term in range(50):
        n = f(n, c)
        print n

反復ごとに、nはの戻り値に再割り当てされf、前の値は。になりnます。

于 2012-05-05T06:46:28.727 に答える
1

Python には、ジェネレーター関数と呼ばれる特別なメカニズムがあります。最後の状態を記憶するオブジェクトを返し、前の呼び出し (反復子) からの値を使用して関数の本体を実行します。

yieldの代わりにコマンドを使用するだけで、通常の関数と構文的に異なりreturnます。通常、このようなジェネレーター関数は、for ループ、コンテナー コンストラクターなど、反復子が必要な場所で使用できます。コードを参照してください。

def f(x, c, n=5):
    while n > 0:
        yield x        # returns x0 as first value
        x = x * x + c  # this value is to be returned next time
        n -= 1         # decrement the sequence counter


# Using the generator function in a for loop.
for value in f(1/2, 1, 14):  # I want 14 members of the sequence
    print(value)

# Using the generator function to build a list of the values.
print('----------------------------------')
lst = list(f(1/2, 1, 10))    # 10 members wanted here
print(lst)


# Using the standard module called fractions for the same function.
print('==================================')
from fractions import Fraction as frac

# Using the generator function in a for loop.
for value in f(frac(1, 2), 1):  # default number of loop used here
    print(value)

# Using the generator function to build a list of the values.
print('----------------------------------')
lst = list(f(frac(1, 2), 1, 10))  # 10 members wanted here
print(lst)

# Generating Mandelbrot set values.
print('==================================')
# Using the generator function in a for loop.
for value in f(complex(0), complex(0, 1)):  # default number of loop used here
    print(value)

Python は、matlab のように式をシンボリックに計算しません。ただし、分数を表す Fraction クラスを持つ標準モジュールの分数があります。独自の乗算と加算を定義するため、その型にも同じジェネレーター関数を使用できます。Python の整数は float よりも制限が少ないため、Fractions を使用するとより大きな結果が得られる場合があります (まったく意味がある場合)。しかし、おそらくマンデルブロ集合を生成したいでしょう?

コンソールに表示されます(ラップされた行):

0.5
1.25
2.5625
7.56640625
58.25050354003906
3394.1211626681034
11520059.466871478
132711770120256.16
1.7612413928451715e+28
3.1019712438712e+56
9.62222559780384e+112
9.258722545503146e+225
inf
inf
----------------------------------
[0.5, 1.25, 2.5625, 7.56640625, 58.25050354003906, 3394.1211626681034, 11520059.
466871478, 132711770120256.16, 1.7612413928451715e+28, 3.1019712438712e+56]
==================================
1/2
5/4
41/16
1937/256
3817505/65536
----------------------------------
[Fraction(1, 2), Fraction(5, 4), Fraction(41, 16), Fraction(1937, 256), Fraction
(3817505, 65536), Fraction(14577639392321, 4294967296), Fraction(212507588699293
047863318657, 18446744073709551616), Fraction(4515947525478824258458249067737177
3490882293292495105, 340282366920938463463374607431768211456), Fraction(20393782
05287831607501825305820853979646214602081433287459323242821411496740800167480972
336912829578600961, 115792089237316195423570985008687907853269984665640564039457
584007913129639936), Fraction(41590634642030170391815210870941032988232016881852
69467060076200306147021769623813726880369383179868466442311933392597163786089664
61843166606956164602440721448188927878363156181727061624343416854647005907620761
7, 13407807929942597099574024998205846127479365820592393377723561443721764030073
546976801874298166903427690031858186486050853753882811946569946433649006084096)]

==================================
0j
1j
(-1+1j)
-1j
(-1+1j)
于 2012-05-05T07:20:07.550 に答える
0

良い一日。

# x_(n+1) = x_(n)^2 + c

def f(n,c):
    a=0
    while a < n:
        a +=1
        yield a * a + c

f をジェネレーターとして使用できるようになりました

if __name__ == '__main__':
    for element in f(100, 0):
        print element
于 2012-05-05T07:19:05.257 に答える