You are on page 1of 4

#

import matplotlib.pyplot as plt


from pylab import *
from sympy import *
import random
def form_data(n1):
XY=Matrix([[0]*2]*n1)
for i in range(n1):
t=i*1.0
XY[i,0]=t
XY[i,1]=sin(t)/sin(8.0)
return XY,
def form_eq(m1):
A=Matrix([[0]*m1]*m1)
F=Matrix([0]*m1)
for j in range(m1):
s=0
for i in range(n1):
s=s+XY[i,1]*XY[i,0]**j
F[j]=s
for k in range(m1):
s=0
for i in range(n1):
s=s+(XY[i,0])**(j+k)
A[j,k]=s
return A,F
def solve_f():
A1=A.inv()
a=A1*F
print(a)
f=0
for k in range(m1):
f=f+a[k]*x**k
return a,f
def plot_curve(f,XY):
n,HP = np.shape(XY)
plt_line0(0, 0, 1,2, 0, 1)
plt_function(f, XY[0,0], XY[(n1-1),0], 1, 1,2)

# plt.axis([-6, 36, -6, 36] and 'off') # 关闭坐标

plt.axis([0,1,0, 2] and 'equal')


fig_temp="temp.png"
savefig(fig_temp)
plt.close()
return
def plt_line0(x11, y11, x22, y22, k11,n11): #画直线

# 起点,终点,粗细,n11(1-实线,2-虚线,3-点画线

lines = plt.plot([x11, x22], [y11, y22])


if n11==1:
plt.setp(lines, color='k', linewidth=k11,
linestyle='-')
if n11==2:
plt.setp(lines, color='k', linewidth=k11,
linestyle='--')
if n11 == 3:
plt.setp(lines, color='k', linewidth=k11,
linestyle='-.')
return
def plt_function(FF, x11, x22, k11,n11,n22): #画函数曲线

# 函数, x-起点,x-终点,粗细,n11(1-实线,2-虚线,3-点画线

n=30
XX=[0]*n; YY=[0]*n
Dx=(x22-x11)/(n-1)
for i in range(n):
XX[i]=x11+Dx*i
YY[i]=FF.subs(x,XX[i])
lines = plt.plot(XX, YY)
if n11==1:
plt.setp(lines, color='k', linewidth=k11,
linestyle='-')
if n11==2:
plt.setp(lines, color='k', linewidth=k11,
linestyle='--')
if n11 == 3:
plt.setp(lines, color='k', linewidth=k11,
linestyle='-.')
if n22==2:
n,HP = np.shape(XY)
for i in range(n):
plt_circle(0.08, XY[i,0], XY[i,1], 1, 1)
x1=XY[i, 0]+0.25; y1=XY[i,1]-0.3
str2="("+str(XY[i,0])+","+str(XY[i,1])+")"
plt_word(x1, y1, str2)
return
def plt_circle(r, x11, y11, k11,n11): #画圆

# r 半径, x,y-圆心坐标,粗细,n11(1-实线,2-虚线,3-点画
线
n=50
XX=[0]*(n+1); YY=[0]*(n+1)
Dx=2*pi/n
for i in range(n+1):
theta=Dx*i
XX[i]=x11+r*cos(theta)
YY[i] = y11 + r * sin(theta)
lines = plt.plot(XX, YY)
if n11==1:
plt.setp(lines, color='k', linewidth=k11,
linestyle='-')
if n11==2:
plt.setp(lines, color='k', linewidth=k11,
linestyle='--')
if n11 == 3:
plt.setp(lines, color='k', linewidth=k11,
linestyle='-.')
return
def plt_word(x1,y1,str2):
# str1 = '%s' % str2
# str2 = str1.replace("**","^^",8)
# str2 = str2.replace("**", "", 8)
plt.text(x1,y1,"$%s$" % str2, size=8)
return
randomnuml=random.randint(1000,9999)
txtfile=str(randomnuml)+".txt" #文件名
f2=open(txtfile,'w')
x=symbols('x')
n1=11; m1=6
[XY,]=form_data(n1)
[A,F]=form_eq(m1)
[a,f]=solve_f()
plot_curve(f,XY)
f2.write("\n F= %s" %f)

输出结果:

F= 0.000783498891058911*x**5 - 0.0292692097439593*x**4 +
0.358012485011466*x**3 - 1.70348356094871*x**2 +
2.61377019220427*x - 0.092440138049295

You might also like