-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathauxilary.py
49 lines (31 loc) · 964 Bytes
/
auxilary.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sun Jan 15 14:11:31 2023
@author: pham
"""
import numpy as np
def auxilary(c,b,normv,epsilon):
bc = b/c
ind = np.argsort(bc)
bc = bc[ind]
c = c[ind]
b = b[ind]
mu = (np.cumsum(np.sqrt(c[::-1])*np.sqrt(b[::-1]))[::-1])**2 /((normv - np.concatenate(([0],epsilon*np.cumsum(c[:-1]))))**2)
u = epsilon*np.ones(c.shape)
ind_ = np.where(mu< (bc/epsilon**2) )[0]
u[ind_[0]:] = np.sqrt(bc[ind_[0]:]/mu[ind_[0]])
return u[np.argsort(ind)]
n = 100
c = np.random.rand(n)
b = np.random.rand(n)
epsilon = np.random.rand(1)[0]
normv = 1
while epsilon*np.sum(c) > normv:
epsilon = epsilon/2
print('normv - epsilon*a = ' + str(epsilon*np.sum(c)))
u = auxilary(c,b,normv,epsilon)
print('sum(b/u) = ' + str(np.sum(b/u)) )
print('<a,u> = ' +str(c.dot(u)) )
print('min(u) = ' +str(np.min(u)))
print('epsilon = ' + str(epsilon))