首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带子函数的SymPy不求指数函数

带子函数的SymPy不求指数函数
EN

Stack Overflow用户
提问于 2020-11-25 08:30:47
回答 1查看 409关注 0票数 1

我试图用Python编写多元Newton-Raphson方法的实现。首先,我试图解决这个系统:

代码语言:javascript
复制
10 * x + 3 * y * y - 3
x * x - exp(y) - 2

尽管我打算将其扩展到任意的m x n系统(当然,假设解决方案是可能的/存在的)。

我的代码如下:

代码语言:javascript
复制
from dataclasses import dataclass
from sympy import *

x, y, z = symbols('x y z')


@dataclass
class Solve:

    @staticmethod
    def newton_raphson():

        F = Matrix([10 * x + 3 * y * y - 3, x * x - exp(y) - 2])
        v = Matrix([x, y])
        print(J := F.jacobian(v))
        print(J * -1)

        xx, yy = 0, 0
        for i in range(10):
            A = J.subs({"x": xx, "y": yy})
            b = F.subs({"x": xx, "y": yy})

            update = linsolve((A, b), [x, y])

            (xx, yy) = tuple(*update) # should be adding, not setting equal to

            print(xx, yy)




mySolver = Solve
mySolver.newton_raphson()

我的问题是,当我在矩阵.subs()上执行FJ时,除了指数函数外,所有东西都会计算出来。也就是说,行print(xx, yy)打印:

代码语言:javascript
复制
3*(573 - 50*exp(3))/(20*(27 - 25*exp(3))) 5*(13 + 20*exp(3))/(4*(-27 + 25*exp(3)))

(-28650000*exp(1755/(4*(-1350*exp(3) + 729 + 625*exp(6))) + 1075*exp(3)/(4*(-1350*exp(3) + 729 + 625*exp(6))) + 9) - 7500000*exp(625*exp(6)/(-1350*exp(3) + 729 + 625*exp(6)) + 9) - 53550000*exp(625*exp(6)/(-1350*exp(3) + 729 + 625*exp(6)) + 6) - 105598890*exp(625*exp(6)/(-1350*exp(3) + 729 + 625*exp(6))) + 92498679*exp(5*(351 + 215*exp(3))/(4*(-1350*exp(3) + 729 + 625*exp(6)))) + 164313360*exp(1755/(4*(-1350*exp(3) + 729 + 625*exp(6))) + 1075*exp(3)/(4*(-1350*exp(3) + 729 + 625*exp(6))) + 3) + 15235500*exp(1755/(4*(-1350*exp(3) + 729 + 625*exp(6))) + 1075*exp(3)/(4*(-1350*exp(3) + 729 + 625*exp(6))) + 6) + 164358750*exp(625*exp(6)/(-1350*exp(3) + 729 + 625*exp(6)) + 3))/(-81000000*exp(625*exp(6)/(-1350*exp(3) + 729 + 625*exp(6)) + 6) - 107010000*exp(1755/(4*(-1350*exp(3) + 729 + 625*exp(6))) + 1075*exp(3)/(4*(-1350*exp(3) + 729 + 625*exp(6))) + 6) - 31492800*exp(625*exp(6)/(-1350*exp(3) + 729 + 625*exp(6))) + 72404280*exp(5*(351 + 215*exp(3))/(4*(-1350*exp(3) + 729 + 625*exp(6)))) + 38032200*exp(1755/(4*(-1350*exp(3) + 729 + 625*exp(6))) + 1075*exp(3)/(4*(-1350*exp(3) + 729 + 625*exp(6))) + 3) + 87480000*exp(625*exp(6)/(-1350*exp(3) + 729 + 625*exp(6)) + 3) + 9000000*exp(1755/(4*(-1350*exp(3) + 729 + 625*exp(6))) + 1075*exp(3)/(4*(-1350*exp(3) + 729 + 625*exp(6))) + 9) + 25000000*exp(625*exp(6)/(-1350*exp(3) + 729 + 625*exp(6)) + 9)) (-16200000*exp(625*exp(6)/(-1350*exp(3) + 729 + 625*exp(6)) + 6) - 40086000*exp(1755/(4*(-1350*exp(3) + 729 + 625*exp(6))) + 1075*exp(3)/(4*(-1350*exp(3) + 729 + 625*exp(6))) + 6) - 68751693*exp(5*(351 + 215*exp(3))/(4*(-1350*exp(3) + 729 + 625*exp(6)))) - 6298560*exp(625*exp(6)/(-1350*exp(3) + 729 + 625*exp(6))) + 17496000*exp(625*exp(6)/(-1350*exp(3) + 729 + 625*exp(6)) + 3) + 68874390*exp(1755/(4*(-1350*exp(3) + 729 + 625*exp(6))) + 1075*exp(3)/(4*(-1350*exp(3) + 729 + 625*exp(6))) + 3) + 10450000*exp(1755/(4*(-1350*exp(3) + 729 + 625*exp(6))) + 1075*exp(3)/(4*(-1350*exp(3) + 729 + 625*exp(6))) + 9) + 5000000*exp(625*exp(6)/(-1350*exp(3) + 729 + 625*exp(6)) + 9))/(8*(-2025000*exp(625*exp(6)/(-1350*exp(3) + 729 + 625*exp(6)) + 6) - 2675250*exp(1755/(4*(-1350*exp(3) + 729 + 625*exp(6))) + 1075*exp(3)/(4*(-1350*exp(3) + 729 + 625*exp(6))) + 6) - 787320*exp(625*exp(6)/(-1350*exp(3) + 729 + 625*exp(6))) + 1810107*exp(5*(351 + 215*exp(3))/(4*(-1350*exp(3) + 729 + 625*exp(6)))) + 950805*exp(1755/(4*(-1350*exp(3) + 729 + 625*exp(6))) + 1075*exp(3)/(4*(-1350*exp(3) + 729 + 625*exp(6))) + 3) + 2187000*exp(625*exp(6)/(-1350*exp(3) + 729 + 625*exp(6)) + 3) + 225000*exp(1755/(4*(-1350*exp(3) + 729 + 625*exp(6))) + 1075*exp(3)/(4*(-1350*exp(3) + 729 + 625*exp(6))) + 9) + 625000*exp(625*exp(6)/(-1350*exp(3) + 729 + 625*exp(6)) + 9)))

...etc

虽然我需要一个严格的数值,用于更新猜测xxyy

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-25 08:45:33

Sympy专门从事符号评价。exp(3)是一个无理数,因此不能用数值表示。西米知道这个。

要强制进行数值逼近,可以使用N函数作为渐近函数,如

A = N(J.subs({"x": xx, "y": yy}))

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

https://stackoverflow.com/questions/65000993

复制
相关文章

相似问题

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