import numpy as np
import scipy as sp
import pylab as pl
from scipy.optimize import leastsq#最小二乘法函数
import math
# #
# n=3#多项式次数
# x = [-3,0,2,4]
# y = [3,1,1,3]
def getInput():
xlist,ylist = [],[]
try:
num = int(input(u'请输入数据点个数:'))
flag = num -1
count = 0
while(num):
count += 1
num -= 1
str = input(u'请输入数据点{}(x,y):'.format(count)).split()
xlist.append(float(str[0]))
ylist.append(float(str[1]))
return flag,xlist,ylist
except BaseException as e:
print(u'输入数据格式错误')
print(e)
#目标函数
def real_func(x):
return np.pi*(np.sin(x)+np.cos(x))#pi*(sinx+cosx)
#多项式函数
def fit_func(p,x):
f=np.poly1d(p)
return f(x)
#残差函数
def residuals_func(p,y,x):
ret=fit_func(p,x)-y
return ret
n,x,y = getInput()
p_init=np.random.randn(n)#初始参数值
plsq=leastsq(residuals_func,p_init,args=(y,x))#最小二乘法
print("系数:",plsq[0])
erro = 0
for i in range(len(x)):
erro = (residuals_func(plsq[0],y[i],x[i]))**2 + erro
fErro = round(math.sqrt(erro),7)
print(fErro)
#
# import numpy as np
# import scipy as sp
# import pylab as pl
# from scipy.optimize import leastsq#最小二乘法函数
# import math
#
# # #
# # n=3#多项式次数
# # x = [-3,0,2,4]
# # y = [3,1,1,3]
#
#
#
# def getInput():
# xlist,ylist = [],[]
# try:
# num = int(input(u'请输入数据点个数:'))
# flag = num -1
# count = 0
# while(num):
# count += 1
# num -= 1
# str = input(u'请输入数据点{}(x,y):'.format(count)).split()
# xlist.append(float(str[0]))
# ylist.append(float(str[1]))
# return flag,xlist,ylist
# except BaseException as e:
# print(u'输入数据格式错误')
# print(e)
#
#
#
# #目标函数
# def real_func(x):
# return np.pi*(np.sin(x)+np.cos(x))#pi*(sinx+cosx)
# #多项式函数
# def fit_func(p,x):
# f=np.poly1d(p)
# return f(x)
# #残差函数
# def residuals_func(p,y,x):
# ret=fit_func(p,x)-y
# return ret
#
#
# n,x,y = getInput()
# p_init=np.random.randn(n)#初始参数值
# plsq=leastsq(residuals_func,p_init,args=(y,x))#最小二乘法
# print("系数:",plsq[0])
#
# erro = 0
# for i in range(len(x)):
# erro = (residuals_func(plsq[0],y[i],x[i]))**2 + erro
# fErro = round(math.sqrt(erro),7)
# print(fErro)
#