Labs

<< 最初 < 前ページ 次ページ > 最後 >>
icon 2次関数のグラフと解を強引にグラフ化 (2018/12/02)
2次関数の解はSympy.solve, scipy.optimize.fsolve を使っても求められるが、ここでは非効率だが2次関数の一般式を作成、解を求めてグラフ化してみる。
二次関数 解の公式

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

a, b, c = map(float, input('Please input a, b, c\n').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\n').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()
icon 各時間毎の累積データ (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 を昇順でソートし、降水量累計
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

計算後

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
icon [VSCode]PyLint のエラーコードチェック (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
<< 最初 < 前ページ 次ページ > 最後 >>