# [SciPy-user] Handling of constraints in cobyla

Nils Wagner nwagner at mecha.uni-stuttgart.de
Fri Jun 17 10:03:44 CDT 2005

```Hi all,

How can I replace the first two constraints (con1 and con2) in my
program (see below) ?
In general the constraints con1 and con2 are not given explicitely in my
problem, but they follow from an eigenvalue analysis.

w = linalg.eigvals(K,M)
w[0].real - xi0
w[1].real - xi0

If I have more constraints like con3 and con4 is there a way to simplify
the procedure ?

I would be grateful for your help

Nils

from scipy import *

def test2(x,xi0):
function = lambda x: dot(c,x)
con1 = lambda x: (4*x[0]+2*x[1])/3-xi0   # First Eigenvalue is
no lower than xi0
con2 = lambda x: 4*x[0]-xi0              # Second eigenvalue is
no lower than xi0
con3 = lambda x: x[0]                    # Stiffness parameter >= 0
con4 = lambda x: x[1]                    # Stiffness parameter >= 0

x = optimize.fmin_cobyla(function, x0, [con1, con2, con3, con4],
rhobeg=0.1,
rhoend=1e-5, iprint=0, maxfun=1400)
return x

c = array(([3,1]))
#
# Initial stiffness parameters
#
x0 = array(([1.3,1]))
#
# Parameter-dependent stiffness matrix
#
K = array(([4*x0[0]+x0[1],x0[1]],[x0[1],4*x0[0]+x0[1]]))
#
# Constant mass matrix
#
M = array(([2,1],[1,2]))

w = linalg.eigvals(K,M)

print 'Eigenvalues of the initial design',w
print 'Exakt eigenvalues',(4*x0[0]+2*x0[1])/3, 4*x0[0]
#
# Find the smallest eigenvalue
#
ind = argsort(w.real)
ws = take(w,ind)
xi0 = ws[0].real

x = test2(x0,xi0)

print 'Optimal stiffness parameters',x

M = array(([2,1],[1,2]))
K = array(([4*x[0]+x[1],x[1]],[x[1],4*x[0]+x[1]]))

w = linalg.eigvals(K,M)
print 'Eigenvalues of the optimal design',w

```