用 python 求解超越方程组

2024-01-09

假设我有以下四个方程:

  1. cos(x)/x = a
  2. 余弦 (y)/y = b
  3. a + b = 1
  4. c sinc(x) = d sinc(y)

对于未知变量x, y, a and b。注意cos(x)/x=a有多种解决方案。变量也类似y。我只感兴趣x and y值,首先是正根(如果这很重要)。

你可以放心地假设a, b, c and d是已知的实常数,均为正值。

在 Mathematica 中,解决这个问题的代码如下所示:

FindRoot[{Cos[x]/x == 0.2 a + 0.1, 
          Cos[y]/y == 0.2 b + 0.1, 
          a + b == 1.0, 
           1.03*Sinc[x] == Sinc[y]*1.02}, 
          {{x, .1}, {y, .1}, {a, .3}, {b, .1}}]

结果返回

{x -> 1.31636, y -> 1.29664, a -> 0.456034, b -> 0.543966}

虽然这很简单,但我不知道如何在 python 中做类似的事情。因此,如果有人可以指导我(或者只是告诉我如何)解决这个问题,我将非常感激。


您可以使用root https://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html:

import numpy as np
from scipy.optimize import root

def your_funcs(X):

    x, y, a, b = X

    f = [np.cos(x) / x - 0.2 * a - 0.1,
         np.cos(y) / y - 0.2 * b - 0.1,
         a + b - 1,
         1.03 * np.sinc(x) - 1.02 * np.sinc(y)]

    return f

sol2 = root(your_funcs, [0.1, 0.1, 0.3, 0.1])
print(sol2.x)

将打印

[ 1.30301572  1.30987969  0.51530547  0.48469453]

您的函数必须以计算结果为 0 的方式定义,例如a + b - 1代替a + b = 1.

快速检查:

print(your_funcs(sol2.x))

gives

[-1.9356960478944529e-11, 1.8931356482454476e-11, 0.0, -4.1039033282785908e-11]

所以,解决方案应该没问题(请注意e-11基本上是0)。

或者,您也可以使用fsolve https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.optimize.fsolve.html:

from scipy.optimize import fsolve

sol3 = fsolve(your_funcs, [0.1, 0.1, 0.3, 0.1])

这会给你相同的结果:

[ 1.30301572  1.30987969  0.51530547  0.48469453]

您可以使用传递附加参数args争论:

def your_funcs(X, fac_a, fac_b):

    x, y, a, b = X

    f = [np.cos(x) / x - fac_a * a - 0.1,
         np.cos(y) / y - fac_b * b - 0.1,
         a + b - 1,
         1.03 * np.sinc(x) - 1.02 * np.sinc(y)]

    return f

sol2 = root(your_funcs, [0.1, 0.1, 0.3, 0.1], args=(0.2, 0.2))
print(sol2.x)

这给你“旧”输出:

[ 1.30301572  1.30987969  0.51530547  0.48469453]

如果你跑

sol2 = root(your_funcs, [0.1, 0.1, 0.3, 0.1], args=(0.4, 0.2))
print(sol2.x)

然后你会收到:

[ 1.26670224  1.27158794  0.34096159  0.65903841]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用 python 求解超越方程组 的相关文章

随机推荐

  • 异步/等待和缓存

    我的服务层正在缓存大量对 memcached 的 Db 请求 这是否导致无法使用 Async Await 例如我怎么能等待这个 public virtual Store GetStoreByUsername string username
  • NSString 内部结构 - 长度如何工作?

    我有一个关于 NSString 内部结构的问题 我想检查字符串长度 基本上我想知道 NSString 是否知道它的长度 每次计数 计数并缓存结果 我应该存储它的长度并每次计算或调用长度方法吗 为了测试一个字符串 我可以测试 nil 或询问它
  • xml dom解析器在java中按名称查找标签

    我有一个 xml 我只想获取城市和温度 我尝试了以下方法 HttpParams httpParameters new BasicHttpParams HttpClient httpclient new DefaultHttpClient h
  • 在 Word2Vec 中合并预训练模型?

    我已经下载了 1000 亿字的 Google 新闻预训练矢量文件 除此之外 我还在训练自己的 3GB 数据 生成另一个预训练的矢量文件 两者都有 300 个特征维度和超过 1GB 的大小 我如何合并这两个巨大的预训练向量 或者我如何训练一个
  • C# 中的映射的映射相当于什么

    在 C 中我正在使用map
  • MVP模式(GWT)的优点是什么

    我刚刚读过本文 http code google com intl de DE webtoolkit doc latest DevGuideMvpActivitiesAndPlaces html这确实让我很困惑 其次 此模型允许我们最大限度
  • 什么是控制器类? [复制]

    这个问题在这里已经有答案了 什么是控制器类 例如 uiviewcontroller uiviewcontroller 和 uiview 有什么区别 谢谢 Cocoa 使用面向对象编程中的模型 控制器 视图概念进行工作 在此系统中 模型由存储
  • 如何获取 NameValueSectionHandler 类型的 ConfigurationSection 的值

    我正在使用 C Framework 3 5 VS 2008 我正在使用ConfigurationManager将配置 不是默认的 app config 文件 加载到 Configuration 对象中 使用 Configuration 类
  • 解析 SDK 1.7.1 无法在 Xcode 6.3 中工作

    我的代码在 Xcode 6 2 中运行良好 更新到 Xcode 6 3 后 我遇到了一些 Nullabilty 错误 下载 Parse SDK 1 7 1 后 我可以解决这些错误 所以我删除了项目中旧的 Parse 框架文件并将新的粘贴到其
  • 将浮点数转换为无符号整数,同时保留顺序

    我找到了很多关于 SO 的答案 专注于转换float to int 我只处理正浮点值 我一直在使用的一种简单方法是 unsigned int float2ui float arg0 float f arg0 unsigned int r u
  • 设计 RESTful 登录服务

    我经历过类似的问题here https stackoverflow com questions 4608225 how do i implement login in a restful web service 但我还不清楚概念 这是我的场
  • Spark 使用数据局部性吗?

    我正在尝试了解 Apache Spark 的内部结构 我想知道 Spark 是否使用某些机制来确保从 InputFormat 读取或写入 OutputFormat 或 Spark 本机支持的其他格式而不是从 MapReduce 派生的格式
  • System.NotSupportedException - 无法比较“System.Linq.IQueryable”类型的元素

    我目前收到以下错误 gt EntityFramework SqlServer dll 中发生 System NotSupportedException 类型的异常 但未在用户代码中处理 其他信息 无法比较 System Linq IQuer
  • python selenium 将密钥发送到只读文本框

    我正在尝试使用下面的 python selenium 代码将密钥发送到下面的字段
  • 单行删除重复项,保持列表的排序[重复]

    这个问题在这里已经有答案了 我有以下清单 Herb Alec Herb Don 我想在保持顺序的同时删除重复项 所以它是 Herb Alec Don 以下是我详细地执行此操作的方法 l new for item in l old if it
  • 如何在 r2dbc 中连接表?

    在java反应器中 r2dbc 我有两个表 A B 我还为它们定义了存储库 如何获取A连接B组成的数据 我只提出以下方法 从 A 调用databaseClient select 然后在循环中从 B 调用 select 但我想要更有效和反应性
  • 如何将浮点数转换为字符串而不考虑区域设置?

    我的产品面向葡萄牙受众 其中逗号是小数点符号 我通常使用 CString Format 将数字输入字符串 它会考虑计算机的区域设置 虽然总的来说这是一个很好的方法 但我在格式化 SQL 查询时遇到了问题 例如 CString szInser
  • PL/Python 和 postgreSQL:返回多列表的最佳方法是什么?

    在 Pl Python 中 RETURNS setof 或 RETURNS table 子句用于返回类似结构化数据的表 在我看来 必须提供每一列的名称才能返回表 如果您有一个包含几列的表格 那么这很容易 但是 如果您有一个包含 200 列的
  • 如何将多列连接成单列(事先不知道其数量)?

    假设我有以下数据框 agentName original dt parsed dt user text qwertyuiop 0 0 16102 0 0 我希望创建一个新的数据框 其中多一列 该列连接了该行的所有元素 agentName o
  • 用 python 求解超越方程组

    假设我有以下四个方程 cos x x a 余弦 y y b a b 1 c sinc x d sinc y 对于未知变量x y a and b 注意cos x x a有多种解决方案 变量也类似y 我只感兴趣x and y值 首先是正根 如果