Вычисление значения синуса с использованием ряда Тейлора квантовыми вычислениями

У меня есть код на Python Qiskit, как его улучшить, чтобы значения Quantum Sin(x) были приближенные к Sin(x)?

from qiskit import QuantumCircuit, transpile, assemble
from qiskit_aer import AerSimulator
import numpy as np
import math


def taylor_series_circuit(x, epsilon, num_qubits=4, num_iterations=10):
    qc = QuantumCircuit(num_qubits, num_qubits)
    qc.h(range(num_qubits))

    # Вычисление значения синуса с использованием ряда Тейлора
    term = x
    n = 1
    while abs(term) > epsilon and n <= num_iterations:
        for i in range(num_qubits):
            angle = term / (2 ** i)
            qc.ry(angle, i)
        for i in range(num_qubits - 1):
            qc.cx(i, i + 1)
        term = ((-1) ** n * x ** (2 * n + 1)) / (2 * n + 1) / math.factorial(2 * n + 1)
        n += 1

    qc.measure(range(num_qubits), range(num_qubits))
    return qc


def run_quantum_circuit(x, epsilon, num_qubits=4, num_iterations=10):
    qc = taylor_series_circuit(x, epsilon, num_qubits, num_iterations)
    transpiled_qc = transpile(qc, AerSimulator())
    qasm_qc = assemble(transpiled_qc)
    simulator = AerSimulator()
    result = simulator.run(transpiled_qc).result()
    counts = result.get_counts()
    prob_0 = counts.get('0' * num_qubits, 0) / sum(counts.values())
    return prob_0


a = 0
b = 4
h = 0.3
epsilon = 1e-6
num_qubits = 4
num_iterations = 10

x_values = np.arange(a, b + h, h)
sin_values = np.sin(x_values)
quantum_sin_values = [run_quantum_circuit(x, epsilon, num_qubits, num_iterations) for x in x_values]

for x, sin_val, quantum_sin_val in zip(x_values, sin_values, quantum_sin_values):
    print(f"x = {x}, sin(x) = {sin_val}, Quantum Sin(x) = {quantum_sin_val}")
import matplotlib.pyplot as plt

plt.plot(x_values, sin_values, label='sin(x)')
plt.plot(x_values, quantum_sin_values, label='Quantum Sin(x)')
plt.xlabel('x')
plt.ylabel('Value')
plt.title('Comparison of sin(x) and Quantum Sin(x)')
plt.legend()
plt.show()

Ответы (0 шт):