matlab里面fminsearch,Matlab与Python中fmin与fminsearch结果的差异

我的目标是对一些衰变数据(NMR T2衰变通过CPMG)进行逆拉普拉斯变换。为此,我们得到了CONTIN算法。这个算法是adapted to Matlab by Iari-Gabriel Marino,它工作得很好。我想把这段代码改编成Python。问题的核心是scipy.optimize.fmin,它没有以任何类似于Matlab的fminsearch的方式最小化均方差(MSD)。后者的结果是一个很好的最小化,而前者没有

我已经用Python一行一行地阅读了我的改编代码,以及原始的Matlab。我检查了每一个矩阵和每一个输出。我用它来确定临界点在fmin。我也尝试了scipy.optimize.minimize和其他最小化算法,但是没有一个算法给出一点点令人满意的结果。你知道吗

我为Python和Matlab制作了两个MWE,以使其对所有人都具有可复制性。示例数据来自matlab函数的文档。抱歉,如果这是长代码,但我真的不知道如何缩短它不牺牲可读性和清晰度。我试着让线条尽可能地吻合。我在windows8.1上使用python3.7.3、scipyv1.3.0、numpy1.16.2、matlabr2018b。这是一个相对较新的Anaconda安装(<2个月)。你知道吗

我的代码:import numpy as np

from scipy.optimize import fmin

import matplotlib.pyplot as plt

def msd(g, y, A, alpha, R, w, constraints):

""" msd: mean square deviation. This is the function to be minimized by fmin"""

if 'zero_at_extremes' in constraints:

g[0] = 0

g[-1] = 0

if 'g>0' in constraints:

g = np.abs(g)

r = np.diff(g, axis=0, n=2)

yfit = A @ g

# Sum of weighted square residuals

VAR = np.sum(w * (y - yfit) ** 2)

# Regularizor

REG = alpha ** 2 * np.sum((r - R @ g) ** 2)

# output to be minimized

return VAR + REG

# Objective: match this distribution

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值