In [3]:
import numpy as np
import sympy as sy
from sympy import I, exp
from sympy.utilities.codegen import codegen
In [2]:
z = sy.symbols("z", real=False)
wn, zeta, a,h,r1,s0,s1 = sy.symbols("wn, zeta,a,h,r1,s0,s1", real=True)
In [5]:
pc1 = -wn*zeta + I*wn*sy.sqrt(1-zeta**2)
pc2 = -wn*zeta - I*wn*sy.sqrt(1-zeta**2)
rd = exp(-wn*zeta*h)
argd = wn*sy.sqrt(1-zeta**2)*h
reald = rd*sy.cos(argd)
imd = rd*sy.sin(argd)
Ac = sy.poly(z**2 - 2*reald*z + rd**2, z)
ad = sy.exp(-a*h)
Ao = sy.poly(z-ad, z)
Acl = Ac*Ao
A = sy.poly((z-1)*(z-exp(-2*h)), z)
B = sy.poly((-1+h+exp(-2*h))*z + 1-(1+h)*exp(-2*h), z)
print Ac
In [50]:
A.subs(h,0.14).subs(wn, 2*np.sqrt(2)).subs(zeta, np.cos(np.pi/4.0))
Out[50]:
In [51]:
R = sy.poly(z+r1, z)
S = sy.poly(s0*z + s1, z)
dioph=(A*R+B*S-Acl).all_coeffs()
In [52]:
sol=sy.solve(dioph, (r1,s0,s1))
In [53]:
print sy.simplify(sy.expand(sol[r1].subs(h,0.14).subs(wn, 2*np.sqrt(2)).subs(zeta, np.cos(np.pi/4.0))))
print sy.simplify(sy.expand(sol[s0].subs(h,0.14).subs(wn, 2*np.sqrt(2)).subs(zeta, np.cos(np.pi/4.0))))
print sy.simplify(sy.expand(sol[s1].subs(h,0.14).subs(wn, 2*np.sqrt(2)).subs(zeta, np.cos(np.pi/4.0))))
In [4]:
# Reorganize solution expression for matlab code generation
sol_expr = ('RST_example', [sol[r1], sol[s0], sol[s1], Ac.subs(z, 1)/B.subs(z,1), ad])
In [2]:
# Export to matlab code
[(m_name, m_code)] = codegen(sol_expr, 'octave')
In [1]:
print m_code
with open("/home/kjartan/Dropbox/undervisning/tec/MR2007/matlab/RST_example.m", "w") as text_file:
text_file.write(m_code)
In [57]:
Out[57]:
In [ ]:
np.exp(-0.28)
In [ ]:
0.28*180.0/np.pi
In [ ]:
hh=0.14
-1+hh+np.exp(-2*hh)
In [ ]:
1-(1+hh)*np.exp(-2*hh)
In [ ]:
np.exp(-2*hh)
In [ ]:
sy.expand()