首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Tensorflow中求四次多项式函数的根

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

Stack Overflow用户
提问于 2022-11-17 04:58:09
回答 1查看 34关注 0票数 -3

我试图在Tensorflow中找到以下4次多项式方程的根:

代码语言:javascript
复制
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是一个给定的张量,我需要为r的每个元素找到根。具体来说,我需要一个张量,其中每个元素都是解的实部,其中由张量r的对应元素定义的方程中最小的实部。

既然有一个四次多项式方程的公式,我希望对这个问题有一个计算效率很高的解,但我找不到。

EN

回答 1

Stack Overflow用户

发布于 2022-11-17 07:19:16

只要方程是连续的,你就可以用牛顿-拉夫森方法找到任何方程的根。首先,随机选择一个起点(这个点不能是函数梯度为零的点),然后可以使用

代码语言:javascript
复制
x_new = x - f(x)/f_prime(x)

其中f(x)计算你的方程,而f_prime(x)x点上计算你的方程的梯度。

可以使用f_prime(x)构建tensorflow.GradientTape()

下面是一个完整的工作示例,

代码语言:javascript
复制
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的点,这是因为你的起点离解很远,所以你需要设置一个更大的时代数。

利用不同的函数和不同的起点,更好地理解牛顿-拉夫森方法,寻找连续方程的解。如果您在理解此方法时遇到问题,可能会有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74470394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档