我正在使用GEKKO来找到一些未知函数u的二维傅立叶系数,这些函数根据二维向量g展开。为此,我有设置字典,我需要计算以下形式的许多项:
u{ u_fourier_i_j: [m.Var(),m.Var()] ....}
g{ g_i_j : [gx_i_j, gy_i_j].....}
m.Minimize(m.cos(sup.function()))
其中sup.function定义为:
dummy = 0
for i in fourier_x:
for j in fourier_y:
dummy += u_fourier_i_j * np.cos(np.dot(g_i_j,[x,y]))
return dummy
现在我想使用许多傅立叶系数,但Gekko给了我一个错误:
APM模型错误:字符串>15000个字符考虑将直线分解为多个方程式
也可能是由于仅使用换行符CR而不是CR LF(用于Windows(或LF(用于MacOS/Linux(要解决此问题,请使用适当的换行符保存APM文件
有没有办法增加APM模型中的最大字符串大小,或者通过不同的程序结构来避免这个错误?计算资源不应该成为问题。
使用m.sum()
(gekko求和(来避免最大长度误差。它接受列表输入并创建一个求和,从而提高模型求解的速度。
dummy = []
for i in fourier_x:
for j in fourier_y:
dummy.append(u_fourier_i_j * np.cos(np.dot(g_i_j,[x,y])))
return m.sum(dummy)
如果仍然存在错误,请尝试使用类似的策略,将np.dot()
函数np.dot(g_i_j,[x,y])
替换为d
:
n = len(g_i_j)
z = [x,y]
d = m.sum([g_i_j[i]*z[i] for i in range(n)])
请发布一个完整的脚本,以便验证修复程序。