- !/usr/bin/env python2
- -*- coding: utf-8 -*-
- """
- Created on Thu Sep 6 10:16:37 2018
- @author: myhaspl
- @email:myhaspl@myhaspl.com
- 二分法求解一元多次方程
- """
- import tensorflow as tf
- def f(x):
- y=pow(x,3)*3+pow(x,2)*2-19
- return y
- def tRange(a,b,x,fa,fb,fx):
- b=x
- a=a
- x=tf.divide(tf.add(a,b),2)
- fa=fa
- fb=fx
- fx=f(x)
- return (a,b,x,fa,fb,fx)
- def fRange(a,b,x,fa,fb,fx):
- b=b
- a=x
- x=tf.divide(tf.add(a,b),2)
- fa=fx
- fb=fb
- fx=f(x)
- return (a,b,x,fa,fb,fx)
- def body(a,b,x,fa,fb,fx,i,n):
- a,b,x,fa,fb,fx =tf.cond(tf.Less(tf.multiply(fa,fx),0),lambda: tRange(a,b,x,fa,fb,fx),lambda: fRange(a,b,x,fa,fb,fx))
- return (tf.Print(a,[a],"a:"),tf.Print(b,[b],"b:"),tf.Print(x,[x],"x:"),tf.Print(fa,[fa],"fa:"),tf.Print(fb,[fb],"fb:"),tf.Print(fx,[fx],"fx:"),tf.Print(i+1,[i],"i:"),tf.Print(n,[n],"n:"))
- def c(a,b,x,fa,fb,fx,i,n):
- t1=tf.greater(tf.divide(tf.subtract(b,a),2),tol)
- t2=tf.not_equal(fx,0)
- t3=tf.Less(i,n)
- return tf.logical_and(tf.logical_and(t1,t2),t3)
- a = tf.placeholder(tf.float32,shape=(),name="mya")
- b = tf.placeholder(tf.float32,shape=(),name="myb")
- x = tf.placeholder(tf.float32,shape=(),name="myx")
- tol= tf.placeholder(tf.float32,shape=(),name="mytol")
- fa = tf.constant(0,dtype=tf.float32,name="myfa")
- fb = tf.constant(0,dtype=tf.float32,name="myfb")
- fx = tf.constant(0,dtype=tf.float32,name="myfx")
- i = tf.constant(0,dtype=tf.int32,name="myi")
- n = tf.constant(0,dtype=tf.int32,name="myi")
- input_dict={a:-10,b:10,x:0,fa:f(-10),fb:f(10),fx:f(0),tol:1e-7,n:100}
- res = tf.while_loop(c, body, loop_vars=[a,b,x,fa,fb,fx,i,n])
- with tf.Session() as sess:
- y=sess.run(res,feed_dict=input_dict)
- print y
- ....
- ....
- n:[100]
- i:[20]
- x:[1.65252209]
- b:[1.65252686]a:[1.65251732]
- fx:[-7.43866e-05]fa:[-0.000221252441]fb:[7.2479248e-05]
- n:[100]
- i:[21]
- x:[1.65252447]
- b:[1.65252686]
- fa:[-7.43866e-05]fx:[-1.90734863e-06]a:[1.65252209]fb:[7.2479248e-05]
- i:[22]
- n:[100]
- a:[1.65252447]x:[1.65252566]b:[1.65252686]fx:[3.81469727e-05]
- fb:[7.2479248e-05]fa:[-1.90734863e-06]
- i:[23]n:[100]
- b:[1.65252566]x:[1.65252507]
- a:[1.65252447]
- fb:[3.81469727e-05]
- fa:[-1.90734863e-06]
- fx:[1.90734863e-05]
- n:[100]
- i:[24]
- x:[1.65252471]
- b:[1.65252507]
- a:[1.65252447]
- fb:[1.90734863e-05]
- fa:[-1.90734863e-06]
- fx:[7.62939453e-06]
- n:[100]
- x:[1.65252459]
- fx:[3.81469727e-06]i:[25]a:[1.65252447]b:[1.65252471]
- fa:[-1.90734863e-06]
- fb:[7.62939453e-06]
- n:[100]
- b:[1.65252459]
- x:[1.65252447]fb:[3.81469727e-06]i:[26]a:[1.65252447]
- fx:[-1.90734863e-06]fa:[-1.90734863e-06]
- (1.6525245, 1.6525246, 1.6525245, -1.9073486e-06, 3.8146973e-06, -1.9073486e-06, 27, 100)
来源: http://www.bubuko.com/infodetail-2924710.html