{ "cells": [ { "cell_type": "markdown", "metadata": { "toc-hr-collapsed": false }, "source": [ "# Chapter2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## コメント" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "# コメントです \n", "print(1) # 1を表示" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'\\nコメント1\\nコメント2\\n'" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "'''\n", "コメント1\n", "コメント2\n", "'''" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Print文" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Control\n" ] } ], "source": [ "print('Control')" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "制御工学\n" ] } ], "source": [ "print('制御' + '工学')" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "制御工学制御工学制御工学制御工学制御工学\n" ] } ], "source": [ "print('制御工学' * 5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## エスケープシーケンス" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " ' \" \\ \n" ] } ], "source": [ "print(' \\' \\\" \\\\ ') # クォーテションやバックスラッシュの表示" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "制御\t 工学 \n", "制御\t 工学 \n", "制御\t 工学 \n", "制御\t 工学 \n", "制御\t 工学 \n", "\n" ] } ], "source": [ "print('制御\\t 工学 \\n' * 5) # タブと改行" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## カウント" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "8" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len('せいぎょこうがく')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 数値" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "12" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "12" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "10" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "0b1010" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "161" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "0xA1" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.0" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "10 / 5" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "17 // 5" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "17 % 5" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "9" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "3 ** 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 変数" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "\n" ] } ], "source": [ "x = 1\n", "print(x)\n", "print(type(x))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.0\n", "\n" ] } ], "source": [ "y = 1.0\n", "print(y)\n", "print(type(y))" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Control\n", "\n" ] } ], "source": [ "msg = 'Control'\n", "print(msg)\n", "print(type(msg))" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "True\n", "\n" ] } ], "source": [ "ok = True\n", "print(ok)\n", "print(type(ok))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 型変換" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "\n" ] } ], "source": [ "z = int(y)\n", "print(z)\n", "print(type(z))" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "\n" ] } ], "source": [ "word = str(x)\n", "print(word)\n", "print(type(word))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## リスト" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[3, 5, 2, 4, 6, 1]" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data1 = [3, 5, 2, 4, 6, 1]\n", "data1" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[[3, 5, 2], [4, 6, 1]]" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data2 = [ [3, 5, 2], [4, 6, 1] ]\n", "data2" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data1[0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### スライス" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[3, 5]" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data1[0:2]" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[2, 4]" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data1[2:4]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### メソッド" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[3, 5, 2, 4, 6, 1, 8]\n" ] } ], "source": [ "data1 = [3, 5, 2, 4, 6, 1]\n", "data1.append(8)\n", "print(data1)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[8, 3, 5, 2, 4, 6, 1, 8]\n" ] } ], "source": [ "data1.insert(0, 8)\n", "print(data1)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[3, 5, 2, 4, 6, 1, 8]\n" ] } ], "source": [ "del data1[0]\n", "print(data1)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[5, 2, 4, 6, 1, 8]\n" ] } ], "source": [ "data1.pop(0)\n", "print(data1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 浅いコピー深いコピー" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[10, 2, 3]\n", "[10, 2, 3]\n" ] } ], "source": [ "x = [ 1, 2, 3]\n", "y = x\n", "y[0] = 10\n", "print(y) # [10, 2, 3]と出力される \n", "print(x) # xの値も[10, 2, 3]に変更される" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[10, 2, 3]\n", "[1, 2, 3]\n" ] } ], "source": [ "x = [ 1, 2, 3]\n", "y = x.copy()\n", "y[0] = 10\n", "print(y) # [10, 2, 3]と出力される\n", "print(x) # xの値は変更されずに[1, 2, 3]と出力される" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## タプル" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(1, 2, 3, 4)\n", "\n" ] } ], "source": [ "tuple = (1,2,3,4) # tuple = 1,2,3,4 でもよい \n", "print(tuple)\n", "print(type(tuple))" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "ename": "TypeError", "evalue": "'tuple' object does not support item assignment", "output_type": "error", "traceback": [ "\u001b[0;31m\u001b[0m", "\u001b[0;31mTypeError\u001b[0mTraceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtuple\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m5\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" ] } ], "source": [ "tuple[0] = 5" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[5, 2, 3, 4]" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = [1, 2, 3, 4]\n", "data[0] = 5\n", "data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 辞書" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "d = { 'linestyle': '-.', 'color': 'k' }" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'linestyle': '-.', 'color': 'k'}\n", "-.\n", "k\n" ] } ], "source": [ "print(d) \n", "print(d['linestyle']) \n", "print(d['color'])" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'linestyle': '--', 'color': 'k', 'label': 'plt'}\n" ] } ], "source": [ "x = { 'linestyle':'--', 'label':'plt' } \n", "d.update(x)\n", "print(d)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## if文" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x is positive\n" ] } ], "source": [ "x = 1\n", "\n", "if x < 0:\n", " print('x is negative')\n", "elif x == 0:\n", " print('x is zero')\n", "else:\n", " print('x is positive')" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x and y are negative\n" ] } ], "source": [ "x ,y = -1, -1\n", "\n", "if x < 0 and y < 0:\n", " print('x and y are negative')" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x or y is negative\n" ] } ], "source": [ "x, y = 1, -1\n", "\n", "if x < 0 or y < 0:\n", " print('x or y is negative')" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x is in y\n" ] } ], "source": [ "x = 2\n", "y = [1, 2, 3] \n", "\n", "if x in y:\n", " print('x is in y')" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x is not in y\n" ] } ], "source": [ "x = 0\n", "y = [1, 2, 3] \n", "\n", "if x not in y:\n", " print('x is not in y')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## for文" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n", "1\n", "2\n" ] } ], "source": [ "for x in [0, 1, 2]: \n", " print(x)" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n", "1\n", "2\n" ] } ], "source": [ "for x in range(0, 3): \n", " print(x)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 a\n", "1 b\n", "2 c\n" ] } ], "source": [ "for i, word in enumerate(['a', 'b', 'c']): \n", " print(i, word)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 練習問題" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n", "python\n", "1\n", "python\n", "2\n", "python\n" ] } ], "source": [ "# プログラム1\n", "for x in range(3):\n", " print(x) \n", " print('python')" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n", "1\n", "2\n", "python\n" ] } ], "source": [ "# プログラム2\n", "for x in range(3):\n", " print(x) \n", "print('python')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 関数定義" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [], "source": [ "def say_hello(): \n", " print('こんにちは')" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "こんにちは\n" ] } ], "source": [ "say_hello()" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [], "source": [ "def subject(name): \n", " print(name + '工学')" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "制御工学\n" ] } ], "source": [ "subject('制御')" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [], "source": [ "def add(a, b): \n", " c = a + b\n", " return c" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "8\n" ] } ], "source": [ "result = add(3, 5)\n", "print(result)" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [], "source": [ "def add(*args):\n", " return args[0] + args[1]" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "8\n" ] } ], "source": [ "value = [3, 5]\n", "result = add(*value)\n", "print(result)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## クロージャ" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [], "source": [ "def outer(a, b): \n", " def inner(c):\n", " return c * (a + b) \n", " return inner" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "9\n" ] } ], "source": [ "f = outer(1, 2) \n", "r = f(3) \n", "print(r)" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "21\n" ] } ], "source": [ "f2 = outer(3, 4)\n", "r2 = f2(3)\n", "print(r2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ラムダ式(無名関数)" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "14.0\n" ] } ], "source": [ "c = (lambda a, b: 2*a + 3*b)(1.0, 4.0) \n", "print(c)" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[32, 31, 30, 29, 28]\n" ] } ], "source": [ "data1 = [1, 2, 3, 4, 5]\n", "data2 = [10, 9, 8, 7, 6]\n", "result = list(map(lambda a, b:2*a + 3*b, data1, data2)) \n", "print(result)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ジェネレータ" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [], "source": [ "def linestyle_generator():\n", " linestyle = ['-', '--', '-.', ':'] \n", " lineID = 0\n", " while True:\n", " yield linestyle[lineID]\n", " lineID = (lineID + 1) % len(linestyle)" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-\n", "--\n", "-.\n", ":\n", "-\n" ] } ], "source": [ "LS = linestyle_generator()\n", "for i in range(5):\n", " print(next(LS)) # LSの中の yield 部分を1回ずつ実行" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## リスト内包表記" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, 2, 3, 4, 5]\n" ] } ], "source": [ "t = (1, 2, 3, 4, 5) \n", "r1 = [i for i in t] \n", "print(r1)" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2, 4]\n" ] } ], "source": [ "r2 = [i for i in t if i % 2 == 0] \n", "print(r2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 練習問題" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "35.70714214271425\n", "35.70714214271425\n", "35.70714214271425\n" ] } ], "source": [ "from numpy import sqrt\n", "\n", "# for文を使って足し合わせる \n", "\n", "s=0\n", "for x in range(1,51):\n", " s += x\n", "print(sqrt(s))\n", "\n", "# sumを使う\n", "s = sum(range(1,51)) \n", "print(sqrt(s))\n", "\n", "# generator式を使う\n", "s = sum(x for x in range(1,51)) \n", "print(sqrt(s))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## モジュール" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [], "source": [ "import numpy" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [], "source": [ "from numpy import sqrt" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [], "source": [ "from numpy.linalg import *" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [], "source": [ "import math" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.479425538604203" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "math.sin(0.5)" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.3010299956639812" ] }, "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ "math.log10(2)" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.6931471805599453" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "math.log(2)" ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3.141592653589793" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "math.pi" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.718281828459045" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "math.e" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Numpy" ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1 2]\n", " [-3 4]]\n" ] } ], "source": [ "A = np.array([ [1, 2], [-3, 4]])\n", "print(A)" ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1 -3]\n", " [ 2 4]]\n" ] } ], "source": [ "print(A.T)" ] }, { "cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1 2]\n", " [3 4]]\n" ] } ], "source": [ "B = np.abs(A)\n", "print(B)" ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "10.000000000000002" ] }, "execution_count": 82, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.det(A)" ] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2" ] }, "execution_count": 83, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.matrix_rank(A)" ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1 2]\n" ] } ], "source": [ "x = np.array([1, 2])\n", "print(x)" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.23606797749979" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.norm(x)" ] }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "eigenvalue= [2.5+1.93649167j 2.5-1.93649167j]\n", "eigenvector=\n", " [[0.38729833-0.5j 0.38729833+0.5j]\n", " [0.77459667+0.j 0.77459667-0.j ]]\n" ] } ], "source": [ "w, v = np.linalg.eig(A)\n", "print('eigenvalue=',w)\n", "print('eigenvector=\\n',v)" ] }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0.4 -0.2]\n", " [ 0.3 0.1]]\n" ] } ], "source": [ "C = np.linalg.inv(A)\n", "print(C)" ] }, { "cell_type": "code", "execution_count": 88, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0 1 2 3 4 5 6 7 8 9]\n" ] } ], "source": [ "T = np.arange(0, 10, 1)\n", "print(T)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Matplotlib" ] }, { "cell_type": "code", "execution_count": 89, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "x = np.arange(0, 4 * np.pi, 0.1)\n", "y = np.sin(x)\n", "plt.plot(x, y, c='k')\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", "plt.grid()\n", "\n", "# plt.savefig(\"matplot_plotexp.pdf\", transparent=True, bbox_inches=\"tight\", pad_inches=0.0)" ] }, { "cell_type": "code", "execution_count": 90, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(3, 2.3))\n", "ax.plot(x, y, c='k')\n", "ax.set_xlabel('x')\n", "ax.set_ylabel('y')\n", "\n", "ax.set_xticks(np.linspace(0, 12, 7))\n", "ax.set_yticks(np.linspace(-1, 1, 9))\n", "\n", "ax.grid()\n", "\n", "#fig.savefig(\"matplot_plotexp.pdf\", transparent=True, bbox_inches=\"tight\", pad_inches=0.0)" ] }, { "cell_type": "code", "execution_count": 91, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# fig, ax = plt.subplots(2,1)\n", "fig, ax = plt.subplots(2,1, figsize=(6, 4))\n", "\n", "x = np.arange(0, 4 * np.pi, 0.1)\n", "y = np.sin(x)\n", "z = np.cos(x)\n", "w = y + z\n", "\n", "ax[0].plot(x, y, ls='-', label='sin', c='k')\n", "ax[0].plot(x, z, ls='-.', label='cos', c='k')\n", "ax[0].set_xlabel('x')\n", "ax[0].set_ylabel('y, z')\n", "ax[0].set_xlim(0, 4*np.pi)\n", "ax[0].grid()\n", "ax[0].legend()\n", "\n", "ax[1].plot(x, w, color='k', marker='.')\n", "ax[1].set_xlabel('x')\n", "ax[1].set_ylabel('w')\n", "ax[1].set_xlim(0, 4*np.pi)\n", "ax[1].grid(ls=':')\n", "\n", "fig.tight_layout()\n", "# fig.savefig(\"matplot_plotexp2.pdf\", transparent=True, bbox_inches=\"tight\", pad_inches=0.0)" ] }, { "cell_type": "code", "execution_count": 92, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", " \n", "x = np.arange(1, 13)\n", "y1 = np.repeat(2, 12)\n", "y2 = np.repeat(1, 12)\n", " \n", "markers1 = [\".\", \",\", \"o\", \"v\", \"^\", \"<\", \">\", \"1\", \"2\", \"3\", \"4\", \"8\"]\n", "markers2 = [\"s\", \"p\", \"*\", \"h\", \"H\", \"+\", \"x\", \"D\", \"d\", \"|\", \"_\", \"$x$\"]\n", "\n", "fig, ax = plt.subplots(1,1, figsize=(6, 1))\n", "for i in x-1:\n", " ax.scatter(x[i], y1[i], color='k', s=100, marker=markers1[i])\n", " ax.scatter(x[i], y2[i], color='k', s=100, marker=markers2[i])\n", " ax.set_xticks(np.linspace(1, 12, 12))\n", " ax.set_yticks([1,2])\n", " \n", "# fig.savefig(\"markers.pdf\", transparent=True, bbox_inches=\"tight\", pad_inches=0.0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Scipy" ] }, { "cell_type": "code", "execution_count": 93, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAN4AAACtCAYAAADf0cHYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJztnXl4FFW6/z8nSYdAAiYQthiBIGtA2XREZRAUZkYWHQV1GK/boDxeRlFxmXFUxIXRH4M7XMUr/HD0KgN6VQy4sETBcQSTEJAQCIEAaQIhMQsJSWd97x/dnUlIJ+lOV3cVRX2ep55096k+51tv5e1TVee871EigoWFRXAJ0VuAhcW5iOV4FhY6YDmehYUOWI5nYaEDluNZWOiA5XgWFjpgOZ6FhQ5YjmdhoQOW41lY6ECY3gJ8JTY2Vvr166e3DAuLZqSmphaKSHdv9j3rHK9fv36kpKS0WF5cXExMTEwQFXmHpcs3zkZdSqkj3tYTsEtNpdRKpdRJpdSeFsqVUup1pVS2Umq3Umq0Fu0WFRVpUY3mWLp8w+y6AnmPtwr4TSvl1wIDXdsc4E0tGo2Li9OiGs2xdPmG2XUF7FJTRLYqpfq1ssv1wN/FGR7xg1IqWinVW0SO+9NuTk4OiYmJ/lShORkZGWzdupU+ffo0fBYdHc2VV14JwNatWykrK2vyndjYWC677DIAtmzZQmVlZZPyXr16MWbMGAC+/vprampqmpTHx8czYsQIADZs2MCZUSh9+/Zl+PDhZGdnc/To0WaaL7zwQoYMGUJ1dTUbN25sVj548GAGDBhARUUFycnJzcqHDRtGv379OHXqFNu2bWtWfvHFF3PBBRdQXFzM999/36w8KiqKq666ioKCAnbs2NGs/Be/+AXdu3fn+PHjpKWlNSu/4ooriImJITc3l927dzcr/+Uvf0mXLl04fPgwGRkZzconTpxIp06dyM7OZv/+/dTX12Oz2ejVqxcjR45str/PiEjANqAfsKeFsiRgXKP3m4FLWth3DpACpMTFxUlBQYHk5eWJ3W6XoqIiyc7OloqKCsnIyJCamhpJTU0VEZGUlBQREUlNTZW6ujrJyMiQiooKyc7OlqKiIrHb7ZKXlycFBQWSk5MjZWVlkpmZKTU1NZKent6kDvff3bt3i8PhkKysLCktLZUjR45Ifn6+5Ofny5EjR6S0tFSysrLE4XDI7t27RUQkKipKgCbb2LFjJTMzU8rKymTw4MHNyseNG9dwTH379m1WfvXVVzccU9euXZuV33LLLQ3HZLPZmpXfd999kpKSIhUVFc3KAJk3b57k5+dLenq6x/I//vGPIiKybt06j+VPP/20FBQUyObNmz2Wr1ixQlJTU+Wf//ynx/L3339fsrOzZe3atR7LX3/9dTl48KA88sgjHstnzpwpjz76qFx55ZUey0ePHi2jR4+W+Ph4j+WdO3eWiIgICQ0NbfL5rbfe2uL/HpDirW+oQMbjuXq8JBEZ7qFsPfCCiHzner8ZeExEUlur85JLLpHWHq6kpaUxerQmt4uaUVVVxZo1axgyZEjDZ1FRUQwdOhSAPXv2NOvRunTpwuDBgwHYtWsX1dXVTcpjYmIYMGAA4Dzmurq6JuXdunWjf//+AKSkpDTr8Xr06EHfvn09lgH07t2b+Ph4amtr2blzZ7Py888/n7i4OKqqqjz2KH369KFnz55UVFR47FESEhKIjY2lrKyMffv2ISKcOnWK/Px8Tp48SW5uLpGRkdjtdo4cOUJJSQmlpaWUlpZSUlLS7Hg9ERoaSkREBDabjfDwcDp06IDNZqNDhw5ER0cTGRmJUoq6ujrCw8MJCwsjLCyM0NBQevXqRUREBA6Hg8rKSsLCwujQoQMDBgxg3rx5HttTSqWKyCVtCgNdHW858I2IfOh6vx+Y0NalZluOZ2FcRAS73U5WVlaTLTs7m9zc3GY/PiEhIXTr1o3Y2FhiY2ObvY6OjqZz58507tyZLl26NLx2bx06dEApFbTj88Xx9BxOWAfcp5RaDVwGlPp7fweQmpracO9jFO69914GDhzIww8/rLeUZgTKXvX19WRmZpKWlsbOnTtJS0sjPT2d0tLShn06derEwIEDufjii5k2bRoXXHAB8fHxxMfHU1RUxK9+9SvCwow14qWVvQLW4ymlPgQmALFAPvA0YAMQkbeU86doKc4nnxXAXSLSZld2NvZ4oaGh/OUvf+G5557TW0rAqKurY+fOnXz77bds3bqVbdu2UVxcDEBERAQjRoxg1KhRXHzxxQwZMoSBAwcSFxdHSIh5Jk8ZoscTkVltlAvwR63bNeI9HsDx43535gHBH3udOnWKr7/+mqSkJNavX09hYSEAAwcO5MYbb2TcuHFceumlDB482Oeey6jnUStdxurHNUCTR70aIyL06tVLbxke8dVeVVVVfPHFF7z33nskJSVRXV1NTEwMU6ZMYerUqUyYMIHevXsHXVew0EqX6Rxv3759hhvHA/j555/1luARb+114MABli5dyvvvv09RURE9e/Zk7ty53HjjjVx++eWa34sZ9Txqpct0jpeQkKC3hGZ07tyZHj166C3DI63ZS0TYsmULL7/8Mhs2bMBmszFjxgxuv/12Jk+eHNAHH0Y8j6CdLvPc2brIy8vTW0IzSktLuf322/WW4ZGW7JWcnMz48eOZNGkSqampLFy4kKNHj/Lhhx9y7bXXBvxpoxHPI2iny3Q9XteuXfWW4JGzRdeePXt48MEH2bx5M3FxcSxbtozZs2fToUMHXXUZBa10ma7Hq6io0FtCM2bNmsWaNWv0luERt71KS0t56KGHGDlyJDt37uTVV1/l4MGDzJ07N+hO11iX0dBKl+l6PCOOC61evdqws+1DQkL48ssv+cMf/sCJEyeYM2cOixYtolu3brrrMiJa6TLm0fmBzWbTW4JHQkND9ZbQjNOnT/PEE09w7bXXEhMTw/bt23nrrbd0dzow7nnUSpfpHK+8vFxvCU1wzww6c5Kz3mRnZ3PZZZexatUq5s+fT2pqKpdeeqneshow2nl0o5Uu011qxsbG6i3BI5GRkXpLaGD9+vXceuuthIWF8emnn3LdddfpLakZRj2PWukyXY9nt9v1ltCM3r17U1tbq7cMAJYuXcr06dPp378/KSkpDBo0SG9JHjHieQTtdJmux3PHqBkFpRR5eXm6O56IsGDBAp5//nl++9vf8sEHH9CxY0fddbWE0c6jG610ma7H8xR0aQT01CUizJ07l+eff567776btWvX0rFjR911tYbpdQUy9UMgtjFjxsjZRF1dnUydOlU+/PBDXdqvr6+XefPmCSCPPfaY1NfX66LjXAAfUj8EtMdTSv1GKbXflcLvzx7K+yilkpVSO10p/qb422ZqaquZI4KOiLB+/Xq+/fZbXdp+/PHHef3113nooYd48cUXm0VkG81ebkyvy1sP9XUDQoGDQH8gHNgFJJ6xz9vAf7peJwKH26r3bOvxamtrBZBnn3026G2/8sorAsi9995r9XRBAIP0eL8AskXkkIhUA6txpvRr4vdAF9fr8wC/Z6Aa7ZdSXON4wZ70m5SUxPz587nhhhtYtmxZi7lHjGYvN2bXFUjHOx/IbfTe7vqsMQuB/1BK2YENwP2eKlJKzVFKpSilUo4fP05hYSHHjx/n2LFjFBcXc/DgQSorK9m7dy+jRo1qyLPoNlJaWhr19fXs3buXyspKDh48SHFxMceOHcNd3+HDhykvL2ffvn3U1taya9euJnW4//70009UVVVx4MABTp06xdGjRzl58iQnT57k6NGjnDp1igMHDlBVVcVPP/30b2Ocf35DHbt27aK2tpZ9+/ZRXl7O4cOHWz2m+vp6n45p06ZN3HLLLQwfPpy33nqLrKysFo9pzJgx7TqmM+2i9TElJiYG/Tx5c0x9+/Zt8Zh8wtuu0dcNuAl4p9H724A3zthnPvCw6/XlwF4gpLV627rUdOeyNAo1NTUyaNAg+ctf/hKU9oqLiyUhIUHOP/98OXbsWJv7G81ebs5GXfhwqRnIcTw7cEGj9/E0v5ScjSvNu4j8SykVgTM50sn2Nmq0AeGwsDD2799PVVVVwNsSEe6++25yc3PZunWrVxOzjWYvN2bXFchLzR+BgUqpBKVUOPA7nCn9GnMUuAZAKTUUiAAK/GnUUzpyIxAMXcuWLePjjz/mhRde4PLLL/fqO+eyvdqDVroC5ngiUgvcB3wFZAJrRCRDKfWsUso9OfBh4B6l1C7gQ+BOV5fdbnr27OnP1zWnpqaGq666yuP6AlqSmZnJI488wtSpU5k/f77X3zOavdyYXVdAp4yJyAacD00af7ag0eu9wJVatllSUkKXLl3a3jFIiAhbt25tWIAkENTW1nLnnXcSFRXFihUrfIoZM5q93Jhdl+nmakZEROgtwSOBzFHyyiuvsGPHDj788EOff5GNai+z6zLdXE2j4eeVc5scOHCAp556ihtuuIFbbrkloG1ZaIfpHM/hcOgtwSPerG7jKyLCAw88QHh4eKuD5K1hVHuZXZfpLjWjo6P1ltAEpRRjxoyhb9++mtedlJTEF198wUsvvdTu7M1Gs5cbs+syXY+Xn5+vt4QmhIeHk5KSwuTJkzWt1+Fw8OCDDzJ06FDuv9/jhB+vMJq93Jhdl+l6vMbLHRsJrXW99tprHDp0iK+//tqvBDznir20QitdpuvxsrKy9JbQhKqqKkaPHs3ixYs1q7OkpIQXX3yRKVOm+N2TGs1ebsyuy3SOd9FFF+ktoQkiws6dOzVNV7dkyRJKSkpYtGiR33UZzV5uzK7LdI5ntHAS93DCsWPHNKnv5MmTvPrqq9xyyy2aLBllNHu5Mbsu0zme0ZZhdhMfH69JPS+88AIOh4Nnn31Wk/qMai+z6zKd4xn1l1KLtHAFBQUsX76c2267TbNZ8ka1l9l1mc7xjPZLGRISwoQJE7yOFmiNN954A4fDwZ/+9CcNlDkxmr3cmF2X6RzPHZFsFDp06EBycjLDhg3zq57y8nKWLl3K9ddfz5AhQzRSZzx7uTG7LtM5nr//4IHCX13vvPMOxcXFmvZ2YF57BQqtdOma3s+1z81Kqb1KqQyl1Af+tpmdne1vFZpSWVnJoEGD+Otf/9ruOmpra3n55ZcZP348Y8eO1VCd8ezlxuy6AjZzRSkVCiwDJuNMA/GjUmqdKwbPvc9A4HHgShEpVkr5vVC4Vk8PtaK+vp4DBw74ta7a559/Tm5uLq+99pqGypwYzV5uzK5L7/R+9wDLRKQYQETanWvFTWFhob9VaIp7HO/06dPtruO//uu/uOCCC5g+fbpWshowmr3cmF2X3un9BgGDlFL/VEr9oJT6jaeKfEnvFxkZacj0fhEREe1Khbd+/Xo2bdrE9OnTCQsL0/yYoqKiDJnez2azGTK9X11dnSnS+yUBnwA2IAGnc0a3Vm9b6f3y8vJaLQ82ZWVlAshTTz3Vru8/8MADYrPZ5MSJExorc2I0e7k5G3VhkEzS3qT3swOfiUiNiOQA+4GB/jRaX1/vz9c1JzQ0lOnTp7drVntFRQWrVq1i5syZAUv+YzR7uTG7rkCGBTWk9wOO4Uzv9/sz9vkUmAWsUkrF4rz0PORPo506dfLn65rTsWNH1q1bR3Fxsc/f/fTTTyktLWXOnDkBUObEaPZyY3ZdbTqeUur/41zjoAki8ofWvicitUopd3q/UGCluNL74eyS17nKfqWU2gvUAY+KyM/tOI4GioqKiImJ8aeKgNAeXe+++y59+/Zl/PjxAVJlLnsFA610eXOpmQSsd22bcS4y4tUK7CKyQUQGiciFIrLI9dkCl9PhujSeLyKJInKRiKxu32H8G2+yJweTsrIyevfuzfr16336nt1uZ+PGjdxxxx1+DUW0hdHs5cbsuto8oyLycaPtf4CbgeGatB4AcnJy9JbQBBHhxIkTPk+Sfv/99xERbr/99gApc2I0e7kxu672/JQOBIwZlw+azmPUAnGN4/nycEREePfddxk3bhwXXnhhoKQBxrOXG7PratPxlFJlSqlT7g34HNB2wqCGpKen6y3BI76sj5eamsq+ffu44447AqjIiVHtZXZdbT5cEZHOmrQUJEaPHq23BI/4MtVozZo12Gw2ZsyYEUBFToxqL7PrMk10QmlpKS+99BL/+Mc/9JbSBJvNxqxZs7x+QCIirF27lkmTJgXlqZ7ZA061xvBroAdqa2nmSlFRkYSHh8tDDz3U4syCs4Eff/xRAFm5cqXeUix8BIPMXAkqMTExTJkyhffeey8g6dL9xT0vsS3Wrl1LWFgY119/5nzywOCtrmBjdl2mcTyA3//+9xQWFgZ8LTpfKCkpISoqiu+//77NfUWENWvWMGnSJLp27RoEdWiSqSwQmF2Xz46nlMp0bfdpokBDpk2bRmRkJB984Hc8rWaICKdPn/YqvV9aWhqHDx/mpptuCoIyJ/v27QtaW75gdl0+O56IDAXGAYYb4ezYsSM33HADH3/8seFWm+nWrVub+3z22WeEhIRw3XXXtbmvViQkJAStLV8wuy5vxvHuU0o1ebwmIj+LiG9zoILEpEmTOHXqFElJSXpLaUJpaWmb+yQlJXHFFVcQGxsbBEVOfBlfDCZm1+VNj9cLZ9qGNa4cKr4vwhZEpk6dSu/evXn33Xf1ltKEtma1Hzt2jJ07dzJt2rQgKXISrHtJXzG7Lm/maj6Jc5rYCuBO4IBS6q9KqcDOZWonVVVV3HXXXWzYsEGTJLL+Eh4ezpw5c+jfv3+r+7knUQfb8SoqKoLanreYXZdX93iuMYoTrq0WiAE+UkpptwSORoSEhDB79mzq6+tZuXKl3nKIjIxk+fLlbYb2JCUl0a9fPxITE4OkzEkgIx/8wey6vLnHm6eUSgUWA/8ELhKR/wTGAK3OafImvZ9rv5lKKVFKXeKj/mbYbDb69+/P5MmTWbFihe5jeu4B07CwlmfnVVZWsmnTJqZNm9au5ZT9QctVjLTE7Lq8cd9Y4EYR+bWIrBWRGgARqQdavC5qlN7vWiARmKWUavZzrpTqDMwDtrdDfzPKy52hgvfccw9Hjx5l48aNWlTbboqKiggJCWHp0qUt7pOcnExlZWVAsoi1hdteRsPsury5x1sgIkdaKMts5avepPcDeA5nb6rJ83/3E8Hrr7+e7t2789Zbb2lRrd907tzyXPMvv/ySTp06cdVVVwVRkZNgPkH1BbPr0jW9n1JqFHCBiLT67N+X9H65ubmkpaURHh7O9OnTWbduHZ999plu6f3EFY9XUlLSYtq4L774grFjx1JUVNSuVHj+HJPdbjdker+cnBxDpvfLyso6u9P74XT6b4B+rvffAJe0VW9b6f1qamoaXufl5YnNZpP777+/1e8EkoKCAgHk1Vdf9Vhut9sFkCVLlgRZmZPG9jISZ6MuDDJJuq30fp1xppD4Ril1GBgLrPP3AUtGRkbD6969ezNr1ixWrlxJSUmJP9X6zYkTJzx+vnnzZsA58K8Hje1lJEyvy1sP9XXDGWR7CGei2nBgFzCslf2/QYMe70x27twpgCxevNin72lFeXm5PPzww7Jt2zaP5bfddpt0795d6urqgqzMQmswQo8nIrWAO71fJrBGXOn9lFIBm4x4ZqDiyJEjmThxIq+99hpVVVWBarZFIiMjWbJkCR07dmxWJiJs2rSJa665RrdxK9MHnGqMFQjrAxs3bhRAli1b5vN3/aWurk5KS0ulqqqqWVlGRoYA8s477wRdl4X2YIQeTy88/SJdc801XHHFFbzwwgtB7/UKCws577zzWLBgQbOyTZs2Afrd38E50LNojLUGegt4WqNaKcXTTz+N3W5n1apVwRcFHtdOSE5OJiEhgb59++qgyInZ1xrXGmsN9BZovDRWYyZPnszYsWNZtGhRUGP1nFcgNAuEFRG+++67gKZn94aW7KU3ZtdlOscbNGiQx8+VUjz//PPk5ubyxhtvBFkV9OrVq8n7ffv2UVhYyC9/+cuga2lMS/bSG7PrMp3jHT16tMWya665hqlTp7Jo0aKgrzhaVFTU5P22bdsAdHe81uylJ2bXZTrHaytV+uLFiykvL+fZZ58Nip7IyEgWLlzY7JJy27Zt9OjRg4ED/VoO0G8Cte6ev5hdl+kcr60ZKomJidxzzz28+eabQUmoExUVxdNPP91sDYTvvvuOcePGBT0M6Ez0ntHTEmbXFciFKXUhIiKizX2eeeYZVq9ezb333ktycnJA//nr6urIz89vEhdot9s5fPgwDzzwQMDa9RZv7BVMampqsNvtnD59mszM1oJf9KGuro6cnBzi4+P9i83zdsDPKFtbA+j5+fleDXa+/fbbAsiKFSu82r+95OXlCSB/+9vfGj774IMPBJCUlJSAtu0N3torWBw6dEgKCgo8TjgwAlVVVVJQUCCHDh1qVsa5PIDu7VDB7NmzGTduHI888ggnT54MsCrnL7mbbdu2ERUVxYgRIwLeblsYLQ2iw+GgW7duDcMwRkNE6Natm992M53jRUdHe7VfSEgIy5cvp7y8nLlz5wbsRLvrbTxX81//+hdjx45tNR1EsPDWXsFEKWUI23giLCxMk1sT0zlefn6+1/smJiby7LPP8vHHHwc8HWBZWRngzFL1008/cdlllwW0PW/xxV7BpPEVgpHQSpfpHM/T1KzWePTRRxk/fjz3338/hw4dCpCqf+djTEtLo66uzjCO56u9gkV4eLjeEjyila6AOl5bWcaUUvOVUnuVUruVUpuVUn5PWszKyvJp/9DQUN577z1CQ0OZNWuW5pOou3TpwksvvdQwc2XHjh0AXHrppZq20158tVewMNq9pxutdAXsQrpRlrHJOKPRf1RKrRORxskpduIMfq1QSv0nzqRHt/jT7kUXXeTzd/r06cOKFSuYOXMm8+bNY/ny5f5IaEJUVBTz589veL99+3b69OnTbAqZXrTHXsGgU6dOPPjgg5ovyTxy5EheffXVFsufeuopYmNjG4Z6nnjiCXr27Mm8efMadGlBIHu8NrOMiUiyiLhT8/6AMz2EX7Q3bGPGjBk8/vjjvP3227z99tv+ymigpqaG/fv388033wDOHs8ol5lg3PCb06dP69Lu7NmzG+736+vrWb16Nbfeeqv2urwdd/B1A2bSPNnR0lb2Xwo82ULZHCAFSImLi5OCggLJy8sTu90uRUVFkp2dLRUVFZKRkSF1dXWSmpoqItIwTpaamip1dXWSkZEhFRUVkp2dLUVFRWK32yUvL08KCgokJydHSkpKZNy4cWKz2eTtt99uUof77+7du8XhcEhWVpaUlpbKkSNHJD8/X/Lz8+XIkSNSWloqWVlZ4nA4ZPfu3ZKbmyuA/Pd//7d8/fXXAshDDz0kNTU1kpmZKWVlZZKTkxOwYyorK5PMzEypqamR9PR0TY7JUx3p6emaHJP7eOrq6qSyslJqamqkqqpKqqqqpLq6WhwOh9TW1kpFRYXU19fL6dOnRcSZYqPx39OnTzfUUVtbKw6HQ6qrq5vUUVlZKXV1dc3qmDhxoqSlpcknn3wiM2bMkIqKiiZ1VFVVye7du5sdEz6M4wXS8VrNMnbGvv+Bs8fr0Fa9bQ2g+zsoXVRUJMOGDZPOnTtLWlqaX3WJSIPjPfnkk/L5558LIFu3bvW7Xq0wwiB+Y/bu3Ssi/3YCPVi9erXMmzdPbr75Zlm/fn2TMrcut87G+OJ4emYZA0ApNQl4ArhORPx+suFvoGJMTAxffvkl0dHRXHvttRw8eNBfSQD07duXHTt2EBISwujRozWpUwuMGnAaGRmpW9s33HADX375JT/++CO//vWvm5RppSuQjvcjMFAplaCUCgd+B6xrvIMroe1ynE6nyfQRd4JTf4iPj+err76ipqaGiRMnkp2d7Xedubm5bN++neHDh+v6T3UmWtgrEOi5WlB4eDgTJ07k5ptvJjQ0tElZUFcLag/iXZaxvwFRwFqlVLpSal0L1XnNsGHD/K0CgKFDh7J582YqKysZP36835EMcXFxpKSkGGYYwY1W9tIaT1nZgkV9fT0//PADs2fPblamla6AjuOJyAYRGSQiF4rIItdnC0Rknev1JBHpKSIjXZvfaf+06J3cjBw5kuTkZOrr6xk/fjzbt/u+rkp0dDTLly8nIiKCoqIiRo0apZk+LdDSXlqi1zje3r17GTBgANdcc43HWEmtdJlu5kp8vN8jEk0YPnw43377LZ07d2bChAl89NFHPn0/KiqKOXPmNITfGM3xtLaXVug1cyUxMZFDhw7x0ksveSw/K2au6EEgUjoMHjyYH374gdGjR3PTTTexcOFCr9fdq66uJiUlpSHu7+KLL9Zcnz8EOwWGt9TW1uotwSNa6TKd40VFRQWk3u7du7N582Zuv/12nnnmGSZPnszx48fb/N6JEye49NJL+f777xk4cGDA9LUXo+lxc86vCHu2EchZ7REREaxatYqVK1fyww8/MGLECP73f//Xq+/a7XbDXWaCcaMAxMDxeFpgOserr68PaP1KKe666y5SUlI4//zzmTFjBjNmzGix93OfqOLiYkM6XqDtZeEZ0zmeVpNY2yIxMZEdO3bwwgsvsH79eoYMGcLixYtbfeo1cuTIoGjzhWDZy1esS82zjDPzVwYSm83Gn//8Z3bv3s348eP505/+xJAhQ3j//fc93oQbsccLpr18wewPV4wZX+8HcXFxQW9z0KBBfP7552zZsoVHHnmE2267jaeffprHHnuMmTNnMm7cOPbv30+PHj2Crq0t9LCXN7gf20+YMKFZ2c0338zcuXOpqKhgypQpzcrvvPNO7rzzTgoLC5k5c2aTMneUSGscPnyYadOmsWfPHgCWLFlCeXk5CxcutIYTWiInJ0e3tq+++mpSUlL45JNPiI2N5d5772X48OFkZmYydOhQ3XS1hp72ag091jL0Bq10ma7HGzJkiK7th4SE8Nvf/pbrr7+e5ORkFi9ezFdffcWVV16pq66W0NteLeGecNBaD9WpU6dWy2NjY73q4dqjy19M1+NpHbHcXpRSXH311bz55psA/iU/DSBGsdeZ6DlJOiwsrMnT3sYPzAw/SVovjBRy05j+/fvrLcEjRrWXnhEcPXv25OTJk/z8889K1Q66AAAG+UlEQVRUVVWRlJSkuS7TOZ7RUhm4x/EOHz6sr5AWMJq93OiV+gGcVycLFizgsssuY9q0aU0ux7XSZbp7PKMGdiYkJOgtwSNGtZfeMYvz5s1rSHDUmLOix/MivV8HpdQ/XOXblVL9/G0zLS3N3yoCglF7PKPaS88erzUM3+N5md5vNlAsIgOUUr8D/h9+pvcz2uyQnj178vnnnxs2jZ7R7OXGqDNqtNIVyEvNhvR+AEopd3q/xo53PbDQ9fojYKlSSkk7Z6KmpKTw3HPPcd555zX5/Mknn2TQoEF89913HlP3Pf/88/Tp04dNmzbx97//vVn5kiVL6NGjB0lJSaxZs6ZZ+dKlS+nSpQsfffQR69Y1D6J/5513DBtwum/fPhITE/WW0QQRweFw6BqF3hIOh0OTIYVAOt75QG6j93bgzISSDfuISK1SqhToBjQJElNKzcGZ4o+4uDgKCwupqamhvr6eTp06UVRURFxcHGlpaezevZuamhrCw8Oprq4mPDyc7du3M2DAAFJTU9m2bRt1dXWEhIQ0PPiw2+3U19dz+PBhkpOTsdlsDd+trq7G4XCQmpqK3W5ny5Yt2Gw2amtrCQ0Npb6+nmPHjuFwOEhPT2fr1q3U1dURFhbWoCMlJYVRo0aRmprKmDFj2LVrF8OGDSM7O5v4+HgKCwuJioryeEw5OTkMGTKE9PR0Ro8e3VBHWloaI0eOZN++fSQkJJCXl0fXrl2pqKggJCQEm81GeXk5sbGx2O12BgwYQEZGBiNGjGioIzU1lcTERH766ScGDRrE0aNH6dmzJyUlJQ3/XA6Hg+joaPLz8+nTpw9ZWVlcdNFFTerQ8piio6M5fvw43bt3x+FwNHm0r5Sivr6esLAwqquriYiIoLKykk6dOnH69GkiIyMb/lZUVBAREUF1dXXD+XLPs3TX4T4/DoejxTo6duyIw+EgPDy8oQ73ehPFxcVNjskXVKDCL5RSNwG/FpG7Xe9vA34hIvc32ifDtY/d9f6ga5+fW6r3kksukZSUlBbbPXjwYLPVV42Apcs73AtTlpeXG3LFoNraWqKiojwuTKmUShWRS7ypJ5BH5k16P/c+dqVUGHAe4NesXffiIEbD0uUdNpuNhIQEiouLiYmJ0VtOM7TSpWt6P9f7O1yvZwJb2nt/50bPGQ+tYenyDbPrCliP57pnc6f3CwVWutP74cy4uw5YAbynlMrG2dP9zt92zR7HpTWWLt/QSldAL6JFZAOw4YzPFjR67cCZ6l0zjDon0tLlG2bXFbCHK4FCKVUAHGlll1jOeCpqECxdvnE26uorIt29qeSsc7y2UEqlePtkKZhYunzD7LqMeSFtYWFyLMezsNABMzqedsu5aoulyzdMrct093gWFmcDZuzxLCwMj+V4FhY6YBrHayvoNshaViqlTiql9jT6rKtSaqNS6oDrb1AnIiqlLlBKJSulMpVSGUqpBwyiK0IptUMptcul6xnX5wmu4OgDrmBpXdbtUkqFKqV2KqWStNRlCsdrFHR7LZAIzFJK6Rlktgr4zRmf/RnYLCIDgc2u98GkFnhYRIYCY4E/umykt64q4GoRGQGMBH6jlBqLMyj6FZeuYpxB03rwAM4Vjd1oo0tEzvoNuBz4qtH7x4HHddbUD9jT6P1+oLfrdW9gv876PsOZHcAwuoBOQBrOuM1CIMzT+Q2innicP0ZXA0mA0kqXKXo8PAfdnq+TlpboKSLHAVx/dcvn7sptMwrYbgRdrsu5dOAksBE4CJSIiHuhAr3O56vAY4A7yWY3rXSZxfGUh8+scRIPKKWigI+BB0XklN56AESkTkRG4uxhfgF4yncf1POplJoGnBSRxvkPNfs/M16Ib/vwJuhWb/KVUr1F5LhSqjfOX/egopSy4XS6/xER94qauutyIyIlSqlvcN6DRiulwly9ix7n80rgOqXUFCAC6IKzB9REl1l6PG+CbvWmcdDvHTjvsYKGUkrhjH/MFJGXDaSru1Iq2vW6IzAJ58OMZJzB0broEpHHRSReRPrh/H/aIiK3aqZLzxt8jW+EpwBZOO8PntBZy4fAcaAGZ288G+f9wWbggOtv1yBrGofzsmg3kO7aphhA18XATpeuPcAC1+f9gR1ANrAW6KDj+ZwAJGmpy5oyZmGhA2a51LSwOKuwHM/CQgcsx7Ow0AHL8SwsdMByPAsLHbAc7xxFKRWtlJqrt45zFcvxzl2iAcvxdMJyvHOXF4ELlVLpSqm/6S3mXMMaQD9HcUUoJInIcJ2lnJNYPZ6FhQ5YjmdhoQOW4527lAGd9RZxrmI53jmKOFfd/adSao/1cCX4WA9XLCx0wOrxLCx0wHI8CwsdsBzPwkIHLMezsNABy/EsLHTAcjwLCx2wHM/CQgf+D2XN+nWJZowXAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from scipy.integrate import odeint\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "def system(y, t):\n", " if t < 10.0:\n", " u = 0.0\n", " else:\n", " u = 1.0\n", " \n", " dydt = (-y + u)/5.0 \n", " return dydt\n", "\n", "y0 = 0.5\n", "t = np.arange(0, 40, 0.04)\n", "\n", "y = odeint(system, y0, t)\n", "\n", "fig, ax = plt.subplots(figsize=(3, 2.3))\n", "ax.plot(t, y, label='y', c='k')\n", "ax.plot(t, 1 * (t>=10), ls='--', label='u', c='k')\n", "ax.set_xlabel('t')\n", "ax.set_ylabel('y, u')\n", "ax.legend(loc='best')\n", "ax.grid(ls=':')\n", "\n", "# fig.savefig(\"scipy_demo.pdf\", transparent=True, bbox_inches=\"tight\", pad_inches=0.0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sympy" ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[-3/2, -1]\n" ] } ], "source": [ "import sympy as sp \n", "sp.init_printing()\n", "s = sp.Symbol('s')\n", "root = sp.solve(2 * s**2 +5*s+3, s)\n", "print(root)" ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIQAAAAVCAYAAACHfkZBAAAABHNCSVQICAgIfAhkiAAAAzpJREFUaIHt2k2IHEUUwPGfJoQcBD8SzCJ4UAgo5CTxIAQza0ACspBEr2rAD4SAiAqexI0QXc1BTFQ8iYheRAwSNBFRVyMiiG5QMOIHTBRDEtePKH6gxnh4NaSdTPf07nbvzO7MH5ruqn71+lX3q6pXVc2QITk0cCpzfN5Ta4bUyUr//9anWjfO7iD8DrbjiRoMeQRv4lv8gR8xhQewokvZVTiJXSm9ArdiD75K+k7gPdyic90WMzdgNw7gF/GRn8+R/V184+04nKewkZSMV2hkO3/hAzyDCVGBD9Nzv8PFBWVvT3KjKX1HSh/BC3g46f055b+EsyqvQf9yUNT7VxxS7BBZJmV6iCwN9TvE8pz8HenZTxWU3YdpLEnpazDmzJ5gBN8kfdfP2tKFxyhWi0bQMEuHmO9u9c+c/BfTeXXO/XOFA+wVwwa8ldL/tskexdPpujErKxcmb+NLOa29LP0yzo6l8yc596/DMrxcUt/f6fzPXIwaRJb26Ln34hzR8tdinXCGiRz5zfgNb5TQvRQ3pev9czNz8OilQ6zKpPdjK77vILscG0UMkTfkZJnAGryG1+dk5QAykyGj6cy5a9FRFNCMiOBnBFtwqZh+XtFB9lrRm+wpYeOduEesodxYQr5XNFX3LitlJj3E18q10BZHSsgcEx/6Y3yB50TrzrJZTFdf7aJrGx7HZ9gg1jj6lTreZeU01D/tLGIqPX9lJm+JmGru61L2rlT2U1xYi3ULi4YFMu0s4qJ0PpnJu1qsSBYNF/fhMbEwM4rjtVg3IMynQ1wmYoZONuwQLft9/JS5t0WsM7ySo/N+EUR+JIaJ6S42PCtaw9aSNg8c8znL2IideFeMoT+ImcZ6EVQexW1tZTYJJznWQd/NeFD0KAdEQNlOUzhBi1YDWIzrE5vSwemGd5XT9Z8Ws7vSNNQbQ6zBk6JrnxYf5YTYyxjHBW3yVyZ77s7RN657dD7ZVmZKbPycP4d69Cvjit9FM6fcpB7uZcyEh4Q9l1Sk7zzRmzxakb7FwqQuDtEv/0McEr1JVYyJqV6nOGbQyP0fIhtDNMX+eItuAVrdXF6xvr3yd1sHjdb/EEOGDBkyA/4D6EDmiX05VJwAAAAASUVORK5CYII=\n", "text/latex": [ "$$\\left [ - \\frac{3}{2}, \\quad -1\\right ]$$" ], "text/plain": [ "[-3/2, -1]" ] }, "execution_count": 95, "metadata": {}, "output_type": "execute_result" } ], "source": [ "root" ] }, { "cell_type": "code", "execution_count": 96, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "s**3 + 5*s**2 + 8*s + 4\n" ] } ], "source": [ "f = sp.expand( (s+1)*(s+2)**2, s)\n", "print(f)" ] }, { "cell_type": "code", "execution_count": 97, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKUAAAAWCAYAAAChdVwBAAAABHNCSVQICAgIfAhkiAAABHhJREFUaIHt2luoVFUcx/GPF9LMwsrKiLCLXSSNtBAEKzUfMrtLN+gyRRZhmU9iBXV6KO0mZtBDdDGKHiq0CxSaIpRkN8IMi9LMIkrMTne8lJ4e/ns4wz4z58zs2edMI/OFzRnWWnvt/2+tvf/r/1/r0KLFfsJsbMAfybUOMxpqUe9wFz4WGn/GmxjTUItaVOQSXICTcDIewD84vZFG9QIrcKN4EcdiObbhsEYa1aJ62nFro43oZYZiLy5qtCH7M/1z6GMArhET9n4O/dXKVnRUuLbl/KyDxZi159xvtczASvyAndiCVzCxQfbUw3U65+nm0oqBdXQ6VsSSg/EnLsXndfRXD79jcZnyv3J+zmKsxwc591sND2EefsFr2IFRIpSaievxYgPsysKxeELMz9A8Oz5ADMpZWCAGKUsSUBBfy+SMdmxNrt7mEfwkNGehILvOESJs2IYjU3VTkn63ZLSrWgrqm6ci/bAK34gx7eIpyy3fZ2NZctMubMdHeDDVbg824xORpa7H3DoN7kuq1QmPCU90ntDc14wUc/WhsLOUNWKlOqLCvbXo7AvmYKpIIP8u1yD9Ut6Nd3EmVmOR2AYZhPN7eFh/sZQ3gkG4Vth/p/AeA7ppX4vOJUnfU/BFrlZXzybhBCZgeKruHBHrripzXz3z2RuMxkI8ntjVI0fhX7wnluY0pYOxUHyBx4nYcgH2YXoGQwvqX77LJTlbcG6Z9rXofFLsUU4VS2jxyhIHFdSnc64Y4+14Soz5y8L7rdR1Wa9FZzUU1Gf/QLGqfoUDk7I2PSQ6pwrv8rX4KtPsKPk9QgTVI0SSsUG8kCsyGlwPz4mB3yiWsRNwO27B2yIz/aykfS06b0v+rk61uV8MaF+yWHyAz2JWSflmLNV1Wa9FZ19wL8Zhktg5qIrh+E28uW/gKhyas2FbVd6+KXctreNZjyZ9LE+VN6vOecLzLRIf3hCMF46gAw+n2tejM2/7JyS2p21sU8ZT9ks1GoP7xGnNEJHxvYN78GmVgrpjLoalys4Q2xrP65pFrxfbH1kYJWKxdhyeqms2nZNFQrMcl6fqhghveLQ4YSvNwrPqzNP+gWIV2ys85e6SurbEvll4uht7EDHINBGzdAhXP6inmzJSkM9WQ5pDkn53ddOmWXQWvf4dFeqXJfUzK9TnobMgm/3DVO9xF1N583yPyOZWiXhtkgicv6/RoEZSPOXobv+uWXQWX6BK2z7F8nKxY7G8UTp345kKdeOF91wrEqB1pZXjcGKZm0bhV3wnnyPJchRk9yCnKf/PESPF0t0htkWKNKvOK3Uemx6TqpsusvKdOsOU3tBZkP+K1qab7HsObhCbqhtFJnc8Lk7qbxLC/29cgfki3vpWZN8nijPiwXhLLH1FmlXnq8LLTcOXOv9baTQuFLnBfHEESfPqROdL+Xrye4KY6MH4ES+JM9dNDbGuZ9bgFOEZJuIgkXGuxQvJ1VHSvll17hPJymxcjctE4tIuPrwlYq+ySLPqbNGiRYsWLVq0aNEiF/4DlDWBvTq1630AAAAASUVORK5CYII=\n", "text/latex": [ "$$s^{3} + 5 s^{2} + 8 s + 4$$" ], "text/plain": [ " 3 2 \n", "s + 5⋅s + 8⋅s + 4" ] }, "execution_count": 97, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f" ] }, { "cell_type": "code", "execution_count": 98, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(s + 1)*(s + 2)**2\n" ] } ], "source": [ "g = sp.factor(f, s) \n", "print(g)" ] }, { "cell_type": "code", "execution_count": 99, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIkAAAAYCAYAAADOHt4vAAAABHNCSVQICAgIfAhkiAAABBhJREFUaIHt2XuIVVUUx/GPNqiDhT2kJwiRRkFBUkRRwqSWEVRCQf9E3qw/ikgigtCIoj8qiqIHRESEvSBDsxKCijIahbKHgpT0ECapRnKIrD8sU6c/1hnndua87p25zh3m/uBw7uy91tr7u9mz99r70FFHHXVUopX4An9iDzbgnHHtUUdtp/dxs5gY52I9duP4MsdX8BtmtrJ3R1DnYxC3VLCdzOxwNA7i6iKjC3AId4+qa63V9XgWvWKZHMRrJT7r0S8GIU8Tgf0E3Cp4fsQ+7MUmMRGmZvhUYR/SKWI8Lyky+gB/oLtqr8dB2wTIX9ih2iS5MLFbVWAzEdhvExy/4nU8gpdEvwexFlNSPlXYh7QGW3FUnsGZ4j/phQY73oxqouM9TfhehnliMHpUmyTEhPpJ9gBMFPaFYitIrxgnY1cS97oMvyL2IT0uVpy59YXphpaLgV+TE2QB3sJO/C327i14uKDhVmgjfhAD0ojewBwszqgrY6c9+D8WJ5BDqfLdeD753ZPhV8QOT+AmLBLb2GGlJ8likbR8lhFkFT4VidBHeDLp7HRcmdNwu2lz8r48o66InYnB/2/yPpBRV8T+DG4UK/S3RQ3MTIJvz6g7KanrxbSM+tlFgXNU0/ySW68e1bebWYntllR5ETtjz18zNuz16hL9H8SSjPo89udE8r9QbFlDz+Ekt34lOU3sV/0ZDZyV1H2P/Rn1AxUg2kF7xTYxJ1VexM7E4H9U3HW8J+4+0spjvx3HiNWxv+65J6uRi8VMy9qTZxvOnt/FDTiuAYC+xLfqs7qB2D2qryTwi5HLcRE7o+Pv0zr2Ia1IfHcovgTLYi9VV93vfcl7RobdAC7FA7hKZNcH8SHuw9cl7TyFY1Nl5+FavCwGsl7bSuKNRt2GWYdUxM7o+FvNfgeeFrnEIvxeYJvF3pBOFbNxU4ndNJHkvZnYD4jkrVHVHPmcZKo4FexMlVdlZ2z4a8aG/a4kznacWGKbx96Qpogj3Z4GfHpFJ9P7XBXVHPlJcnZiuy5V3gw7zfPXjJ793iTGVtUS5zz2UtUnroPiiDfb/y9T5uOMDN+5IlHahZ8bbXicdFHy3pgqz2OnPfnvF4nqV2KLqZI457GXqiv19zpxW7fE8IXKCiwTR6dvxH/c6bgmqV9u5MVOq7U0eYjjGpF8rk5+D8jOzq8QucQ7GXVZ7LQf/zI8JDh6k/6l1WdkAlzE3pCmiZu7z+vKluJVfCfO0/uTTrworsabVU3zS+6Dik8IfRk+s0TS9nZOzCx2WsNf0zr2QXyS8iljb1grk4bmj1XANtGdgmtBgc1kZm9IM8SHoA1jFbAN1C2+mq4tsZvM7LnK+iJ4QJz7p+NLw98DJrLm4R88Ji7F8jSZ2TvqqKOOOupoPPUfCdtm1YbiFHMAAAAASUVORK5CYII=\n", "text/latex": [ "$$\\left(s + 1\\right) \\left(s + 2\\right)^{2}$$" ], "text/plain": [ " 2\n", "(s + 1)⋅(s + 2) " ] }, "execution_count": 99, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.8" }, "toc-autonumbering": false, "toc-showcode": false, "toc-showmarkdowntxt": false, "toc-showtags": false }, "nbformat": 4, "nbformat_minor": 2 }