首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在曲线拟合过程中,参数的协方差无法估计。

在曲线拟合过程中,参数的协方差无法估计。
EN

Stack Overflow用户
提问于 2022-07-11 09:17:11
回答 1查看 84关注 0票数 1

我试图使用scipy.optimize.curve_fit函数根据函数表达式求解两个未知的参数。我使用的公式如下:在这里输入图像描述

我的代码如下:

代码语言:javascript
运行
复制
p_freqs =np.array(0.,8.19672131,16.39344262,24.59016393,32.78688525,
                  40.98360656,49.18032787,57.37704918,65.57377049,73.7704918,
                  81.96721311,90.16393443,98.36065574,106.55737705,114.75409836,
                  122.95081967,131.14754098,139.3442623, 147.54098361,155.73770492,
                  163.93442623,172.13114754,180.32786885,188.52459016,196.72131148,
                  204.91803279,213.1147541, 221.31147541,229.50819672,237.70491803,
                  245.90163934)
p_fft_amp1 = np.array(3.34278536e-08,5.73549829e-08,1.94897033e-08,1.59088184e-08,
                      9.23948302e-09,3.71198908e-09,1.85535722e-09,1.86064653e-09,
                      1.52149363e-09,1.33626573e-09,1.19468040e-09,1.08304535e-09,
                      9.96594475e-10,9.25671797e-10,8.66775330e-10,8.17287132e-10,
                      7.75342888e-10,7.39541296e-10,7.08843676e-10,6.82440637e-10,
                      6.59712650e-10,6.40169517e-10,6.23422124e-10,6.09159901e-10,
                      5.97134297e-10,5.87146816e-10,5.79040074e-10,5.72691200e-10,
                      5.68006964e-10,5.64920239e-10,5.63387557e-10)
def  cal_omiga_tstar(omiga,tstar,f):
    return omiga*np.exp(-np.pi*f*tstar)/(1+(f/18.15)**2)
omiga,tstar = optimize.curve_fit(cal_omiga_tstar,p_freqs,p_fft_amp1)[0]

当我运行代码时,我得到以下提示:OptimizeWarning: Covariance of the parameters could not be estimated warnings.warn('Covariance of the parameters could not be estimated'

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-11 11:01:43

我无法准确确定错误消息的原因,因为您的代码在此之前有一些错误。首先,两个数组的构造具有无效的语法,然后cal_omiga_tstar的定义有错误的参数顺序。在修复这些问题时,我确实收到过一次您的错误消息,但我没有能够复制它,非常奇怪。不过,我确实满足了你的要求。您应该提供对参数的初始猜测,特别是考虑到您的y有这么多低值。这里没有魔法,只需绘制模型和数据,直到它相对接近。然后,让算法拿起轮子。

这是我的密码:

代码语言:javascript
运行
复制
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import numpy as np

# Changed here, was "np.array(0.,..."
p_freqs =np.array([0.,8.19672131,16.39344262,24.59016393,32.78688525,
                  40.98360656,49.18032787,57.37704918,65.57377049,73.7704918,
                  81.96721311,90.16393443,98.36065574,106.55737705,114.75409836,
                  122.95081967,131.14754098,139.3442623, 147.54098361,155.73770492,
                  163.93442623,172.13114754,180.32786885,188.52459016,196.72131148,
                  204.91803279,213.1147541, 221.31147541,229.50819672,237.70491803,
                  245.90163934])
p_fft_amp1 = np.array([3.34278536e-08,5.73549829e-08,1.94897033e-08,1.59088184e-08,
                      9.23948302e-09,3.71198908e-09,1.85535722e-09,1.86064653e-09,
                      1.52149363e-09,1.33626573e-09,1.19468040e-09,1.08304535e-09,
                      9.96594475e-10,9.25671797e-10,8.66775330e-10,8.17287132e-10,
                      7.75342888e-10,7.39541296e-10,7.08843676e-10,6.82440637e-10,
                      6.59712650e-10,6.40169517e-10,6.23422124e-10,6.09159901e-10,
                      5.97134297e-10,5.87146816e-10,5.79040074e-10,5.72691200e-10,
                      5.68006964e-10,5.64920239e-10,5.63387557e-10])
# Changed sequence from "omiga, tstar, f" to "f, omiga, tstar".
def  cal_omiga_tstar(f, omiga,tstar):
    return omiga*np.exp(-np.pi*f*tstar)/(1+(f/18.15)**2)

# Changed this call to get popt, pcov, and supplied the initial guesses
popt, pcov = curve_fit(cal_omiga_tstar,p_freqs,p_fft_amp1, p0=(1E-5, 1E-2))

这是poptarray([ 4.51365934e-08, -1.48124194e-06])pcovarray([[1.35757744e-17, 3.54656128e-12],[3.54656128e-12, 2.90508007e-06]])。如您所见,在这种情况下可以估计协方差矩阵。

下面是x型数据曲线:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72936204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档