最近有别个专业的同学来找我帮助求解一个方程,基本求解方程公式如下:
FIRR是未知数,其他已知。
基本数据如下:
t | CI-CO |
1 | -171603.51 |
2 | -171603.51 |
3 | 161584.14 |
4 | 209162.75 |
5 | 232952.05 |
6 | 232952.05 |
7 | 232952.05 |
8 | 242127.29 |
9 | 242127.29 |
10 | 242127.29 |
11 | 242127.29 |
12 | 242127.29 |
13 | 242127.29 |
14 | 242127.29 |
15 | 242127.29 |
一开始按照普通的方程组进行求解,即利用sympy。返回为空,后利用其它方式进行求解,注意该为非线性方程组,利用scipy.optimize 中的fsolve函数进行求解,代码如下:
import pandas as pd
import math
#文件路径
file="chemistryData.xlsx"
data = pd.read_excel(file) #读取数据
data_CI_CO=data['m']
data_t=data['t']
from scipy.optimize import fsolve
# 按格式要求定义我们需要求的函数
def f(FIRR):
f = 0
for i in range(0, 15):
f = f + data_CI_CO[i] * (pow(1 + FIRR, -data_t[i]))
return f
# 调用fsolve函数
sol_fsolve = fsolve(f, [0.1, 999]) # 第一个参数为我们需要求解的方程,第二个参数为方程解的估计值
print(sol_fsolve)
结果截图:
注意有运行警告
原先运行不成功的代码:
import sympy # 解方程的专业模块sympy
FIRR= sympy.symbols("FIRR") # 申明未知数"FIRR"
f=0
for i in range(0,15):
f=f+data_CI_CO[i]*(pow(1+FIRR,-data_t[i]))
print(f)
F= sympy.solve([f],[FIRR]) # 写入需要解的方程体
print(F) # 打印出结果
参考自: