首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R^2中一类非线性方程组的解

R^2中一类非线性方程组的解
EN

Stack Overflow用户
提问于 2022-04-17 16:56:39
回答 2查看 89关注 0票数 0

我试图找到以下系统的解决方案,其中f和g是R^2 -> R^2函数:

f(x1,x2) = (y1,y2)

g(y1,y2) = (x1,x2)

我尝试使用scipy.optimize.fsolve解决这个问题,如下所示:

代码语言:javascript
运行
复制
def eqm(vars):
    x1,x2,y1,y2 = vars
    eq1 = f([x1, x2])[0] - y1
    eq2 = f([x1, x2])[1] - y2
    eq3 = g([y1, y2])[0] - x1
    eq4 = g([y1, y2])[1] - x2
    return [eq1, eq2, eq3, eq4]

fsolve(eqm, x0 = [1,0.5,1,0.5])

虽然它返回一个输出,但它似乎不是一个正确的输出,因为它似乎不满足这两个条件,并且似乎随着指定的x0有很大的不同。还有一个警告:“按照过去十次迭代的改进来衡量,迭代没有取得很好的进展。”我确实知道一个事实,一个唯一的解存在,这是我已经获得的代数。

不清楚发生了什么事,是否有一种更简单的解决方法,尤其是使用两个方程而不是分裂成4个。

代码语言:javascript
运行
复制
def equations(vars):
    X,Y = vars
    eq1 = f(X)-Y
    eq2 = g(Y)-X
    return [eq1, eq2]

fsolve(equations, x0 =[[1,0.5],[1,0.5]])

其他模块的建议,如同情,也欢迎!

EN

回答 2

Stack Overflow用户

发布于 2022-04-17 17:50:42

首先,我建议使用numpy数组,因为操作这些数组比列表简单。

我重写了你的代码:

代码语言:javascript
运行
复制
import scipy.optimize as opt

def f(x):
  return x
def g(x):
  return x

def func(vars):
  input = np.array(vars)
  eq1 = f(input[:2]) - input[2:]
  eq2 = g(input[2:]) - input[:2]
  return np.concatenate([eq1, eq2])

root = opt.fsolve(func, [1, 1, 0., 1.2])

print(root)
print(func(root)) # should be close to zeros

你所拥有的应该是正确的,所以我相信你使用的方程式有问题。如果你提供这些,我可以试着看看可能出了什么问题。

票数 1
EN

Stack Overflow用户

发布于 2022-04-17 18:16:19

这似乎更像是一个数值数学问题,而不是Python编码问题。你的函数可能在解的周围有“丑陋”的行为,可能是强非线性的,或者包含奇点。我们无法在没有看到功能的情况下作出进一步的贡献。你可以尝试的一件事是解决一个系统

g(f(x)) -x=0

并尽可能地简化g(f(x))。求解方程后,计算y= f(x)。

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

https://stackoverflow.com/questions/71903787

复制
相关文章

相似问题

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