使用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
绘制下列垂直相交的线条:
=x
=-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