Skip to content

Commit 8f21c0c

Browse files
committed
fix behavior of iddata initial conditions
1 parent c70bb28 commit 8f21c0c

4 files changed

Lines changed: 18 additions & 16 deletions

File tree

test/test_reference.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,15 @@ def test_virtualReference(self):
5252
t,y = scipysig.dlsim(sys, u, t)
5353
y = y[:,0]
5454
data = iddata(y,u,t_step,[0,0])
55-
#wrong initial conditions
56-
with self.assertRaises(ValueError):
57-
virtualReference(data, num, den)
55+
56+
r, _ = virtualReference(data, num, den)
57+
for i in range(len(r)):
58+
self.assertTrue(np.isclose(r[i], u[i]))
5859

59-
#wrong initial conditions
6060
data = iddata(y,u,t_step,[0,0,0])
61-
with self.assertRaises(ValueError):
62-
virtualReference(data, num, den)
61+
r, _ = virtualReference(data, num, den)
62+
for i in range(len(r)):
63+
self.assertTrue(np.isclose(r[i], u[i]))
6364

6465
#test good data, first order
6566
data = iddata(y,u,t_step,[0])
@@ -80,3 +81,4 @@ def test_virtualReference(self):
8081
r, _ = virtualReference(data, num, den)
8182
for i in range(len(r)):
8283
self.assertTrue(np.isclose(r[i], u[i]))
84+

test/test_vrft.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,10 @@ def test_iv(self):
7878
ExtendedTF([1], [1,0,0,0], dt=t_step),
7979
ExtendedTF([1, 0], [1,1], dt=t_step)]
8080

81-
##import pdb
81+
#import pdb
8282
#pdb.set_trace()
8383

84-
# theta, _, loss, _ = compute_vrft(data, refModel, control, prefilter, iv=True)
84+
#theta, _, loss, _ = compute_vrft(data, refModel, control, prefilter, iv=True)
8585

8686

8787

vrft/iddata.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,9 @@ def __init__(self, y: np.ndarray,
6161
else:
6262
self.y0 = np.array(y0) if not isinstance(y0, np.ndarray) else np.array([y0]).flatten()
6363

64-
if self.y0.size == 0:
64+
if self.y0.size == 0 or self.y0.ndim == None or \
65+
np.allclose(self.y0, 0.):
6566
self.y0 = None
66-
elif self.y0.ndim == 0:
67-
self.y0 = np.expand_dims(self.y0, axis=0)
6867

6968

7069
def check(self):

vrft/vrft_algo.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,13 @@ def virtualReference(data: iddata, num: np.ndarray, den: np.ndarray) -> np.ndarr
3838
offset_M = len(num) - M - 1
3939
offset_N = len(den) - N - 1
4040

41-
lag = N - M #number of initial conditions
41+
lag = N - M # number of initial conditions
42+
y0 = data.y0
4243

43-
if (lag > 0 and data.y0 is None):
44-
raise ValueError("Wrong initial condition.")
44+
if y0 is None:
45+
y0 = [0.] * lag
4546

46-
if (lag != len(data.y0)):
47+
if y0 is not None and (lag != len(y0)):
4748
raise ValueError("Wrong initial condition size.")
4849

4950
reference = np.zeros_like(data.y)
@@ -60,7 +61,7 @@ def virtualReference(data: iddata, num: np.ndarray, den: np.ndarray) -> np.ndarr
6061
index = k + i - N
6162
if (index < 0):
6263
left_side += den[offset_N +
63-
abs(i - N)] * data.y0[abs(index) - 1]
64+
abs(i - N)] * y0[abs(index) - 1]
6465
else:
6566
left_side += den[offset_N + abs(i - N)] * (
6667
data.y[index] if index < L else 0)

0 commit comments

Comments
 (0)