You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
4.2 KiB
146 lines
4.2 KiB
# -*- encoding: utf-8 -*-
|
|
"""
|
|
@Author: packy945
|
|
@FileName: function.py
|
|
@DateTime: 2023/6/6 14:45
|
|
@SoftWare: PyCharm
|
|
"""
|
|
import numpy as np
|
|
import math
|
|
import data
|
|
import pandas as pd
|
|
from pandas import DataFrame
|
|
# 函数库
|
|
Show = []
|
|
Fun = []
|
|
Fit_type_library = {}
|
|
|
|
|
|
class Function:
|
|
def __init__(self, no, name, v, fun, complete='', demo=''):
|
|
# 函数名称
|
|
self.name = name
|
|
# 变量个数
|
|
self.variable = v
|
|
self.function = fun # 函数表达式
|
|
# 函数编号
|
|
self.no = no
|
|
# 是否显示
|
|
self.show = 0
|
|
# 完整函数
|
|
self.complete = complete
|
|
# self.print = ''
|
|
self.demo = demo
|
|
|
|
def get_fun(self):
|
|
if self.variable == 2:
|
|
return self.fun2
|
|
elif self.variable == 3: # 以二次函数为例,省略其他函数
|
|
return self.fun3
|
|
elif self.variable == 4:
|
|
return self.fun4
|
|
elif self.variable == 5:
|
|
return self.fun5
|
|
elif self.variable == 6:
|
|
return self.fun6
|
|
|
|
def fun2(self, x, a0, a1):
|
|
return eval(self.function)
|
|
|
|
def fun3(self, x, a0, a1, a2):
|
|
return eval(self.function)
|
|
|
|
def fun4(self, x, a0, a1, a2, a3):
|
|
return eval(self.function)
|
|
|
|
def fun5(self, x, a0, a1, a2, a3, a4):
|
|
return eval(self.function)
|
|
|
|
def fun6(self, x, a0, a1, a2, a3, a4, a5):
|
|
return eval(self.function)
|
|
|
|
def print_f(self, a):
|
|
# print('self.show='+self.complete)
|
|
exec('self.show='+self.complete)
|
|
# print(self.show)
|
|
return self.show
|
|
|
|
|
|
# def f_init():
|
|
# cur = 0 # 函数编号
|
|
# # 一次函数
|
|
# newfun = Function(cur, '一次函数', 2, 'a0*x+a1', "f'{a[0]}x+{a[1]}'", 'ax+b')
|
|
# newfun.show = 1
|
|
# Fun.append(newfun)
|
|
# cur += 1
|
|
# # 二次函数
|
|
# newfun = Function(cur, '二次函数', 3, 'a0*x*x+a1*x+a2', "f'{a[0]}x^2+{a[1]}x+{a[2]}'", 'ax^2+bx+c')
|
|
# newfun.show = 1
|
|
# Fun.append(newfun)
|
|
# cur += 1
|
|
# # 三次函数
|
|
# newfun = Function(cur, '三次函数', 4, 'a0*x*x*x+a1*x*x+a2*x+a3', "f'{a[0]}x^3+{a[1]}x^2+{a[2]}x+{a[3]}'", 'ax^3+bx^2+cx+d')
|
|
# newfun.show = 0
|
|
# Fun.append(newfun)
|
|
# cur += 1
|
|
# # 四次函数
|
|
# newfun = Function(cur, '四次函数', 5, 'a0*x*x*x*x+a1*x*x*x+a2*x*x+a3*x+a4'
|
|
# , "f'{a[0]}x^4+{a[1]}x^3+{a[2]}x^2+{a[3]}x+{a[4]}'", 'ax^4+bx^3+cx^2+dx+e')
|
|
# newfun.show = 0
|
|
# Fun.append(newfun)
|
|
# cur += 1
|
|
# # 指数函数
|
|
# newfun = Function(cur, '指数函数', 2, 'a0*np.exp(0.01*x)+a1', "f'{a[0]}e^(0.01x)+{a[1]}'", 'a*e^(0.01x)+b')
|
|
# newfun.show = 0
|
|
# Fun.append(newfun)
|
|
# cur += 1
|
|
# # 对数函数
|
|
# newfun = Function(cur, '对数函数', 3, 'a0*(np.log(x) + 1e-5) / (np.log(a1) + 1e-5) + a2',
|
|
# "f'{a[0]}log(x,{a[1]})+{a[2]}'", 'alog(x,b)+c')
|
|
# newfun.show = 0
|
|
# Fun.append(newfun)
|
|
# cur += 1
|
|
# # 高斯函数
|
|
|
|
|
|
# F_init()
|
|
def write():
|
|
file_path = 'functions.xlsx'#设置路径
|
|
df = pd.read_excel(io=file_path, header=1)#设置表格
|
|
print(df)
|
|
df.columns = ['no', 'name', 'variable', 'function', 'complete', 'demo', 'show']#设置表格标题
|
|
cur = 0#重置计数
|
|
for f in Fun:#遍历函数类型
|
|
df.loc[cur] = [cur, f.name, f.variable, f.function, f.complete, f.demo, f.show]#写进表格
|
|
cur += 1#计数加一
|
|
DataFrame(df).to_excel(file_path, sheet_name='Sheet1', index=False, header=True)#保存xlsx
|
|
|
|
|
|
def f_read():
|
|
file_path = 'functions.xlsx'#设置路径
|
|
df = pd.read_excel(io=file_path, header=0)#设置表格
|
|
cur = 0
|
|
for i in range(len(df)):#逐行读取excel
|
|
newfun = Function(df.loc[i][0], df.loc[i][1], df.loc[i][2], df.loc[i][3], df.loc[i][4], df.loc[i][5])
|
|
newfun.show = df.loc[i][6]
|
|
Show.append(df.loc[i][6])#读取函数显示信息
|
|
Fun.append(newfun)#读取函数信息并添加
|
|
cur += 1
|
|
for f in Fun:#建立简表fit_type_library
|
|
Fit_type_library[f.name] = [f.no, f.demo, f.name]
|
|
|
|
if __name__ == '__main__':
|
|
|
|
f_read()
|
|
# for f in fun:
|
|
# print([f.no, f.demo, f.name])
|
|
for f in Fun:
|
|
Fit_type_library[f.name] = [f.no, f.demo, f.name]
|
|
|
|
print("Fun",Fun)
|
|
|
|
print(Fit_type_library)
|
|
a = [1,2,3,4,5]
|
|
x = 2
|
|
pass
|