我在用dde23
of pydelay
包来求解延迟微分方程。我的问题:如何有条件地编写方程?例如目标方程有两个选项:
when x>1, dx/dt=0.25 * x(t-tau) / (1.0 + pow(x(t-tau),10.0)) -0.1*x
otherwise, dx/dt=0.25 * x
我尝试了两种方法,但似乎两种方法都不起作用:
方法1没有抱怨,但是if else语句没有抱怨
被解释了。
-
方法 2 产生以下错误:
找到可执行文件 c:\mingw\bin\g++.exe
c:\docume~1\thao\locals~1\temp\thong\python27_compiled\sc_f68f7a878bf7b27c6f72c9e771ec4d311.cpp:在函数“double f(double, double)”中:
c:\docume~1\thao\locals~1\temp\thong\python27_compiled\sc_f68f7a878bf7b27c6f72c9e771ec4d311.cpp:734: 错误: 'x' 不能用作函数
c:\docume~1\thao\locals~1\temp\thong\python27_compiled\sc_f68f7a878bf7b27c6f72c9e771ec4d311.cpp:734: 错误: 'x' 不能用作函数
c:\docume~1\thao\locals~1\temp\thong\python27_compiled\sc_f68f7a878bf7b27c6f72c9e771ec4d311.cpp: 在函数 'PyObject* generated_func(PyObject*, PyObject*)' 中:
c:\docume~1\thao\locals~1\temp\thong\python27_compiled\sc_f68f7a878bf7b27c6f72c9e771ec4d311.cpp:878:警告:有符号和无符号整数表达式之间的比较
c:\docume~1\thao\locals~1\temp\thong\python27_compiled\sc_f68f7a878bf7b27c6f72c9e771ec4d311.cpp:883:警告:有符号和无符号整数表达式之间的比较
c:\docume~1\thao\locals~1\temp\thong\python27_compiled\sc_f68f7a878bf7b27c6f72c9e771ec4d311.cpp:774:警告:未使用的变量“Nhistx_ar”
c:\docume~1\thao\locals~1\temp\thong\python27_compiled\sc_f68f7a878bf7b27c6f72c9e771ec4d311.cpp:775:警告:未使用的变量“Shistx_ar”
c:\docume~1\thao\locals~1\temp\thong\python27_compiled\sc_f68f7a878bf7b27c6f72c9e771ec4d311.cpp:776:警告:未使用的变量“Dhistx_ar”
c:\docume~1\thao\locals~1\temp\thong\python27_compiled\sc_f68f7a878bf7b27c6f72c9e771ec4d311.cpp:785:警告:未使用的变量“NVhistx_ar”
c:\docume~1\thao\locals~1\temp\thong\python27_compiled\sc_f68f7a878bf7b27c6f72c9e771ec4d311.cpp:786:警告:未使用的变量“SVhistx_ar”
c:\docume~1\thao\locals~1\temp\thong\python27_compiled\sc_f68f7a878bf7b27c6f72c9e771ec4d311.cpp:787:警告:未使用的变量“DVhistx_ar”
c:\docume~1\thao\locals~1\temp\thong\python27_compiled\sc_f68f7a878bf7b27c6f72c9e771ec4d311.cpp:796:警告:未使用的变量“NThist_ar”
c:\docume~1\thao\locals~1\temp\thong\python27_compiled\sc_f68f7a878bf7b27c6f72c9e771ec4d311.cpp:797:警告:未使用的变量“SThist_ar”
c:\docume~1\thao\locals~1\temp\thong\python27_compiled\sc_f68f7a878bf7b27c6f72c9e771ec4d311.cpp:798:警告:未使用的变量“DThist_ar”
c:\docume~1\thao\locals~1\temp\thong\python27_compiled\sc_f68f7a878bf7b27c6f72c9e771ec4d311.cpp:817:警告:未使用的变量“Ndiscont”
c:\docume~1\thao\locals~1\temp\thong\python27_compiled\sc_f68f7a878bf7b27c6f72c9e771ec4d311.cpp:818:警告:未使用的变量“Sdiscont”
c:\docume~1\thao\locals~1\temp\thong\python27_compiled\sc_f68f7a878bf7b27c6f72c9e771ec4d311.cpp:819:警告:未使用的变量“Ddiscont”
回溯(最近一次调用最后一次):
文件“C:\Documents and Settings\thao\Desktop\mackey-glass.py”,第 33 行,位于
dde.run()
文件“C:\Python27\lib\site-packages\pydelay_dde23.py”,第 1120 行,运行中
编译器 = 'gcc')
文件“C:\Python27\lib\site-packages\scipy\weave\inline_tools.py”,第 355 行,内联
**千瓦)
文件“C:\ Python27 \ lib \ site-packages \ scipy \ weave \ inline_tools.py”,第482行,在compile_function中
详细=详细,**kw)
文件“C:\Python27\lib\site-packages\scipy\weave\ext_tools.py”,第 367 行,编译中
详细 = 详细,**kw)
文件“C:\Python27\lib\site-packages\scipy\weave\build_tools.py”,第 272 行,在 build_extension 中
设置(名称 = module_name,ext_modules = [ext],verbose = verb)
文件“C:\Python27\lib\site-packages\numpy\distutils\core.py”,第 186 行,在安装程序中
返回旧设置(**新属性)
文件“C:\Python27\lib\distutils\core.py”,第 169 行,在安装程序中
引发 SystemExit,“错误:” + str(msg)
distutils.errors.CompileError:错误:命令“g++ -O2 -Wall -IC:\ Python27 \ lib \ site-packages \ scipy \ weave -IC:\ Python27 \ lib \ site-packages \ scipy \ weave \ scxx -IC: \Python27\lib\site-packages\numpy\core\include -IC:\Python27\include -IC:\Python27\PC -c c:\docume~1\thao\locals~1\temp\thong\python27_compiled\sc_f68f7a878bf7b27c6f72c9e771ec4d311。 cpp -o c:\docume~1\thao\locals~1\temp\thong\python27_intermediate\compiler_a77d1132635f0379270bcb96a5e542fc\Release\docume~1\thao\locals~1\temp\thong\python27_compiled\sc_f68f7a878bf7b27c6f72c 9e771ec4d311.o”失败,退出状态为 1
[5.8秒内完成,退出代码为1]
方法1(使用if else语句更新eqns
这是一个Python字典):
import numpy as np
import pylab as pl
from pydelay import dde23
eqn_1a='0.25 * x(t-tau) / (1.0 + pow(x(t-tau),10.0)) -0.1*x'
eqn_1b='0.45 * x'
eqns = { 'x' : eqn_1a if 'x>1' else eqn_1b}
dde = dde23(eqns=eqns, params={'tau': 15})
dde.set_sim_params(tfinal=1000, dtmax=1.0, AbsTol=10**-6, RelTol=10**-3)
histfunc = {'x': lambda t: 0.5 }
dde.hist_from_funcs(histfunc, 51)
dde.run()
sol1 = dde.sample(2, 3, 0.1)
x1 = sol1['x']
方法2(向求解器提供c代码):
eqns = { 'x' : 'f(x, tau)'}
# We can define a c function to be used in the equations
mycode = """
double f(double x, double tau) {
if (x>1){
return (0.25 * x(t-tau) / (1.0 + pow(x(t-tau),10.0)) -0.1*x);
}
else{
return (0.45 * x);
}
}
"""
dde = dde23(eqns=eqns, params={'tau': 15}, supportcode=mycode)
dde.set_sim_params(tfinal=1000, dtmax=1.0, AbsTol=10**-6, RelTol=10**-3)
histfunc = {'x': lambda t: 0.5 }
dde.hist_from_funcs(histfunc, 51)
dde.run()
sol1 = dde.sample(1, 300, 1)
x1 = sol1['x']