在Tensorflow中求四次多项式函数的根

af7jpaap  于 2022-11-25  发布在  其他
关注(0)|答案(1)|浏览(161)

我正在尝试在Tensorflow中找到以下四次多项式方程的根的方法:

k1 = 339.749
k2 = -31.988
k3 = 48.275
k4 = -7.201

r = k1 * x + k2 * x**2 + k3 * x**3 + k4 * x**4

其中r是一个给定的Tensor,我需要找到r中每个元素的根,具体来说,我需要一个Tensor,其中每个元素都是解的真实的部,该解的实部在由Tensorr的对应元素定义的方程中具有最小的实部。
因为有一个四次多项式方程的公式,我希望有一个计算效率高的解决方案,我不能找到这个问题。

ruarlubt

ruarlubt1#

首先,随机选择一个起始点(该点不能是函数梯度为零的点),然后用牛顿-拉夫逊法求出第二个近似值。

x_new = x - f(x)/f_prime(x)

其中f(x)计算方程式,f_prime(x)计算方程式在点x处的坡度比。
可以使用tensorflow.GradientTape()生成f_prime(x)
下面是一个完整的工作示例,

import tensorflow as tf
import numpy as np

# Your equation
def f(x):
    k1 = 339.749
    k2 = -31.988
    k3 = 48.275
    k4 = -7.201

    r = k1 * x + k2 * x**2 + k3 * x**3 + k4 * x**4
    return r

# Function to calculate the gradient of your equation at point x
def f_prime(x):
    with tf.GradientTape() as tape:
        y = f(x)
    dy_dx = tape.gradient(y, x)
    m = dy_dx.numpy()
    return m

# Function to find second approximation to x
def update(x):
    x_new = x - f(x)/f_prime(x)
    return tf.Variable(x_new)

x = tf.Variable(2, dtype='float32') # Randomly choose a starting point
epochs = 100 # Number of iterations

for i in range(epochs):
    x = update(x)

print(x.numpy())

计算出的根将是最接近所选起点的根。尝试不同的数字,如200,您将得到不同的结果。
如果没有得到f(x)=0的点,这是因为你的起点离解很远,所以你需要设置一个更大的历元数
尝试不同的函数和不同的起点来更好地理解牛顿-拉夫逊方法来求解连续方程。如果你在理解这个方法时遇到问题,this可能会有帮助。

相关问题