python - 如何在需要使用“fsolve”的函数中获取中间变量的值?
问题描述
我的第一个 py 文件是我要查找根的函数,如下所示:
def myfun(unknowns,a,b):
x = unknowns[0]
y = unknowns[1]
eq1 = a*y+b
eq2 = x**b
z = x*y + y/x
return eq1, eq2
我的第二个是从一个起点找到x和y的值,给定a和b的参数值:
a = 3
b = 2
x0 = 1
y0 = 1
x, y = scipy.optimize.fsolve(myfun, (x0,y0), args= (a,b))
我的问题是:我实际上需要插入 found andz
的结果后的值,并且我不想再次重复,在我的实际情况下,它是一个没有显式表达式的中间步骤变量。但是,我不能用 fslove 替换最后一行 fun ,因为 fslove 只能找到 eq1 和 eq2 的根。现在唯一的解决办法就是重写这个函数,让它返回,然后插入并获取。x
y
z = x*y + y/x + ...
return eq1, eq2, z
z
x
y
z
这个问题有好的解决方案吗?
解决方案
我相信这是错误的做法。由于您具有andz
的直接功能,因此您需要检索这两个值。在列出的情况下,这很容易:假设您可以导出为 ; 的倒数。也给出,可以倒置得到。x
y
b
x
eqn2
a
eqn1
y
为清楚起见,我正在更改您的返回变量的名称:
ret1, ret2 = scipy.optimize.fsolve(myfun, (x0,y0), args= (a,b))
现在,反转两个函数:
# eq2 = x**b
x = ret2**(1/b)
# eq1 = a*y+b
y = (ret1 - b) / a
……最后……
z = x*y + y/x
请注意,您应该z
从函数中删除计算,因为它没有任何用途。
推荐阅读
- xamarin.forms - ITMS-90809:不推荐使用的 API 使用 - Apple 将停止接受使用 UIWebView API 的应用程序的提交
- if-statement - 如何根据其他单元格值在具有背景颜色计数的谷歌工作表中计数或 sumif
- docx4j - 在最新版本的 xlsx4j 中为空 JaxbSmlPart
- vue.js - 处理 vue 中的组件的最佳解决方案是什么?
- android-studio - 当我尝试同步 Gradle 文件时出现以下错误:错误:无法解决:android.recyclerview:recyclerview: Affected Modules: app
- firebase - 如何从 Google Cloud IoT 核心获取活动设备列表
- ios - 绕过“使用 Apple 登录”
- java - 有没有办法在有或没有反射的情况下访问内部类中的私有方法
- java - 按键排序地图(日期,字符串)
- vue.js - router.push() 不会在 VUE 中重新加载路由器视图