投稿日:
【matplotlib】Pythonで比例式を解く【高校数学】
Pythonを使って比例式を解きます。matplotlibパッケージのpyplotモジュールを使います。
比例式の例題
ユウタ君は、1合のお米を炊くとき、炊飯器に200mlの水を入れます。今日は2.5合のお米を炊きますが、水は何ml入れますか?
コンピュータの図形描画に便利な比例式
比例式は、図形を描画するときにとても便利です。前回、前々回の直線の方程式を利用すれば、Pythonでも簡単に比例式を扱うことができます。
準備
①VSCodeをインストールします。
→MacOSでVisual Studio Codeをインストール
②VSCodeにPython実行環境を作ります。
→【MacOS】PythonをインストールしてVSCodeの実行環境をつくる【Python】
③Anacondaをインストールします。
→【MacOS】Anaconda3をインストールする【Python3】
④MacPCにインストールしたVSCODEからAnaconda3を利用できる状態にします。
→【MacOS】Visual Studio Code(VSCode)にAnacondaの仮想環境を指定【MacOS】
環境
PC | MacBook Air (Retina, 13-inch, 2019) |
---|---|
CPU | 1.6 GHz デュアルコアIntel Core i5 |
メモリ | 16 GB 2133 MHz LPDDR3 |
OS | Catalina 10.15.7 |
Visual Studio Code | 1.50.0 |
Conda | 4.9.2 |
matplotlib | 3.4.2 |
numpy | 1.20.3 |
比例式とは?
そもそも比例式の比とは、2つの量の比率を表す値です。
①お米1合に対して200mlであれば、以下のようになります。
\(1:200\)
②お米2.5合に対する水の量をxmlとします。
\(2.5:x\)
③この2つの比は等しいので以下のように表せます。これが比例式です。
\(1:200 = 2.5:x\)
※今回ネックになるのは、「お米:水」の順番です。どちらか一方を「水:お米」の順にしてしまうと比例式は成り立ちません。
比例式は、内項と外項を掛けた値に等しいという性質があります。この性質を利用して、③の以下のような式が成り立ちます。
\(1\times x=2\times 2.5\)
\(x=5.0\)
つまり、お米2.5の時のお米の水加減は500mlとなります。
また、2つの比率を表す\(m:n\)を\(\frac{m}{n}\)のように分数で表すこともできます。
線分m:nを内分点する
数学の世界で、
ある2点を結ぶ直線のことを「線分」と言います。
ある線分を\(m:n\)に分ける点のことを「内分点」と言います。
線分ABを\(m:n\)に内分する内分する点Pをxとします。
APの長さは\(x-x_1\)、PBの長さを\(x_2-x\)で求められます。
この長さの比と\(m:n\)は等しいので、
\(x-x_1:x_2-x=m:n\)
という比例式が成立します。これをxについて解くと、
\((x_2-x)m=(x-x_1)n\)
\(mx_2-mx=nx-nx_1\)
\(mx+nx=mx_2+nx_1\)
\((m+n)x=mx_2+nx_1\)
\((m+n)x=mx_2+nx_1\)
\(x=\frac{mx_2+nx_1}{m+n}\)・・・①
反時計回りに90°回転すると、y軸方向の垂直線になります。
始点を\(y_1\)、終点を\(y_2\)として同じように比例式を立てると、この線分\(m:n\)を内分する点yは次の式で求めることができます。
\(y=\frac{my_2+ny_1}{m+n}\)・・・②
線分の中点を求める方程式
線分を\(1:1\)に分ける内分点を中点と呼びます。
先ほど求めた式①②のmとnに1を当てはめると、
\(x=\frac{x_2+x_1}{2}\) \(y=\frac{y_2+y_1}{2}\)
となります。
つまり、始点と終点のx座標・y座標をそれぞれ平均したのが中点です。以下の場合は、\((\frac{1+4}{2})\) \((\frac{1+5}{2})\)となり、中点の座標は\((2.5,3)\)となります。
垂直二等分線のグラフをPythonで描く
ある線分の中点を通って、その線分と直交する直線のことを垂直二等分線と呼びます。
\((0,1)\)、\((6,5)\)を結ぶ線分を直交する垂直二等分線を求めます。
import matplotlib.pyplot as plt import numpy as np #基となる線分の傾きと切片 a1 = (5 - 1)/(6 - 0) b1 = 1 #線分の中点 cx = (0 + 6) / 2 cy = (1 + 5) / 2 #線分に直交する直線の傾き(a2 = -1/a1) a2 = -1 / a1 #線分に直交する直線の切片 b2 = cy - a2 * cx #直線の式 x = np.arange(0, 7) y1 = a1 * x + b1 y2 = a2 * x + b2 #描画 plt.plot(x , y1) plt.plot(x , y2) plt.axis('equal') plt.grid(color='0.8') plt.show()
結果:
解説
以下の流れで、垂直二等分線を求めることができます。
#線分に直交する直線の傾き(a2 = -1/a1) a2 = -1 / a1
①\(a1\times a2=-1\)の法則を利用して、直線の傾きを求めます。
cx = (0 + 6) / 2 cy = (1 + 5) / 2
次回
工事中。
- Python 114
- 制作 54
- RaspberryPi 41
- Django 40
- WordPress 40
- Linux 27
- VPS 22
- JavaScript 21
- PHP 20
- HTML・CSS 19
- AWS 16
- 仮想環境 15
- レスポンシブデザイン 13
- マイコン 11
- WEB全般 11
- 動画製作 9
- Webサービス 8
- 統合開発環境 8
- 機械学習 8
- PyCharm 7
- jQuery 7
- AfterEffects 7
- 起業・設立 7
- Django REST framework 6
- C# 6
- デザイン 6
- SEO 6
- pydata 6
- Visual Studio 5
- 数学 5
- 携帯サイト 5
- heroku 5
- Mac 5
- illustrator 5
- node.js 5
- Anaconda 5
- Nginx 4
- Jupyter Notebook 4
- インフラ 4
- Google Colaboratory 4
- symfony 4
- Webスクレイピング 3
- photoshop 3
- Go言語 3
- PC 3
- ツール 3
- Docker 3
- facebook 3
- 作業効率化 3
- データベース 3
- Cloud9 3
- コマンド 2
- micro:bit 2
- Kali Linux 2
- Webサーバー 2
- MariaDB 2
- ドローン 2
- コンテナ 2
- DaVinci Resolve 2
- ネットワーク 2
- Java 2
- movie 2
- PCDJ 2
- 音楽 2
- XSERVER 2
- Ansible 1
- Vue.js 1
- JSON 1
- Bootstrap 1
- バージョン管理システム 1
- SSL 1
- S3 1
- ムームードメイン 1
- ネットワーク 1
- アニメーション 1
- D3.js 1
- Rhino 1
- アニメ 1
- git 1
- windows 1
- アクセス解析 1
- スマートフォン 1
- アフィリエイトノウハウ 1
- 知識 1
- TypeScript 1
- 役立つ本・書籍 1
- データサイエンス 1
- ESP32 1
- AI 1
- ownCloud 1
- API 1