# How to increase matrix size and getting high fidelity for HHL algorithm in Qiskit?

I have followed an example that Qiskit provides here. I tried to increase the matrix size to 16x16 and change num_ancillae and num_time_slices in create_eigs() function.

# set the random seed to get the same pseudo-random matrix for every run
aqua_globals.random_seed = 0
matrix = random_hermitian(16)
vector = matrix.dot(np.array([1, 2, 3, 1, 1, 2, 3, 1, 1, 2, 3, 1, 1, 2, 3, 1]))

m = np.array(matrix)

orig_size = len(vector)
matrix, vector, truncate_powerdim, truncate_hermitian = HHL.matrix_resize(matrix, vector)

# Initialize eigenvalue finding module
eigs = create_eigs(matrix, 2, 2, True)
num_q, num_a = eigs.get_register_sizes()

# Initialize initial state module
init_state = Custom(num_q, state_vector=vector)

# Initialize reciprocal rotation module
reci = LookupRotation(negative_evals=eigs._negative_evals, evo_time=eigs._evo_time)

algo = HHL(matrix, vector, truncate_powerdim, truncate_hermitian, eigs,
init_state, reci, num_q, num_a, orig_size)
result = algo.run(QuantumInstance(Aer.get_backend('statevector_simulator'),
seed_simulator=aqua_globals.random_seed,
seed_transpiler=aqua_globals.random_seed))
print("solution ", np.round(result['solution'], 5))

result_ref = NumPyLSsolver(matrix, vector).run()
print("classical solution ", np.round(result_ref['solution'], 5))

print("probability %f" % result['probability_result'])
fidelity(result['solution'], result_ref['solution'])


The result is

solution  [ 0.19079-0.95092j  0.26228+0.11189j -0.30868-0.55258j -0.7612 +1.61692j
0.64665-0.26533j  1.20938-0.40916j -0.51564+1.98277j -0.08177-2.63386j
1.14807-0.1218j   0.87798+1.39184j  0.8494 +0.00695j -0.0529 -0.11107j
0.28287+0.74082j  1.3964 +0.23344j -2.15506+1.25378j  1.07591-0.70505j]
classical solution  [1.+0.j 2.+0.j 3.-0.j 1.-0.j 1.+0.j 2.-0.j 3.+0.j 1.-0.j 1.-0.j 2.+0.j
3.+0.j 1.-0.j 1.+0.j 2.-0.j 3.-0.j 1.+0.j]
probability 0.000000
fidelity 0.040951


I got very low fidelity when I change num_ancillae to 2, if I increase num_ancillae to 3, my kernel just died without showing any error.

My questions are,

What cause my kernel died? Is it normal?

How does num_ancillae and num_time_slices affect the fidelity?

You can use the command: !free -h to see how much memory you have left.
I also see that you are using statevector_simulator is can be very expensive. Instead, switched to qasm_simulator or ibmq_qasm_simulator. See if doing that will fix the memory problem.