

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 OpenQASM 3.0 計算梯度
<a name="braket-openqasm-computing-gradients"></a>

在 `shots=0`（確切） 模式下執行時，Amazon Braket 支援隨需和本機模擬器上的漸層運算。這是透過使用聯合差異化方法來實現的。若要指定要運算的漸層，您可以提供適當的 pragma，如下列範例中程式碼所示。

```
OPENQASM 3.0;
input float alpha;

bit[2] b;
qubit[2] q;

h q[0];
h q[1];
rx(alpha) q[0];
rx(alpha) q[1];
b[0] = measure q[0];
b[1] = measure q[1];

#pragma braket result adjoint_gradient h(q[0]) @ i(q[1]) alpha
```

您也可以在 pragma 中指定`all`關鍵字，而不是明確列出所有個別參數。這將根據列出的所有`input`參數計算漸層，當參數數量非常大時，這可能是方便的選項。在此情況下，pragma 看起來會像下列範例中的程式碼。

```
#pragma braket result adjoint_gradient h(q[0]) @ i(q[1]) all
```

Amazon Braket 的 OpenQASM 3.0 實作支援所有可觀測類型，包括個別運算子、張量產品、Hermitian 可觀測和可`Sum`觀測。運算漸層時您想要使用的特定運算子必須包裝在 `expectation()` 函數中，而且必須明確指定可觀測的每個字詞對其執行動作的 qubit。