Pythonでの微生物()を計算する方法|接触生物学へのそのような直感的な方法で数学

0プライマー

書籍の傍受テキストダウン「科学の話究極の人工知能」:のは、からこれらを見てみましょう
ここに画像を挿入説明
ここに画像を挿入説明
ここに画像を挿入説明
ここに画像を挿入説明
-別の非常に興味深いトピックこのセクションでは、別のゲームの背後にある生活を説明します。しかし、今、私たちは主に、独自の放散虫を描画する方法を考える絵はすべての微生物の最後であってもその中で、上記と述べました。

1.描画

私たちは便利な反復方程式iterative_equation(x、y)を持っていると、ある複雑な反復式を、考慮していない人たちをみましょう、それが反復の結果を返します。このように、我々は、反復する方法を検討するために十分な長さを集中することができ、そしてどのように反復の結果が描かれます。

私たちは、コンピューティングの反復プロセスを検討し、グラフィックスは、レコードの結果の追加の大規模なリストの使用を避けるために結合する - そうすることの影響は明確であるが、我々はそれをやろうではないかもしれ関数を記述することです。私たちは、グラフィックスライブラリはmatplotlibのある使用します。

十分な長さの反復として、我々は、100に設定し、反復の要素が全体キャンバス内の画素であるカラーレンダリングが選択されている間、我々は、(必要に応じて実画素と同じとしない)、適切な範囲を選択し、調整します条件は非常に明確ではありません、我々は準備プロセス中に調整されます。

ここでは、この試みを開始します:

def judge(x,y,r_square):
	'判断点是否在以r为半径的圆内'

	distance = x ** 2 + y ** 2
	if distance >= r_square:
		return True
	else:
		return False

def draw(xstart=0,ystart=0,xend,yend):
	'绘制'

	plt.figure()

	#猜测一个r值。
	r_square = ((xstart + xend) / 2) ** 2 + ((ystart + yend) / 2) ** 2

	for x in range(xstart,xend + 1):
		
		for y in range(ystart,yend + 1):
			
			for time in range(100):
				(xnew,ynew) = (x,y)
				xnew,ynew = iterated_function(xnew,ynew)
				#前两层循环给入坐标值,第三层循环进行100次迭代计算。
				
			if judge(xnew,ynew,r_square):
				'点落在圆外:'
				plt.scatter(x,y,c='black',s = 0.1)

私たちは今、()関数は、単純な機能を完了することができました描くが、

  1. バリューr_squartは、まだ自分自身を調整する必要があります。
  2. 大まかに得られる画像の画素値との間の大きすぎるAギャップ
  3. 効率を改善するために、我々は、行列の計算を議論する必要があるかもしれません。

これらの質問は、私たちは、関数内の反復改善を議論します。

2.単純な反復機能

のは、すでにPythonコードに変換し、これらの簡単な手順によって得られた結果によって、プログラム全体を改善するための全体のプログラムを実行して与えられた式へのプレリュードを見てみましょう。

次のように機能を反復:

def iterated_function(x,y):
	'迭代函数'

	xnew = x ** 3 - 3 * x * (y ** 2) + 0.5
	ynew = 3 * (x ** 2) * y - y ** 3

	return xnew,ynew

私たちは、機能の簡単なテストを実行します。

(x,y) = (1,1)

for i in range(10):

	x,y = iterated_function(x,y)

	print(x,y)

次のようにテスト結果は以下のとおりです。

-1.5 2
15.125 5.5
2087.986328125 3608.2578125
-72450800441.37303 214822239.65589142
-3.802928053126974e+32 3.382872253495475e+30
-5.4985885011831324e+97 1.4676808096754469e+96
-1.658916062194702e+293 1.3309206334846214e+292
Traceback (most recent call last):
  File "microorganism.py", line 44, in <module>
    x,y = iterated_function(x,y)
  File "microorganism.py", line 6, in iterated_function
    xnew = x ** 3 - 3 * x * (y ** 2) + 0.5
OverflowError: (34, 'Result too large')

私たちは事前に考えの範囲で調整する方法に関係なく、この結果は戦闘性的に持っている - 私たちは、新たな問題が発生しました。


問題を解決するために試してみてください。

我々は以前同様の問題の組み合わせを与えていない円の半径を見ることができイントロでテキストを見直して - 私たちは黒い斑点や白い斑点を描くと仮定し、マンデルブロ集合の条件を理解するためにマンデルブロ集合のようなものですそれに - 繰り返し処理の結果は無限大になる傾向か。

私たちは、新しいコードを与え、実行しようとする新しい試みを行います。

import matplotlib.pyplot as plt

def iterated_function(x,y):
	'迭代函数'

	xnew = pow(x,3) - 3 * x * pow(y,2) + 0.5
	ynew = 3 * pow(x,2) * y - pow(y,3)

	return xnew,ynew
'''
def judge(x,y,r_square):
	'判断点是否在以r为半径的圆内'

	distance = x ** 2 + y ** 2
	if distance >= r_square:
		return True
	else:
		return False
'''
def draw(xend,yend,xstart=0,ystart=0):
	'绘制'

	plt.figure()
	'''
	#猜测一个r值。
	r_square = ((xstart + xend) / 2) ** 2 + ((ystart + yend) / 2) ** 2
	'''
	for x in range(xstart,xend + 1):
		
		for y in range(ystart,yend + 1):
			try:
				for time in range(100):
					(xnew,ynew) = (x,y)
					xnew,ynew = iterated_function(xnew,ynew)
					#前两层循环给入坐标值,第三层循环进行100次迭代计算。
				scatter(x,y)				
			except:
				continue
			

draw(100,100)

問題が解決しない、である - 発見を実行した後、出力画像をしません。

概要

数学の私たちの問題の嘘は、また、プログラムであってもよいです。
次回は、私たちが見るためにイメージを描きながら、数学でこれらの式を検討しようとします。
また、私たちはコードを調べます。必要であれば、我々はこの問題を解決するためにマンデルブロ集合を描画します。

公開された20元の記事 ウォンの賞賛0 ビュー1074

おすすめ

転載: blog.csdn.net/weixin_43628432/article/details/104238334