or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

atoms.mdconstraints.mderrors.mdexpressions.mdindex.mdproblems.mdsolvers.mdtransforms.md

atoms.mddocs/

0

# Mathematical Functions (Atoms)

1

2

Pre-defined mathematical functions in CVXPY that preserve convexity properties and enable complex mathematical expressions. These atoms are the building blocks for optimization objectives and constraints, organized by mathematical category.

3

4

## Capabilities

5

6

### Linear Algebra Operations

7

8

Basic linear algebra operations for vectors and matrices.

9

10

```python { .api }

11

def matmul(lh_exp, rh_exp):

12

"""

13

Matrix multiplication.

14

15

Parameters:

16

- lh_exp: left matrix expression

17

- rh_exp: right matrix expression

18

19

Returns:

20

- Expression: matrix product

21

"""

22

...

23

24

def multiply(lh_exp, rh_exp):

25

"""

26

Element-wise multiplication.

27

28

Parameters:

29

- lh_exp, rh_exp: expressions of compatible shapes

30

31

Returns:

32

- Expression: element-wise product

33

"""

34

...

35

36

def vdot(x, y):

37

"""

38

Vector dot product (flattens inputs first).

39

40

Parameters:

41

- x, y: vector expressions

42

43

Returns:

44

- Expression: scalar dot product

45

"""

46

...

47

48

def outer(x, y):

49

"""

50

Outer product of two vectors.

51

52

Parameters:

53

- x, y: vector expressions

54

55

Returns:

56

- Expression: matrix outer product

57

"""

58

...

59

60

def trace(expr):

61

"""

62

Trace of a square matrix.

63

64

Parameters:

65

- expr: square matrix expression

66

67

Returns:

68

- Expression: scalar trace

69

"""

70

...

71

72

def diag(expr, k=0):

73

"""

74

Extract diagonal or create diagonal matrix.

75

76

Parameters:

77

- expr: vector (to create diagonal matrix) or matrix (to extract diagonal)

78

- k: diagonal offset (0 for main diagonal)

79

80

Returns:

81

- Expression: diagonal vector or diagonal matrix

82

"""

83

...

84

```

85

86

### Array Construction and Manipulation

87

88

Functions for constructing and reshaping arrays and matrices.

89

90

```python { .api }

91

def hstack(arg_list):

92

"""

93

Horizontal stack of expressions.

94

95

Parameters:

96

- arg_list: list of expressions with compatible shapes

97

98

Returns:

99

- Expression: horizontally stacked matrix

100

"""

101

...

102

103

def vstack(arg_list):

104

"""

105

Vertical stack of expressions.

106

107

Parameters:

108

- arg_list: list of expressions with compatible shapes

109

110

Returns:

111

- Expression: vertically stacked matrix

112

"""

113

...

114

115

def bmat(block_lists):

116

"""

117

Block matrix construction.

118

119

Parameters:

120

- block_lists: nested list of matrix expressions

121

122

Returns:

123

- Expression: block matrix

124

"""

125

...

126

127

def reshape(expr, shape):

128

"""

129

Reshape expression.

130

131

Parameters:

132

- expr: expression to reshape

133

- shape: new shape tuple

134

135

Returns:

136

- Expression: reshaped expression

137

"""

138

...

139

140

def vec(X, order='F'):

141

"""

142

Vectorize matrix (flatten to column vector).

143

144

Parameters:

145

- X: matrix expression

146

- order: 'F' (Fortran/column-major) or 'C' (C/row-major)

147

148

Returns:

149

- Expression: vectorized matrix

150

"""

151

...

152

153

def transpose(expr):

154

"""

155

Transpose of an expression.

156

157

Parameters:

158

- expr: matrix expression

159

160

Returns:

161

- Expression: transposed matrix

162

"""

163

...

164

```

165

166

### Aggregation Functions

167

168

Functions that aggregate elements across arrays.

169

170

```python { .api }

171

def sum(expr, axis=None, keepdims=False):

172

"""

173

Sum along specified axis.

174

175

Parameters:

176

- expr: expression to sum

177

- axis: axis to sum along (None for all elements)

178

- keepdims: whether to keep singleton dimensions

179

180

Returns:

181

- Expression: sum result

182

"""

183

...

184

185

def mean(expr, axis=None, keepdims=False):

186

"""

187

Mean along specified axis.

188

189

Parameters:

190

- expr: expression to average

191

- axis: axis to average along

192

- keepdims: whether to keep singleton dimensions

193

194

Returns:

195

- Expression: mean result

196

"""

197

...

198

199

def max(expr, axis=None, keepdims=False):

200

"""

201

Maximum along specified axis.

202

203

Parameters:

204

- expr: expression

205

- axis: axis to take maximum along

206

- keepdims: whether to keep singleton dimensions

207

208

Returns:

209

- Expression: maximum result

210

"""

211

...

212

213

def min(expr, axis=None, keepdims=False):

214

"""

215

Minimum along specified axis.

216

217

Parameters:

218

- expr: expression

219

- axis: axis to take minimum along

220

- keepdims: whether to keep singleton dimensions

221

222

Returns:

223

- Expression: minimum result

224

"""

225

...

226

227

def sum_largest(expr, k):

228

"""

229

Sum of k largest elements.

230

231

Parameters:

232

- expr: expression

233

- k: number of largest elements to sum

234

235

Returns:

236

- Expression: sum of k largest elements

237

"""

238

...

239

240

def sum_smallest(expr, k):

241

"""

242

Sum of k smallest elements.

243

244

Parameters:

245

- expr: expression

246

- k: number of smallest elements to sum

247

248

Returns:

249

- Expression: sum of k smallest elements

250

"""

251

...

252

```

253

254

### Elementwise Functions

255

256

Functions applied element-wise to expressions.

257

258

```python { .api }

259

def abs(expr):

260

"""

261

Absolute value (element-wise).

262

263

Parameters:

264

- expr: expression

265

266

Returns:

267

- Expression: absolute value

268

"""

269

...

270

271

def square(expr):

272

"""

273

Square (element-wise).

274

275

Parameters:

276

- expr: expression

277

278

Returns:

279

- Expression: squared expression

280

"""

281

...

282

283

def sqrt(expr):

284

"""

285

Square root (element-wise).

286

287

Parameters:

288

- expr: expression (must be non-negative)

289

290

Returns:

291

- Expression: square root

292

"""

293

...

294

295

def power(expr, p):

296

"""

297

Power function (element-wise).

298

299

Parameters:

300

- expr: expression

301

- p: power (scalar)

302

303

Returns:

304

- Expression: expr raised to power p

305

"""

306

...

307

308

def exp(expr):

309

"""

310

Exponential function (element-wise).

311

312

Parameters:

313

- expr: expression

314

315

Returns:

316

- Expression: e^expr

317

"""

318

...

319

320

def log(expr):

321

"""

322

Natural logarithm (element-wise).

323

324

Parameters:

325

- expr: expression (must be positive)

326

327

Returns:

328

- Expression: natural log

329

"""

330

...

331

332

def log1p(expr):

333

"""

334

log(1 + expr) (element-wise).

335

336

Parameters:

337

- expr: expression

338

339

Returns:

340

- Expression: log(1 + expr)

341

"""

342

...

343

344

def entr(expr):

345

"""

346

Entropy function: -expr * log(expr) (element-wise).

347

348

Parameters:

349

- expr: expression (must be non-negative)

350

351

Returns:

352

- Expression: entropy

353

"""

354

...

355

356

def maximum(lh_exp, rh_exp):

357

"""

358

Element-wise maximum of two expressions.

359

360

Parameters:

361

- lh_exp, rh_exp: expressions

362

363

Returns:

364

- Expression: element-wise maximum

365

"""

366

...

367

368

def minimum(lh_exp, rh_exp):

369

"""

370

Element-wise minimum of two expressions.

371

372

Parameters:

373

- lh_exp, rh_exp: expressions

374

375

Returns:

376

- Expression: element-wise minimum

377

"""

378

...

379

```

380

381

### Norms and Distances

382

383

Various norm functions for vectors and matrices.

384

385

```python { .api }

386

def norm(expr, p=2, axis=None, keepdims=False):

387

"""

388

General norm function.

389

390

Parameters:

391

- expr: expression

392

- p: norm type (1, 2, 'inf', 'fro', 'nuc')

393

- axis: axis to compute norm along

394

- keepdims: whether to keep singleton dimensions

395

396

Returns:

397

- Expression: norm value

398

"""

399

...

400

401

def norm1(expr):

402

"""

403

L1 norm (sum of absolute values).

404

405

Parameters:

406

- expr: expression

407

408

Returns:

409

- Expression: L1 norm

410

"""

411

...

412

413

def norm2(expr, axis=None):

414

"""

415

L2 norm (Euclidean norm).

416

417

Parameters:

418

- expr: expression

419

- axis: axis to compute norm along

420

421

Returns:

422

- Expression: L2 norm

423

"""

424

...

425

426

def norm_inf(expr):

427

"""

428

Infinity norm (maximum absolute value).

429

430

Parameters:

431

- expr: expression

432

433

Returns:

434

- Expression: infinity norm

435

"""

436

...

437

438

def pnorm(expr, p=2, axis=None, keepdims=False, max_denom=1024):

439

"""

440

P-norm with rational approximation.

441

442

Parameters:

443

- expr: expression

444

- p: norm order (>= 1)

445

- axis: axis to compute norm along

446

- keepdims: whether to keep singleton dimensions

447

- max_denom: maximum denominator for rational approximation

448

449

Returns:

450

- Expression: p-norm

451

"""

452

...

453

454

def mixed_norm(expr, p=2, q=1):

455

"""

456

Mixed norm: ||expr||_{p,q}

457

458

Parameters:

459

- expr: matrix expression

460

- p: norm for columns

461

- q: norm for aggregating column norms

462

463

Returns:

464

- Expression: mixed norm

465

"""

466

...

467

```

468

469

### Matrix Functions

470

471

Functions specific to matrix expressions.

472

473

```python { .api }

474

def lambda_max(expr):

475

"""

476

Maximum eigenvalue of symmetric matrix.

477

478

Parameters:

479

- expr: symmetric matrix expression

480

481

Returns:

482

- Expression: maximum eigenvalue

483

"""

484

...

485

486

def lambda_min(expr):

487

"""

488

Minimum eigenvalue of symmetric matrix.

489

490

Parameters:

491

- expr: symmetric matrix expression

492

493

Returns:

494

- Expression: minimum eigenvalue

495

"""

496

...

497

498

def sigma_max(expr):

499

"""

500

Maximum singular value.

501

502

Parameters:

503

- expr: matrix expression

504

505

Returns:

506

- Expression: maximum singular value

507

"""

508

...

509

510

def log_det(expr):

511

"""

512

Log determinant of positive definite matrix.

513

514

Parameters:

515

- expr: positive definite matrix expression

516

517

Returns:

518

- Expression: log determinant

519

"""

520

...

521

522

def matrix_frac(X, P):

523

"""

524

Matrix fractional function: tr(X^T P^-1 X).

525

526

Parameters:

527

- X: matrix expression

528

- P: positive definite matrix

529

530

Returns:

531

- Expression: matrix fractional value

532

"""

533

...

534

535

def quad_form(x, P, assume_PSD=False):

536

"""

537

Quadratic form: x^T P x.

538

539

Parameters:

540

- x: vector expression

541

- P: matrix (should be PSD for convexity)

542

- assume_PSD: whether to assume P is PSD

543

544

Returns:

545

- Expression: quadratic form

546

"""

547

...

548

549

def quad_over_lin(X, y):

550

"""

551

Quadratic over linear: sum(X^2) / y.

552

553

Parameters:

554

- X: expression

555

- y: positive scalar expression

556

557

Returns:

558

- Expression: quadratic over linear

559

"""

560

...

561

```

562

563

### Special Functions

564

565

Advanced mathematical functions for specific applications.

566

567

```python { .api }

568

def geo_mean(expr):

569

"""

570

Geometric mean.

571

572

Parameters:

573

- expr: expression with positive elements

574

575

Returns:

576

- Expression: geometric mean

577

"""

578

...

579

580

def harmonic_mean(expr):

581

"""

582

Harmonic mean.

583

584

Parameters:

585

- expr: expression with positive elements

586

587

Returns:

588

- Expression: harmonic mean

589

"""

590

...

591

592

def log_sum_exp(expr, axis=None, keepdims=False):

593

"""

594

Log-sum-exponential: log(sum(exp(expr))).

595

596

Parameters:

597

- expr: expression

598

- axis: axis to sum along

599

- keepdims: whether to keep singleton dimensions

600

601

Returns:

602

- Expression: log-sum-exp

603

"""

604

...

605

606

def kl_div(x, y):

607

"""

608

Kullback-Leibler divergence.

609

610

Parameters:

611

- x, y: expressions (probability distributions)

612

613

Returns:

614

- Expression: KL divergence

615

"""

616

...

617

618

def rel_entr(x, y):

619

"""

620

Relative entropy: x * log(x/y).

621

622

Parameters:

623

- x, y: expressions

624

625

Returns:

626

- Expression: relative entropy

627

"""

628

...

629

630

def huber(expr, M=1):

631

"""

632

Huber function (robust loss).

633

634

Parameters:

635

- expr: expression

636

- M: threshold parameter

637

638

Returns:

639

- Expression: Huber loss

640

"""

641

...

642

643

def sum_squares(expr):

644

"""

645

Sum of squares.

646

647

Parameters:

648

- expr: expression

649

650

Returns:

651

- Expression: sum of squared elements

652

"""

653

...

654

```

655

656

### Complex Number Operations

657

658

Functions for working with complex-valued expressions.

659

660

```python { .api }

661

def conj(expr):

662

"""

663

Complex conjugate (element-wise).

664

665

Parameters:

666

- expr: expression

667

668

Returns:

669

- Expression: complex conjugate

670

"""

671

...

672

673

def imag(expr):

674

"""

675

Imaginary part (element-wise).

676

677

Parameters:

678

- expr: expression

679

680

Returns:

681

- Expression: imaginary part

682

"""

683

...

684

685

def real(expr):

686

"""

687

Real part (element-wise).

688

689

Parameters:

690

- expr: expression

691

692

Returns:

693

- Expression: real part

694

"""

695

...

696

```

697

698

### Statistical Functions

699

700

Statistical and probability functions.

701

702

```python { .api }

703

def std(expr, axis=None, keepdims=False):

704

"""

705

Standard deviation along specified axis.

706

707

Parameters:

708

- expr: expression

709

- axis: axis to compute std along

710

- keepdims: whether to keep singleton dimensions

711

712

Returns:

713

- Expression: standard deviation

714

"""

715

...

716

717

def var(expr, axis=None, keepdims=False):

718

"""

719

Variance along specified axis.

720

721

Parameters:

722

- expr: expression

723

- axis: axis to compute variance along

724

- keepdims: whether to keep singleton dimensions

725

726

Returns:

727

- Expression: variance

728

"""

729

...

730

731

def cvar(expr, alpha):

732

"""

733

Conditional value at risk (CVaR).

734

735

Parameters:

736

- expr: expression representing losses

737

- alpha: confidence level (0 < alpha < 1)

738

739

Returns:

740

- Expression: CVaR value

741

"""

742

...

743

744

def ptp(expr, axis=None, keepdims=False):

745

"""

746

Peak-to-peak (range) along specified axis.

747

748

Parameters:

749

- expr: expression

750

- axis: axis to compute range along

751

- keepdims: whether to keep singleton dimensions

752

753

Returns:

754

- Expression: peak-to-peak range

755

"""

756

...

757

```

758

759

### Cumulative Functions

760

761

Cumulative operations on arrays.

762

763

```python { .api }

764

def cumsum(expr, axis=None):

765

"""

766

Cumulative sum along specified axis.

767

768

Parameters:

769

- expr: expression

770

- axis: axis to compute cumulative sum along

771

772

Returns:

773

- Expression: cumulative sum

774

"""

775

...

776

777

def cummax(expr, axis=None):

778

"""

779

Cumulative maximum along specified axis.

780

781

Parameters:

782

- expr: expression

783

- axis: axis to compute cumulative max along

784

785

Returns:

786

- Expression: cumulative maximum

787

"""

788

...

789

790

def cumprod(expr, axis=None):

791

"""

792

Cumulative product along specified axis.

793

794

Parameters:

795

- expr: expression

796

- axis: axis to compute cumulative product along

797

798

Returns:

799

- Expression: cumulative product

800

"""

801

...

802

```

803

804

### Advanced Elementwise Functions

805

806

Additional elementwise mathematical functions.

807

808

```python { .api }

809

def ceil(expr):

810

"""

811

Ceiling function (element-wise).

812

813

Parameters:

814

- expr: expression

815

816

Returns:

817

- Expression: ceiling values

818

"""

819

...

820

821

def floor(expr):

822

"""

823

Floor function (element-wise).

824

825

Parameters:

826

- expr: expression

827

828

Returns:

829

- Expression: floor values

830

"""

831

...

832

833

def inv_pos(expr):

834

"""

835

Reciprocal of positive part: 1/pos(expr).

836

837

Parameters:

838

- expr: expression

839

840

Returns:

841

- Expression: reciprocal of positive part

842

"""

843

...

844

845

def logistic(expr):

846

"""

847

Logistic function: 1/(1 + exp(-expr)).

848

849

Parameters:

850

- expr: expression

851

852

Returns:

853

- Expression: logistic function values

854

"""

855

...

856

857

def loggamma(expr):

858

"""

859

Log gamma function (element-wise).

860

861

Parameters:

862

- expr: expression (must be positive)

863

864

Returns:

865

- Expression: log gamma values

866

"""

867

...

868

869

def log_normcdf(expr):

870

"""

871

Log of normal cumulative distribution function.

872

873

Parameters:

874

- expr: expression

875

876

Returns:

877

- Expression: log normal CDF values

878

"""

879

...

880

881

def neg(expr):

882

"""

883

Negative part: max(-expr, 0).

884

885

Parameters:

886

- expr: expression

887

888

Returns:

889

- Expression: negative part

890

"""

891

...

892

893

def pos(expr):

894

"""

895

Positive part: max(expr, 0).

896

897

Parameters:

898

- expr: expression

899

900

Returns:

901

- Expression: positive part

902

"""

903

...

904

905

def scalene(expr, alpha, beta):

906

"""

907

Scalene function.

908

909

Parameters:

910

- expr: expression

911

- alpha, beta: scalar parameters

912

913

Returns:

914

- Expression: scalene function values

915

"""

916

...

917

918

def sign(expr):

919

"""

920

Sign function (element-wise).

921

922

Parameters:

923

- expr: expression

924

925

Returns:

926

- Expression: sign values (-1, 0, or 1)

927

"""

928

...

929

930

def xexp(expr):

931

"""

932

Extended exponential: expr * exp(expr).

933

934

Parameters:

935

- expr: expression

936

937

Returns:

938

- Expression: extended exponential

939

"""

940

...

941

942

def one_minus_pos(expr):

943

"""

944

One minus positive part: 1 - pos(expr).

945

946

Parameters:

947

- expr: expression

948

949

Returns:

950

- Expression: one minus positive part

951

"""

952

...

953

954

def diff_pos(x, y):

955

"""

956

Positive difference: pos(x - y).

957

958

Parameters:

959

- x, y: expressions

960

961

Returns:

962

- Expression: positive difference

963

"""

964

...

965

```

966

967

### Advanced Matrix Functions

968

969

Additional matrix operations and eigenvalue functions.

970

971

```python { .api }

972

def condition_number(expr):

973

"""

974

Condition number of a matrix.

975

976

Parameters:

977

- expr: matrix expression

978

979

Returns:

980

- Expression: condition number

981

"""

982

...

983

984

def resolvent(expr, s):

985

"""

986

Matrix resolvent: (sI - expr)^(-1).

987

988

Parameters:

989

- expr: matrix expression

990

- s: scalar parameter

991

992

Returns:

993

- Expression: resolvent matrix

994

"""

995

...

996

997

def eye_minus_inv(expr):

998

"""

999

(I - expr)^(-1) for matrices with eigenvalues < 1.

1000

1001

Parameters:

1002

- expr: matrix expression

1003

1004

Returns:

1005

- Expression: inverse of (I - expr)

1006

"""

1007

...

1008

1009

def lambda_sum_largest(expr, k):

1010

"""

1011

Sum of k largest eigenvalues.

1012

1013

Parameters:

1014

- expr: symmetric matrix expression

1015

- k: number of largest eigenvalues to sum

1016

1017

Returns:

1018

- Expression: sum of k largest eigenvalues

1019

"""

1020

...

1021

1022

def lambda_sum_smallest(expr, k):

1023

"""

1024

Sum of k smallest eigenvalues.

1025

1026

Parameters:

1027

- expr: symmetric matrix expression

1028

- k: number of smallest eigenvalues to sum

1029

1030

Returns:

1031

- Expression: sum of k smallest eigenvalues

1032

"""

1033

...

1034

1035

def gen_lambda_max(A, B):

1036

"""

1037

Generalized maximum eigenvalue of (A, B).

1038

1039

Parameters:

1040

- A, B: matrix expressions

1041

1042

Returns:

1043

- Expression: generalized maximum eigenvalue

1044

"""

1045

...

1046

1047

def pf_eigenvalue(expr):

1048

"""

1049

Perron-Frobenius eigenvalue of non-negative matrix.

1050

1051

Parameters:

1052

- expr: non-negative matrix expression

1053

1054

Returns:

1055

- Expression: Perron-Frobenius eigenvalue

1056

"""

1057

...

1058

1059

def tr_inv(expr):

1060

"""

1061

Trace of matrix inverse: tr(expr^(-1)).

1062

1063

Parameters:

1064

- expr: positive definite matrix expression

1065

1066

Returns:

1067

- Expression: trace of inverse

1068

"""

1069

...

1070

```

1071

1072

### Quantum Information Functions

1073

1074

Functions for quantum information theory.

1075

1076

```python { .api }

1077

def von_neumann_entr(expr):

1078

"""

1079

von Neumann entropy: -tr(expr * log(expr)).

1080

1081

Parameters:

1082

- expr: positive semidefinite matrix (density matrix)

1083

1084

Returns:

1085

- Expression: von Neumann entropy

1086

"""

1087

...

1088

1089

def quantum_rel_entr(A, B):

1090

"""

1091

Quantum relative entropy: tr(A * (log(A) - log(B))).

1092

1093

Parameters:

1094

- A, B: positive semidefinite matrices

1095

1096

Returns:

1097

- Expression: quantum relative entropy

1098

"""

1099

...

1100

1101

def quantum_cond_entr(A, B):

1102

"""

1103

Quantum conditional entropy.

1104

1105

Parameters:

1106

- A, B: positive semidefinite matrices

1107

1108

Returns:

1109

- Expression: quantum conditional entropy

1110

"""

1111

...

1112

```

1113

1114

### Array Manipulation and Broadcasting

1115

1116

Functions for reshaping and manipulating arrays.

1117

1118

```python { .api }

1119

def broadcast_to(expr, shape):

1120

"""

1121

Broadcast expression to specified shape.

1122

1123

Parameters:

1124

- expr: expression

1125

- shape: target shape tuple

1126

1127

Returns:

1128

- Expression: broadcasted expression

1129

"""

1130

...

1131

1132

def deep_flatten(expr):

1133

"""

1134

Flatten expression to 1D vector.

1135

1136

Parameters:

1137

- expr: expression

1138

1139

Returns:

1140

- Expression: flattened vector

1141

"""

1142

...

1143

1144

def permute_dims(expr, axes):

1145

"""

1146

Permute dimensions of expression.

1147

1148

Parameters:

1149

- expr: expression

1150

- axes: permutation of dimension indices

1151

1152

Returns:

1153

- Expression: permuted expression

1154

"""

1155

...

1156

1157

def swapaxes(expr, axis1, axis2):

1158

"""

1159

Swap two axes of expression.

1160

1161

Parameters:

1162

- expr: expression

1163

- axis1, axis2: axes to swap

1164

1165

Returns:

1166

- Expression: expression with swapped axes

1167

"""

1168

...

1169

1170

def moveaxis(expr, source, destination):

1171

"""

1172

Move axis from source to destination position.

1173

1174

Parameters:

1175

- expr: expression

1176

- source: source axis position

1177

- destination: destination axis position

1178

1179

Returns:

1180

- Expression: expression with moved axis

1181

"""

1182

...

1183

1184

def concatenate(expressions, axis=0):

1185

"""

1186

Concatenate expressions along specified axis.

1187

1188

Parameters:

1189

- expressions: list of expressions to concatenate

1190

- axis: axis along which to concatenate

1191

1192

Returns:

1193

- Expression: concatenated expression

1194

"""

1195

...

1196

1197

def diff(expr, k=1, axis=-1):

1198

"""

1199

Discrete difference along specified axis.

1200

1201

Parameters:

1202

- expr: expression

1203

- k: order of difference (number of times differences are taken)

1204

- axis: axis along which differences are taken

1205

1206

Returns:

1207

- Expression: discrete differences

1208

"""

1209

...

1210

```

1211

1212

### Matrix Wrapping Functions

1213

1214

Functions that wrap matrices with special properties.

1215

1216

```python { .api }

1217

def hermitian_wrap(expr):

1218

"""

1219

Wrap expression to ensure Hermitian property.

1220

1221

Parameters:

1222

- expr: matrix expression

1223

1224

Returns:

1225

- Expression: Hermitian matrix

1226

"""

1227

...

1228

1229

def psd_wrap(expr):

1230

"""

1231

Wrap expression to ensure positive semidefinite property.

1232

1233

Parameters:

1234

- expr: matrix expression

1235

1236

Returns:

1237

- Expression: PSD matrix

1238

"""

1239

...

1240

1241

def skew_symmetric_wrap(expr):

1242

"""

1243

Wrap expression to ensure skew-symmetric property.

1244

1245

Parameters:

1246

- expr: matrix expression

1247

1248

Returns:

1249

- Expression: skew-symmetric matrix

1250

"""

1251

...

1252

1253

def symmetric_wrap(expr):

1254

"""

1255

Wrap expression to ensure symmetric property.

1256

1257

Parameters:

1258

- expr: matrix expression

1259

1260

Returns:

1261

- Expression: symmetric matrix

1262

"""

1263

...

1264

```

1265

1266

### Triangular Matrix Operations

1267

1268

Operations related to triangular matrices.

1269

1270

```python { .api }

1271

def upper_tri(expr, k=0):

1272

"""

1273

Extract upper triangular part of matrix.

1274

1275

Parameters:

1276

- expr: matrix expression

1277

- k: diagonal offset (0 for main diagonal)

1278

1279

Returns:

1280

- Expression: upper triangular matrix

1281

"""

1282

...

1283

1284

def vec_to_upper_tri(expr, strict=False):

1285

"""

1286

Convert vector to upper triangular matrix.

1287

1288

Parameters:

1289

- expr: vector expression

1290

- strict: whether to exclude diagonal elements

1291

1292

Returns:

1293

- Expression: upper triangular matrix

1294

"""

1295

...

1296

```

1297

1298

### Special Advanced Functions

1299

1300

Specialized mathematical functions for specific applications.

1301

1302

```python { .api }

1303

def conv(x, y):

1304

"""

1305

Convolution of two vectors.

1306

1307

Parameters:

1308

- x, y: vector expressions

1309

1310

Returns:

1311

- Expression: convolution result

1312

"""

1313

...

1314

1315

def convolve(x, y):

1316

"""

1317

Convolution of two expressions.

1318

1319

Parameters:

1320

- x, y: expressions

1321

1322

Returns:

1323

- Expression: convolution result

1324

"""

1325

...

1326

1327

def kron(X, Y):

1328

"""

1329

Kronecker product of two matrices.

1330

1331

Parameters:

1332

- X, Y: matrix expressions

1333

1334

Returns:

1335

- Expression: Kronecker product

1336

"""

1337

...

1338

1339

def partial_trace(expr, dims, axis):

1340

"""

1341

Partial trace operation (quantum mechanics).

1342

1343

Parameters:

1344

- expr: matrix expression

1345

- dims: dimensions of subsystems

1346

- axis: axis to trace over

1347

1348

Returns:

1349

- Expression: partial trace result

1350

"""

1351

...

1352

1353

def partial_transpose(expr, dims, axis):

1354

"""

1355

Partial transpose operation (quantum mechanics).

1356

1357

Parameters:

1358

- expr: matrix expression

1359

- dims: dimensions of subsystems

1360

- axis: axis to transpose

1361

1362

Returns:

1363

- Expression: partial transpose result

1364

"""

1365

...

1366

1367

def dotsort(expr, W):

1368

"""

1369

Dot sort function.

1370

1371

Parameters:

1372

- expr: expression

1373

- W: weight matrix

1374

1375

Returns:

1376

- Expression: dot sort result

1377

"""

1378

...

1379

1380

def dist_ratio(expr, X, Y):

1381

"""

1382

Distance ratio function.

1383

1384

Parameters:

1385

- expr, X, Y: expressions

1386

1387

Returns:

1388

- Expression: distance ratio

1389

"""

1390

...

1391

1392

def length(expr):

1393

"""

1394

Length (magnitude) of vector expression.

1395

1396

Parameters:

1397

- expr: vector expression

1398

1399

Returns:

1400

- Expression: vector length

1401

"""

1402

...

1403

1404

def inv_prod(expr):

1405

"""

1406

Inverse product function.

1407

1408

Parameters:

1409

- expr: expression

1410

1411

Returns:

1412

- Expression: inverse product

1413

"""

1414

...

1415

1416

def perspective(f, x):

1417

"""

1418

Perspective function: x * f(expr/x).

1419

1420

Parameters:

1421

- f: convex function

1422

- x: positive scaling expression

1423

1424

Returns:

1425

- Expression: perspective function result

1426

"""

1427

...

1428

1429

def promote(expr, shape):

1430

"""

1431

Promote expression to specified shape.

1432

1433

Parameters:

1434

- expr: expression

1435

- shape: target shape

1436

1437

Returns:

1438

- Expression: promoted expression

1439

"""

1440

...

1441

1442

def scalar_product(x, y):

1443

"""

1444

Scalar product of two expressions.

1445

1446

Parameters:

1447

- x, y: expressions

1448

1449

Returns:

1450

- Expression: scalar product

1451

"""

1452

...

1453

1454

def tv(expr, *args):

1455

"""

1456

Total variation function.

1457

1458

Parameters:

1459

- expr: expression

1460

- args: additional arguments for TV computation

1461

1462

Returns:

1463

- Expression: total variation

1464

"""

1465

...

1466

```

1467

1468

### Usage Examples

1469

1470

```python

1471

import cvxpy as cp

1472

import numpy as np

1473

1474

# Linear algebra example

1475

A = cp.Parameter((4, 5))

1476

x = cp.Variable(5)

1477

b = cp.Parameter(4)

1478

1479

# Matrix-vector operations

1480

Ax = A @ x # or cp.matmul(A, x)

1481

residual = Ax - b

1482

objective = cp.Minimize(cp.sum_squares(residual))

1483

1484

# Norm constraints

1485

constraints = [

1486

cp.norm(x, 1) <= 1, # L1 constraint (sparse)

1487

cp.norm(x, 2) <= 2, # L2 constraint (bounded)

1488

cp.norm(x, 'inf') <= 0.5 # Infinity norm constraint

1489

]

1490

1491

# Portfolio optimization with different objectives

1492

n = 10

1493

w = cp.Variable(n) # portfolio weights

1494

mu = cp.Parameter(n) # expected returns

1495

Sigma = cp.Parameter((n, n), PSD=True) # covariance matrix

1496

1497

# Different risk measures

1498

variance_risk = cp.quad_form(w, Sigma)

1499

mad_risk = cp.norm(w, 1) # mean absolute deviation proxy

1500

max_weight_risk = cp.norm(w, 'inf') # concentration risk

1501

1502

# Utility functions

1503

log_utility = cp.sum(cp.log(w)) # log utility (must have w > 0)

1504

entropy_regularization = cp.sum(cp.entr(w)) # entropy regularization

1505

1506

# Matrix completion problem

1507

m, n = 20, 15

1508

X = cp.Variable((m, n))

1509

mask = np.random.binomial(1, 0.3, (m, n)) # observed entries

1510

Y_obs = cp.Parameter((m, n)) # observed values

1511

1512

# Nuclear norm minimization (low-rank recovery)

1513

objective = cp.Minimize(cp.norm(X, 'nuc'))

1514

observed_constraints = [X[i, j] == Y_obs[i, j] for i, j in zip(*np.where(mask))]

1515

1516

matrix_completion = cp.Problem(objective, observed_constraints)

1517

1518

# Robust optimization with Huber loss

1519

data_fit = cp.sum(cp.huber(A @ x - b, M=1.0))

1520

robust_objective = cp.Minimize(data_fit + 0.1 * cp.norm(x, 1))

1521

1522

# Geometric programming (requires DGP mode)

1523

x = cp.Variable(pos=True)

1524

y = cp.Variable(pos=True)

1525

gp_objective = cp.Minimize(x * y)

1526

gp_constraints = [x + y == 1, cp.geo_mean([x, y]) >= 0.1]

1527

gp_problem = cp.Problem(gp_objective, gp_constraints)

1528

gp_problem.solve(gp=True)

1529

```