[已解决] 一组离散的数据,经过Curve Fitting Tool插值拟合后生成了一条曲线,然后对这条曲线求导

[复制链接]
xmzdls 发表于 2021-10-19 22:27:25
CFTL对离散数据插值拟合的结果如图:,因为是插值拟合,无法得到拟合后的函数表达式,所以我选择了生成代码,然后在m文件中调用“[fitresult,gof]=createFit_G(H_G, B_G)”,其中fitresult就是拟合后的函数,但是它的变量类型是cfit格式,matlab自带的求导函数不能应用到这种类型的变量,因此想求助大家,这种情况应该怎么解决?谢谢各位了


最佳答案


WarnerChang 发表于 2021-10-20 13:57:23
xmzdls 发表于 2021-10-20 11:15
数据见下,您帮忙看看

[xData, yData] = prepareCurveData( H, B );

ft = fittype( 'poly4' );

[fitresult, gof] = fit( xData, yData, ft, 'Normalize', 'on' );

fitresult

23 条回复


xmzdls 发表于 2021-10-19 22:28:25
希望有朋友能帮我解惑:handshake

WarnerChang 发表于 2021-10-20 08:35:39
在工具箱中找到save to workspace,把数据保存到工作区中,得到函数表达式,正常求导即可

xmzdls 发表于 2021-10-20 09:39:07
WarnerChang 发表于 2021-10-20 08:35
在工具箱中找到save to workspace,把数据保存到工作区中,得到函数表达式,正常求导即可 ...

谢谢您的回复,按照您的回复,我找到了save to workspace,然后再工作区多了三个变量,请问哪个变量是您说的函数表达式呢?

xmzdls 发表于 2021-10-20 09:43:13
WarnerChang 发表于 2021-10-20 08:35
在工具箱中找到save to workspace,把数据保存到工作区中,得到函数表达式,正常求导即可 ...

谢谢您的回复!按照您的回复,我找到了save to workspace,然后在工作区多了3个变量,请问哪个变量是您说的函数表达式呢?

WarnerChang 发表于 2021-10-20 09:46:05
xmzdls 发表于 2021-10-20 09:43
谢谢您的回复!按照您的回复,我找到了save to workspace,然后在工作区多了3个变量,请问哪个变量是您说 ...

你变量点开看下就知道了

xmzdls 发表于 2021-10-20 09:53:18
WarnerChang 发表于 2021-10-20 09:46
你变量点开看下就知道了

实在不好意思,我还是没弄太懂。我觉得您说的函数表达式可能是三个变量中"fittedmodel",但是这个变量仍然是cfit类型的,能直接求导吗?请您指教

WarnerChang 发表于 2021-10-20 09:59:05
xmzdls 发表于 2021-10-20 09:53
实在不好意思,我还是没弄太懂。我觉得您说的函数表达式可能是三个变量中"fittedmodel",但是这个变量仍 ...

你可以把数值提取出来,写成sym类型,再求导就好了

xmzdls 发表于 2021-10-20 10:37:42
WarnerChang 发表于 2021-10-20 09:59
你可以把数值提取出来,写成sym类型,再求导就好了

我有个疑问,插值拟合能得到拟合系数吗?
图3.jpg

WarnerChang 发表于 2021-10-20 11:04:02
xmzdls 发表于 2021-10-20 10:37
我有个疑问,插值拟合能得到拟合系数吗?

不能吗?把数据啥的发一下
完整描述下

shihe 发表于 2021-10-20 11:06:12
既然是插值,那就没有拟合模型公式,公式都没有,拟合系数当然也不纯在了。可能的话最好先确定一个拟合模型公式,其它剩余的就好办了。
数据贴上来看看。

xmzdls 发表于 2021-10-20 11:13:40
H=[3.00305000000000        5.46080000000000        7.60061000000000        9.55953000000000        11.6182600000000        13.4379500000000        15.2190400000000        17.0541400000000        19.1904000000000        21.9806000000000        25.5212200000000        30.7298700000000        40.2957100000000        61.7619200000000        89.6677300000000        118.595570000000];
B=[0.101700000000000        0.205820000000000        0.318750000000000        0.432270000000000        0.559460000000000        0.673550000000000        0.787820000000000        0.898790000000000        1.01349000000000        1.12906000000000        1.22647000000000        1.34086000000000        1.45537000000000        1.56452000000000        1.67497000000000        1.78372000000000];

xmzdls 发表于 2021-10-20 11:14:25
shihe 发表于 2021-10-20 11:06
既然是插值,那就没有拟合模型公式,公式都没有,拟合系数当然也不纯在了。可能的话最好先确定一个拟合模型 ...

数据见下,您帮忙看看

xmzdls 发表于 2021-10-20 11:15:18
WarnerChang 发表于 2021-10-20 11:04
不能吗?把数据啥的发一下
完整描述下

数据见下,您帮忙看看

WarnerChang 发表于 2021-10-20 13:57:23
xmzdls 发表于 2021-10-20 11:15
数据见下,您帮忙看看

[xData, yData] = prepareCurveData( H, B );

ft = fittype( 'poly4' );

[fitresult, gof] = fit( xData, yData, ft, 'Normalize', 'on' );

fitresult
回复此楼

xmzdls 发表于 2021-10-20 14:12:53
WarnerChang 发表于 2021-10-20 13:57
[xData, yData] = prepareCurveData( H, B );

ft = fittype( 'poly4' );

谢谢您的帮助,我看懂了您的程序,是多项式拟合,也是一种方法,再次谢谢

WarnerChang 发表于 2021-10-20 14:15:17
xmzdls 发表于 2021-10-20 14:12
谢谢您的帮助,我看懂了您的程序,是多项式拟合,也是一种方法,再次谢谢 ...

有用的话,帮忙采纳一下答案

shihe 发表于 2021-10-21 12:57:52
用1stOpt帮你搜索了一个效果更好的公式:

y = 1/(p1+p2*x^2+p3/x^2)+p4*exp(p5/x);


  1. Root of Mean Square Error (RMSE): 0.00804166733826757
  2. Sum of Squared Residual: 0.00103469461726975
  3. Correlation Coef. (R): 0.999882934131454
  4. R-Square: 0.999765881967325

  5. Parameter        Best Estimate
  6. ----------        -------------
  7. p1        0.311140680523883
  8. p2        -2.17874988882142E-6
  9. p3        79.0461668286242
  10. p4        -1.92655582724472
  11. p5        -14.5540753156122
复制代码


p1.jpg

顾世梁 发表于 2021-10-21 13:49:39
xmzdls 发表于 2021-10-20 14:12
谢谢您的帮助,我看懂了您的程序,是多项式拟合,也是一种方法,再次谢谢 ...

多项式拟合不太合适。
fx=@(x,b)exp(b(1)+b(2)*x+b(3)*x.^b(4))./(1+b(5)*exp(b(6)*x));
SSy =    4.3167
b =[-1.584552795  0.1806376683  -2.413005997  -0.7489006278  0.1288013455  0.179118596]
RSS = 0.000310443270774
MSe =  3.4494e-05
R^2 =  0.99993

xmzdls 发表于 2021-10-22 10:08:53
顾世梁 发表于 2021-10-21 13:49
多项式拟合不太合适。
fx=@(x,b)exp(b(1)+b(2)*x+b(3)*x.^b(4))./(1+b(5)*exp(b(6)*x));
SSy =    4.3167 ...

您好,请问您这个表达式怎么确定的?

xmzdls 发表于 2021-10-22 10:09:43
shihe 发表于 2021-10-21 12:57
用1stOpt帮你搜索了一个效果更好的公式:

y = 1/(p1+p2*x^2+p3/x^2)+p4*exp(p5/x);

谢谢您,这个结果非常好,我去学习下1stOpt

顾世梁 发表于 2021-10-22 11:31:52
xmzdls 发表于 2021-10-22 10:08
您好,请问您这个表达式怎么确定的?

根据数据走向,大体可确定以指数形式为主体,试了几个不同的的模型,该模型能很好地拟合该组数据。

xmzdls 发表于 2021-10-22 14:01:04
顾世梁 发表于 2021-10-22 11:31
根据数据走向,大体可确定以指数形式为主体,试了几个不同的的模型,该模型能很好地拟合该组数据。 ...

厉害。。。。

nightwishcc 发表于 2021-10-24 11:01:15
感谢解答我也有类似的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表