python求解优化问题_科学计算:最优化问题-2(Python)

三、最小二乘法

最小二乘法(least square

method)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。

Python的最小二乘函数是leastsq。调用方式:

leastsq(func,

x0, args=(), Dfun=None,

full_output=0, col_deriv=0,

ftol=1.49012e-08, xtol=1.49012e-08,

gtol=0.0, maxfev=0,

epsfcn=0.0,factor=100,

diag=None)

---------我是代码的分割线---------------

案例一:

from pylab import *

from numpy import *

from scipy.optimize import leastsq

#fp是真实的函数,v是系数,x是变量。fn是fp函数的一个具体实现,e是误差函数。

fp = lambda v, x: v[0]/(x**v[1])*sin(v[2]*x)

v_real = [1.5, 0.1, 2.]

fn = lambda x: fp(v_real, x)

e = lambda v, x, y:

(fp(v,x)-y)

#设计一个含有噪音的函数

n = 30

xmin = 0.1

xmax = 5

x = linspace(xmin,xmax,n)

y = fn(x) + rand(len(x))*0.2*(fn(x).max()-fn(x).min())

#设计初始值,并调用leastsq函数求解。用args指明变量,maxfev是最多调用函数的次数。

v0 = [3., 1, 4.]

v, success = leastsq(e, v0, args=(x,y),

maxfev=10000)

#绘出真实曲线和拟合曲线

def plot_fit():

print

'Estimater parameters: ', v

print 'Real

parameters: ', v_real

X =

linspace(xmin,xmax,n*5)

plot(x,y,'ro', X, fp(v,X))

plot_fit()

show()

拟合曲线

拟合值与真实值

案例二:

from numpy import *

from scipy.optimize import

leastsq

import matplotlib.pyplot as

plt

x = arange(0,6e-2,6e-2/30)

A,k,theta = 10, 1.0/3e-2, pi/6

y_true = A*sin(2*pi*k*x+theta)

y_meas = y_true + 2*random.randn(len(x))

def residuals(p, y, x):

A,k,theta =

p

err =

y-A*sin(2*pi*k*x+theta)

return

err

def peval_r(x, p):

return

p[0]*sin(2*pi*p[1]*x+p[2])

p0 = [8, 1/2.3e-2, pi/3]

plsq = leastsq(residuals, p0, args=(y_meas, x))

plt.plot(x,peval_r(x,plsq[0]),x,y_meas,'o',x,y_true)

plt.title('Least-squares fit to noisy data')

plt.legend(['Fit', 'Noisy', 'True'])

plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值