Dear Sympy 
Please let me know what is the format of sympy expression after printing on 
screen?
As can be seen based on the following code:
   
--------------------------------------------------------------------------

from contextlib import redirect_stdout
from io import StringIO
from lmfit.models import ExpressionModel
import matplotlib.pyplot as plt
from numpy import exp, linspace, sin
import sympy
off, am, x , x0, phase = sympy.symbols('off, am, x , x0, phase')
f = StringIO()
with redirect_stdout(f):
     expr = off + am * sympy.exp(-x / x0) * sympy.sin(x * phase)
     print(expr)
s = f.getvalue()
mod = ExpressionModel(expr, independent_vars=['x'])

x = linspace(0, 10, 501)
a = dict(off=0.25, am=1.0, x0=2.0, phase=0.04)
b = dict(x=x)
params = mod.make_params(**a)
y = mod.eval(params, **b)
out = mod.fit(y, params, **b)
print(out.fit_report())
plt.plot(x, y, 'o')
plt.plot(x, out.init_fit, '--', label='initial fit')
plt.plot(x, out.best_fit, '-', label='best fit')
--------------------------------------------------------------------
It gives error:

   [ self.expr = expr.strip()
AttributeError: 'Add' object has no attribute 'strip']

Which means expr is not recognized by ExpressionModel, while if instead of 
expr*, s* is passed in  ExpressionModel as follow :
mod = ExpressionModel(s, independent_vars=['x'])
Then it works pretty well. 
Is there another way to make a string from a sympy expression that in it 
sympy.exp or sympy.log  changed to exp and log. Parse and replace doesn't 
work because in real example is not fully executed.
Regards,
zk

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sympy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/4feb9a7e-3ba8-4574-a9c7-884464fb6a8fn%40googlegroups.com.

Reply via email to