|
312 | 312 | " # Check that (1' * G * u - u' * (G' * 1)) is numerically zero\n",
|
313 | 313 | " print('1T * G * u - uT * (GT * 1) =', np.abs(sum1 - sum2))"
|
314 | 314 | ]
|
315 |
| - }, |
316 |
| - { |
317 |
| - "cell_type": "markdown", |
318 |
| - "metadata": {}, |
319 |
| - "source": [ |
320 |
| - "### Advanced topics" |
321 |
| - ] |
322 |
| - }, |
323 |
| - { |
324 |
| - "cell_type": "markdown", |
325 |
| - "metadata": {}, |
326 |
| - "source": [ |
327 |
| - "* In the following example, we demonstrate the QR factorization of a basis matrix.\n", |
328 |
| - "The representation is similar to LAPACK's [`dgeqrf`](https://www.netlib.org/lapack/explore-html/dd/d9a/group__double_g_ecomputational_ga3766ea903391b5cf9008132f7440ec7b.html#ga3766ea903391b5cf9008132f7440ec7b), with elementary reflectors in the lower triangular block, scaled by `tau`." |
329 |
| - ] |
330 |
| - }, |
331 |
| - { |
332 |
| - "cell_type": "code", |
333 |
| - "execution_count": null, |
334 |
| - "metadata": {}, |
335 |
| - "outputs": [], |
336 |
| - "source": [ |
337 |
| - "qr = np.array([1, -1, 4, 1, 4, -2, 1, 4, 2, 1, -1, 0], dtype=\"float64\")\n", |
338 |
| - "tau = np.empty(3, dtype=\"float64\")\n", |
339 |
| - "\n", |
340 |
| - "qr, tau = ceed.qr_factorization(qr, tau, 4, 3)\n", |
341 |
| - "\n", |
342 |
| - "print('qr =')\n", |
343 |
| - "print(qr.reshape(4, 3))\n", |
344 |
| - "\n", |
345 |
| - "print('tau =')\n", |
346 |
| - "print(tau)" |
347 |
| - ] |
348 |
| - }, |
349 |
| - { |
350 |
| - "cell_type": "markdown", |
351 |
| - "metadata": {}, |
352 |
| - "source": [ |
353 |
| - "* In the following example, we demonstrate the symmetric Schur decomposition of a basis matrix" |
354 |
| - ] |
355 |
| - }, |
356 |
| - { |
357 |
| - "cell_type": "code", |
358 |
| - "execution_count": null, |
359 |
| - "metadata": {}, |
360 |
| - "outputs": [], |
361 |
| - "source": [ |
362 |
| - "A = np.array([0.19996678, 0.0745459, -0.07448852, 0.0332866,\n", |
363 |
| - " 0.0745459, 1., 0.16666509, -0.07448852,\n", |
364 |
| - " -0.07448852, 0.16666509, 1., 0.0745459,\n", |
365 |
| - " 0.0332866, -0.07448852, 0.0745459, 0.19996678], dtype=\"float64\")\n", |
366 |
| - "\n", |
367 |
| - "lam = ceed.symmetric_schur_decomposition(A, 4)\n", |
368 |
| - "\n", |
369 |
| - "print(\"Q =\")\n", |
370 |
| - "for i in range(4):\n", |
371 |
| - " for j in range(4):\n", |
372 |
| - " if A[j+4*i] <= 1E-14 and A[j+4*i] >= -1E-14:\n", |
373 |
| - " A[j+4*i] = 0\n", |
374 |
| - " print(\"%12.8f\"%A[j+4*i])\n", |
375 |
| - "\n", |
376 |
| - "print(\"lambda =\")\n", |
377 |
| - "for i in range(4):\n", |
378 |
| - " if lam[i] <= 1E-14 and lam[i] >= -1E-14:\n", |
379 |
| - " lam[i] = 0\n", |
380 |
| - " print(\"%12.8f\"%lam[i])" |
381 |
| - ] |
382 |
| - }, |
383 |
| - { |
384 |
| - "cell_type": "markdown", |
385 |
| - "metadata": {}, |
386 |
| - "source": [ |
387 |
| - "* In the following example, we demonstrate the simultaneous diagonalization of a basis matrix" |
388 |
| - ] |
389 |
| - }, |
390 |
| - { |
391 |
| - "cell_type": "code", |
392 |
| - "execution_count": null, |
393 |
| - "metadata": {}, |
394 |
| - "outputs": [], |
395 |
| - "source": [ |
396 |
| - "M = np.array([0.19996678, 0.0745459, -0.07448852, 0.0332866,\n", |
397 |
| - " 0.0745459, 1., 0.16666509, -0.07448852,\n", |
398 |
| - " -0.07448852, 0.16666509, 1., 0.0745459,\n", |
399 |
| - " 0.0332866, -0.07448852, 0.0745459, 0.19996678], dtype=\"float64\")\n", |
400 |
| - "K = np.array([3.03344425, -3.41501767, 0.49824435, -0.11667092,\n", |
401 |
| - " -3.41501767, 5.83354662, -2.9167733, 0.49824435,\n", |
402 |
| - " 0.49824435, -2.9167733, 5.83354662, -3.41501767,\n", |
403 |
| - " -0.11667092, 0.49824435, -3.41501767, 3.03344425], dtype=\"float64\")\n", |
404 |
| - "\n", |
405 |
| - "x, lam = ceed.simultaneous_diagonalization(K, M, 4)\n", |
406 |
| - "\n", |
407 |
| - "print(\"x =\")\n", |
408 |
| - "for i in range(4):\n", |
409 |
| - " for j in range(4):\n", |
410 |
| - " if x[j+4*i] <= 1E-14 and x[j+4*i] >= -1E-14:\n", |
411 |
| - " x[j+4*i] = 0\n", |
412 |
| - " print(\"%12.8f\"%x[j+4*i])\n", |
413 |
| - "\n", |
414 |
| - "print(\"lambda =\")\n", |
415 |
| - "for i in range(4):\n", |
416 |
| - " if lam[i] <= 1E-14 and lam[i] >= -1E-14:\n", |
417 |
| - " lam[i] = 0\n", |
418 |
| - " print(\"%12.8f\"%lam[i])" |
419 |
| - ] |
420 | 315 | }
|
421 | 316 | ],
|
422 | 317 | "metadata": {
|
|
0 commit comments