2018/12/03

matplotlib の plot() はデータをプロットするが、Sympy の plot() を利用すると一般式をグラフ化できる。 数式を手っ取り早く視覚化するには使える

y = ax3+bx2+cx + d

Sympy 3次関数グラフ Sympy の plot() の第1引数に数式、第2引数にX軸の情報を入れる

サンプル

from sympy.plotting import plot
from sympy import Number, NumberSymbol, Symbol, Eq, solve
import sys
 
def function():
    x = Symbol('x')
    return a*x**3 + b*x**2 + c*x + d

a, b, c, d = map(float, input('Please input a, b, c, d.').split())
min_x, max_x = map(float, input('Please input min x, max x.').split())
if (min_x >= max_x): sys.exit('invalid min x max x!')
 
x = Symbol('x')
y = function()

min_y = y.subs([(x, min_x)]) 
max_y = y.subs([(x, max_x)])

plot(y, (x, min_x, max_x))

ちなみに、以下でxの最大最小から、yの最大最小を求めている。

min_y = y.subs([(x, min_x)]) 
max_y = y.subs([(x, max_x)])

  2018/12/02

2次関数の解はSympy.solve, scipy.optimize.fsolve を使っても求められるが、ここでは非効率だが2次関数の一般式を作成、解を求めてグラフ化してみる。 二次関数 解の公式

2次関数の定数を標準入力

a, b, c = map(float, input('Please input a, b, c ').split())

*Python3 の記述

解の公式

y =ax2+bx + c x=-b±b2-4ac2a
def answer(a, b, c):
    x1 = (-b + np.sqrt((b ** 2) - (4 * a * c))) / (2 * a)
    x2 = (-b - np.sqrt((b ** 2) - (4 * a * c))) / (2 * a)
    return [x1, x2]

判別式

解がない(虚数)だと、プロットできないので判別式の関数を作成

((b**2) - (4 * a * c)) >= 0

X座標の配列

最大値、最小値、X軸プロット間隔を設定

def plotX(a, b, c):
    max_x = 10
    min_x = -10
    x = np.arange(min_x, max_x, 0.1)
    return x

*最終的に最大値、最小値は、解によって動的に変化させる

Y座標の配列

二次方程式を記述

def plotY(a, b, c):
    return a*x**2 + b*x + c

サンプル

import matplotlib.pyplot as plt
import numpy as np
from sympy import *

def hasAnswer(a, b, c):
    return ((b * b) - (4 * a * c)) >= 0

def answer(a, b, c):
    x1 = (-b + sqrt((b ** 2) - (4 * a * c))) / (2 * a)
    x2 = (-b - sqrt((b ** 2) - (4 * a * c))) / (2 * a)
    return [x1, x2]

def plotX(a, b, c):
    max_x = 10
    min_x = -10

    if (hasAnswer(a, b, c)):
        x = answer(a, b, c)
        x1 = x[0]
        x2 = x[1]
        center = (x2 - x1) * 0.5

        band = abs(x2 - x1)
        if band <= 1:
            band = 10

        max_x = round(x1 + band, 0)
        min_x = round(x2 - band, 0)

    x = np.arange(min_x, max_x, 0.1)
    return x

def plotY(a, b, c):
    return a*x**2 + b*x + c

def plotScatterX(plt, a, b, c):
    if (hasAnswer(a, b, c)):
        x = answer(a, b, c)
        plt.scatter([x[0]], [0], label = 'x1 = %s' % x[0])
        plt.scatter([x[1]], [0], label = 'x2 = %s' % x[1])
    return

print('Simulatenous Equations. a * x^2 + b * x + c')
a, b, c = map(float, input('Please input a, b, c').split())

x = plotX(a, b, c)
y = plotY(a, b, c)
plt.plot(x, y)

plotScatterX(plt, a, b, c)

plt.title('Function: %sx^2 + %sx + %s' % (a, b, c))

plt.grid(color='gray')
plt.legend()
plt.show()

  2018/09/21

エクスプローラ移動 ⌘ + 0

ディレクトリ切替 Ctrl + R

  • 新規ウィンドウ ⌘ + Enter

新規ウィンドウ Shift + ⌘ + N

  2018/07/19

SQLで累積を計算する場合、OVER句を利用すると便利

1ヶ月の降水量を各時間ごとに累積

データ

1時間毎の雨量を INSERT datetime, precipitation 2018-06-01 00:00, 0.0 2018-06-01 01:00, 0.1 2018-06-01 02:00, 0.3 ....... 2018-06-30 22:00 1.2 2018-06-30 23:00 1.3

SQL

datetime を昇順でソートし、降水量累計 [sql] SELECT datetime, precipitation, SUM(precipitation) OVER(ORDER BY datetime ASC) AS sum_precipitation FROM rainfalls WHERE datetime >= '2018-06-01 00:00' AND datetime < '2018-07-01 00:00' ORDER BY datetime [/sql]

計算後

datetime, precipitation, sum_precipitation 2018-06-01 00:00, 0.0, 0.0 2018-06-01 01:00, 0.1, 0.1 2018-06-01 02:00, 0.3, 0.4 ....... 2018-06-30 22:00 1.2, 11.1 2018-06-30 23:00 1.3, 12.4

  2018/07/08

VSCode で pylint を利用すると from import などで警告がでる場合がある。 警告を非表示にしたい場合、.pylintrc の [MESSAGES CONTROL] disable を設定して表示をカスタマイズできる。

$ pylint --generate-rcfile > ~/.pylintrc

文字列やエラーコードで設定する

設定例

const-rgx=[a-z_][a-z0-9_]{2,30}$ const-name-hint=[a-z_][a-z0-9_]{2,30}$ include-ids=yes symbols=yes disable=print-statement,parameter-unpacking,unpacking-in-except,old-raise-syntax,backtick,import-star-module-level,apply-builtin,basestring-builtin,buffer-builtin,cmp-builtin,coerce-builtin,execfile-builtin,file-builtin,long-builtin,raw_input-builtin,reduce-builtin,standarderror-builtin,unicode-builtin,xrange-builtin,coerce-method,delslice-method,getslice-method,setslice-method,no-absolute-import,old-division,dict-iter-method,dict-view-method,next-method-called,metaclass-assignment,indexing-exception,raising-string,reload-builtin,oct-method,hex-method,nonzero-method,cmp-method,input-builtin,round-builtin,intern-builtin,unichr-builtin,map-builtin-not-iterating,zip-builtin-not-iterating,range-builtin-not-iterating,filter-builtin-not-iterating,using-cmp-argument,long-suffix,old-ne-operator,old-octal-literal,suppressed-message,useless-suppression,import-error,missing-docstring,invalid-name,C0111,W0611

エラーコード一覧

http://pylint-messages.wikidot.com/all-codes

  2018/07/05

install libgl1-mesa-glx

import matplotlib as mpl mpl.use('Agg')

  2018/07/02

SQL INSERT した後にプライマリIDを取得したい場合、 RETURNING を利用すると便利 [sql] INSERT INTO users (name, age) VALUES ('Yoo', '26') RETURNING id; [/sql] RETURNING の後は「*」なども指定できる。

  2018/06/07

Yeoman を利用して VSCode の機能拡張を作成する。

nodebrew で node をインストール

$ nodebrew install v8.11.2

node のバージョンを指定

$ nodebrew list v5.6.0 v5.7.0 v8.11.2 v10.4.0 $ nodebrew use v8.11.2

npm のアップデート

$ npm update -g npm

Yeoman インストール

$ npm install -g yo generator-code

Yeoman でプロジェクト作成(scaffold)

$ yo code ========================================================================== We're constantly looking for ways to make yo better! May we anonymously report usage statistics to improve the tool over time? More info: https://github.com/yeoman/insight & http://yeoman.io ... What type of extension do you want to create? (Use arrow keys) ❯ New Extension (TypeScript) New Extension (JavaScript) New Color Theme New Language Support New Code Snippets New Keymap New Extension Pack

機能拡張は「New Extension」を選択(JavaScript か TypeScript) 名称や作者など各設問に答えていくと、自動作成される。

主要ファイル構成

  • メインプログラム extension.ts
  • 機能拡張の情報 package.json

パブリッシュ

実際に機能拡張をパブリッシュする場合は、vsce をインストールしておく。

npm install -g vsce

  2018/06/05

「Live Sass Compiler」で Sass を watch できるが、ディレクトリ指定する場合、ユーザ設定に記述すると便利


{
    "liveSassCompile.settings.formats":[
        {
            "format": "expanded",
            "extensionName": ".css",
            "savePath": "/public/stylesheets/"
        },
       {
            "format": "compressed",
            "extensionName": ".min.css",
            "savePath": "/public/stylesheets/"
        },
    ]
}

format: CSSスタイル = expanded, compact, compressed, nested extensionName: 拡張子 savePath: 出力先(プロジェクトフォルダをルートとする)

  2018/06/05

    "vim.useSystemClipboard": false,
    "vim.easymotion": true,
    "files.associations": {
        "*.phtml": "html"
    },
    "vim.searchHighlightColor": "rgba(250, 0, 0, 0.3)",
    "vim.startInInsertMode": false,
    "vim.statusBarColorControl": true,

useSystemClipboard: システムのクリップボードを利用すると相互に引き継がれるのでオフ easymotion: カーソル移動の拡張版 searchHighlightColor: ハイライト色設定 startInInsertMode: 選択時のインサートモードはオフにする

pngファイルの軽量化
Google DriveのIconを再起的に削除
php-markdownでバニラPHPなコードブロック処理
laravel-ffmpeg を使う
2021年版 Ubuntu + certbot + Let's Encrypt でサーバ証明書設定
GihHub のデフォルトでない master ブランチを checkout する
マルチログインで未認証のリダイレクト
Homebrew で Redis をインストール
CSS だけでスムーズスクロール
EC-CUBE4 で Gmail の smtp を利用する
Amazon Linux 2 の amazon-linux-extras とは
UNIQUE カラムのバリデーションで自分自身を除外して更新
フォーム有効期限切れで Page Expired をリダイレクト
ログを日付でローテーションやクリアや削除
Homebrew で PHP8.0 から PHP7.4 にダウングレード
Big sur で zsh 移行と Homebrew アップグレード
Mac に minikube をインストール
途中から .gitignore に追加する
Larevel 6.x から Laravel 8.x にバージョンアップ
Composer で Allowed memory size (メモリ不足)エラー
Blade でカスタムクラスを利用する
git push git pull にブランチ指定せずに実行する
git pull や git push できなくなったとき
Docker のコンテナからホストOS に接続
Mac で ローカル IP アドレス(ipv4)のみを表示する
ホストOS から Docker の MySQLコンテナに接続
caching_sha2_password のエラー
node-config で環境設定ファイルを利用する
rootパスワードを初期化(再設定)する
Git から clone したときのエラー対処
Mac に MySQL をインストール
Mac に PostgreSQL をインストール
Laravel 環境構築 - Mac ネイティブ編
Firebase 入門 - Firebase とは
Firebase 入門 - CLI インストールとデータベースの設定
AWS 無料枠(t2.micro)で容量とメモリエラー
Cloud9 を起動する -初心者編-
gcloud で GCEインスタンスを起動してみる
AWS CLI と jq でインスタンス一覧を整形して表示
React と Laravel7 のプロジェクトを作成する
Homebrewインストール-2020年版
3直線で囲まれた範囲塗りつぶし
PuLP で線形最適化問題を解く
カスタムのペジネーションを作る
node-sass を使って sass をコンパイルする
Log ファサードでSQLログを分離して書き出す
いちから始める Docker - 複数のコンテナを使う - (2020年)
いちから始める Docker - docker-compose を使う - (2020年)
AWS ECR を使ってみる
Laravel7 でマルチ認証