从联立方程式看机器学习的数学模式

使用sympy解联立式程式

解下列联立式方程式。

a+b=1

5a+b=2

from sympy import Symbol, solve
                                
a = Symbol('a')                 # 定义公式中使用的变量
b = Symbol('b')                 # 定义公式中使用的变量
eq1 = a + b - 1                 # 方程式 1
eq2 = 5 * a + b - 2             # 方程式 2
ans = solve((eq1, eq2))
print(type(ans))
print(ans)
print('a = {}'.format(ans[a]))
print('b = {}'.format(ans[b]))

运行结果:

[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
<class 'dict'>
{a: 1/4, b: 3/4}
a = 1/4
b = 3/4

[Done] exited with code=0 in 1.155 seconds

解下列联立式程式:

600a+b=0

1000a+b=12

在Python Shell输出上述a+b的值,当解出a与b的值后,用这2个值建立下列函数:

y=ax+b

绘制x是0~2500的函数图形,并绘制f(600)和f(1000)的坐标点。

import matplotlib.pyplot as plt
from sympy import Symbol, solve
import numpy as np
                                
a = Symbol('a')                 # 定义公式中使用的变量
b = Symbol('b')                 # 定义公式中使用的变量
eq1 = a + b - 1                 # 方程式 1
eq2 = 5 * a + b - 2             # 方程式 2
ans = solve((eq1, eq2))
print('a = {}'.format(ans[a]))
print('b = {}'.format(ans[b]))

pt_x1 = 600                             
pt_y1 = ans[a] * pt_x1 + ans[b]         # 计算x=600时的y值
pt_x2 = 1000
pt_y2 = ans[a] * pt_x2 + ans[b]         # 计算x=1000时的y值

x = np.linspace(0, 2500, 250)
y = ans[a] * x + ans[b]
plt.plot(x, y)                          # 绘函数直线
plt.plot(pt_x1, pt_y1, '-o')            # 绘点 pt1
plt.text(pt_x1+60, pt_y1-10, 'pt1')     # 输出文字pt1
plt.plot(pt_x2, pt_y2, '-o')            # 绘点 pt2
plt.text(pt_x2+60, pt_y2-10, 'pt2')     # 输出文字pt2
plt.xlabel("Customers")
plt.ylabel("Profit")
plt.grid()                              # 加网格线
plt.show()

运行结果:

[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
a = 1/4
b = 3/4

[Done] exited with code=0 in 23.748 seconds

 

使用下列函数:

y=f(x)=0.03x-18

绘制x是0~2500的函数图形,并标记来客数是1500人时的坐标点,相当于计算f(1500),同时在Python Shell窗口输出来客数是1500人时的获利金额。

import matplotlib.pyplot as plt
import numpy as np                            
a = 0.03
b = -18
x = np.linspace(0, 2500, 250)
y = a * x + b
pt_x = 1500
pt_y = a * pt_x + b
print('f(1500) = {}'.format(pt_y))
plt.plot(x, y)                          # 绘函数直线
plt.plot(pt_x, pt_y, '-o')              # 绘点 f(1500)
plt.text(pt_x-150, pt_y+3, 'f(1500)')   # 输出文字f(1500)
plt.xlabel("Customers")
plt.ylabel("Profit")
plt.grid()                              # 加网格线
plt.show()

运行结果:

[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
f(1500) = 27.0

[Done] exited with code=0 in 33.81 seconds

 

计算获得拉高到48万元需有多少来客数,使用Python Shell窗口输出,同时绘制此点。

import matplotlib.pyplot as plt
import numpy as np                            
a = 0.03
b = -18
x = np.linspace(0, 2500, 250)
y = a * x + b
pt_y = 48
pt_x = (pt_y + 18) / 0.03 
print('获利48万需有 {} 来客数'.format(int(pt_x)))
plt.plot(x, y)                                      # 绘函数直线
plt.plot(pt_x, pt_y, '-o')                          # 绘点
plt.text(pt_x-150, pt_y+3, '('+str(int(pt_x))+','+str(pt_y)+')')   
plt.xlabel("Customers")
plt.ylabel("Profit")
plt.grid()                                          # 加网格线
plt.show()

运行结果:

 

[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
获利48万需有 2200 来客数

[Done] exited with code=0 in 22.79 seconds

鸡免同笼:

古代《孙子算经》有一句话:今有鸡兔同笼,上有三十五头,下有百足,问鸡兔各几何?

x代表chicken,y代表rabbit。

chicken+rabbit=35                x+y=35

2*chicken+4*rabbit=100        2x+4y=100

使用下列联立式方程,绘制鸡兔同笼的问题,同时计算鸡和兔子的数量。

公式1:x+y=35

公式2:2x+4y=1000

import matplotlib.pyplot as plt
from sympy import Symbol, solve
import numpy as np
                                
x = Symbol('x')                         # 定义公式中使用的变量
y = Symbol('y')                         # 定义公式中使用的变量
eq1 = x + y - 35                        # 方程式 1
eq2 = 2 * x + 4 * y - 100               # 方程式 2
ans = solve((eq1, eq2))
print('鸡 = {}'.format(ans[x]))
print('兔 = {}'.format(ans[y]))

line1_x = np.linspace(0, 100, 100)
line1_y = [35 - y for y in line1_x]
line2_x = np.linspace(0, 100, 100)
line2_y = [25 - 0.5 * y for y in line2_x]

plt.plot(line1_x, line1_y)              # 绘函数直线公式 1
plt.plot(line2_x, line2_y)              # 绘函数直线公式 2

plt.plot(ans[x], ans[y], '-o')          # 绘交叉点
plt.text(ans[x]-5, ans[y]+5, '('+str(ans[x])+','+str(ans[y])+')')
plt.xlabel("Chicken")
plt.ylabel("Rabbit")
plt.grid()                              # 加网格线
plt.show()

运行结果如下:

[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
鸡 = 20
兔 = 15

[Done] exited with code=0 in 15.086 seconds

 

 

绘制下列联立方程式的线条:

x+y=100

2x+4y=350

import matplotlib.pyplot as plt
from sympy import Symbol, solve
import numpy as np
                                
x = Symbol('x')                         # 定义公式中使用的变量
y = Symbol('y')                         # 定义公式中使用的变量
eq1 = x + y - 100                       # 方程式 1
eq2 = 2 * x + 4 * y - 350               # 方程式 2
ans = solve((eq1, eq2))
print('菜鸟业务员须外出天数 = {}'.format(ans[x]))
print('资深业务员须外出天数 = {}'.format(ans[y]))

line1_x = np.linspace(0, 100, 100)
line1_y = [100 - y for y in line1_x]
line2_x = np.linspace(0, 100, 100)
line2_y = [(350 - 2 * y) / 4 for y in line2_x]

plt.plot(line1_x, line1_y)              # 绘函数直线公式 1
plt.plot(line2_x, line2_y)              # 绘函数直线公式 2

plt.plot(ans[x], ans[y], '-o')          # 绘交叉点
plt.text(ans[x]-5, ans[y]+5, '('+str(ans[x])+','+str(ans[y])+')')
plt.xlabel("Junior Salesman")
plt.ylabel("Senior Salesman")
plt.grid()                              # 加网格线
plt.show()

运行结果: 

[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
菜鸟业务员须外出天数 = 25
资深业务员须外出天数 = 75

[Done] exited with code=0 in 17.229 seconds

 

绘制下列垂直相交的线条:

y_{1}=x

y_{2}=-x+2

import matplotlib.pyplot as plt
from sympy import Symbol, solve
import numpy as np

x = Symbol('x')                         # 定义公式中使用的变量
y = Symbol('y')                         # 定义公式中使用的变量
eq1 = x - y                             # 方程式 1
eq2 = -x -y + 2                         # 方程式 2
ans = solve((eq1, eq2))
print('x = {}'.format(ans[x]))
print('y = {}'.format(ans[y]))


line1_x = np.linspace(-5, 5, 10)
line1_y = [y for y in line1_x]
line2_x = np.linspace(-5, 5, 10)
line2_y = [-y + 2 for y in line2_x]

plt.plot(line1_x, line1_y)              # 绘函数直线公式 1
plt.plot(line2_x, line2_y)              # 绘函数直线公式 2

plt.plot(ans[x], ans[y], '-o')          # 绘交叉点
plt.text(ans[x]-0.5, ans[y]+0.3, '('+str(ans[x])+','+str(ans[y])+')')
plt.xlabel("x-axis")
plt.ylabel("y-axis")
plt.grid()                              # 加网格线
plt.axis('equal')                       # 让x, y轴距长度一致
plt.show()

运行结果:

[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
x = 1
y = 1

[Done] exited with code=0 in 14.334 seconds

 绘制下列垂直相交的线条。

y=0.5x-0.5

y=-2x+7

import matplotlib.pyplot as plt
from sympy import Symbol, solve
import numpy as np

x = Symbol('x')                         # 定义公式中使用的变量
y = Symbol('y')                         # 定义公式中使用的变量
eq1 = 0.5 * x - y - 0.5                 # 方程式 1
eq2 = -2 * x - y + 7                    # 方程式 2
ans = solve((eq1, eq2))
print('x = {}'.format(ans[x]))
print('y = {}'.format(ans[y]))


line1_x = np.linspace(-5, 5, 10)
line1_y = [(0.5 * y - 0.5) for y in line1_x]
line2_x = np.linspace(-5, 5, 10)
line2_y = [(-2 * y + 7) for y in line2_x]

plt.plot(line1_x, line1_y)              # 绘函数直线公式 1
plt.plot(line2_x, line2_y)              # 绘函数直线公式 2

plt.plot(ans[x], ans[y], '-o')          # 绘交叉点
plt.text(ans[x]-0.7, ans[y]+0.5, '('+str(int(ans[x]))+','+str(int(ans[y]))+')')
plt.xlabel("x-axis")
plt.ylabel("y-axis")
plt.grid()                              # 加网格线
plt.axis('equal')                       # 让x, y轴距长度一致
plt.show()

运行结果:

[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
x = 3.00000000000000
y = 1.00000000000000
Traceback (most recent call last):
  File "C:\Python310\lib\site-packages\matplotlib\cbook\__init__.py", line 287, in process
    func(*args, **kwargs)
  File "C:\Python310\lib\site-packages\matplotlib\backend_bases.py", line 3279, in <lambda>
    "close_event", lambda e: manager.destroy())
  File "C:\Python310\lib\site-packages\matplotlib\backends\_backend_tk.py", line 495, in destroy
    self._window_dpi.trace_remove('write', self._window_dpi_cbname)
  File "C:\Python310\lib\tkinter\__init__.py", line 455, in trace_remove
    self._tk.deletecommand(cbname)
_tkinter.TclError: can't delete Tcl command

[Done] exited with code=0 in 18.333 seconds

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值