查看: 1189|回复: 4|关注: 0

[已解决] 用matlab怎么拟合出特定表达式的方程?

[复制链接]

新手

20 麦片

财富积分


050


13

主题

53

帖子

0

最佳答案
用matlab怎么拟合出特定表达式的方程?我现在有一组数据,我想拟合出a+b*x+c*sin(2*pi*x/d+e)这个形式的表达式,系数为a,b,c,d,e,我用cftool里的custom equation试了一下,出来的结果很不好,大家给我看一下应该怎么操作。数据如下:
月份:[1:1:96]
浓度:[1804 1573 1159 1120 1161 959 949 951 1108 1318 2891 2764 2356 1593 1404 1313 1128 1116 1065 999 1349 1638 2352 2208 2227 1946 1452 1486 1285 1190 1041 1035 1330 1722 2221 2649 2356 1635 1742 1385 1154 1159 920 1090 1058 1779 2495 2731 3628 2413 1656 1264 1290 1132 937 979 1145 1678 1721 2215 2523 1282 1657 1219 1094 1068 1083 977 937 1622 1757 1717 1985 1294 1224 1098 965 917 915 970 927 1349 2011 2189 2282 1354 1358 1081 1020 995 980 948 1061 1476 2136 2392]

论坛优秀回答者

中级

855 麦片

财富积分


5001500


0

主题

2176

帖子

186

最佳答案
  • 关注者: 118
发表于 2018-7-23 21:42:37 | 显示全部楼层 |此回复为最佳答案
用1stOpt试试,不用猜初值,使用更简单:

Function y=a+b*x+c*sin(2*pi*x/d+e);
Data;
x=[1:1:96];
y=[1804,1573,1159,1120,1161,959,949,951,1108,1318,2891,2764,2356,1593,1404,1313,1128,1116,1065,999,1349,1638,2352,2208,2227,1946,1452,1486,1285,1190,1041,1035,1330,1722,2221,2649,2356,1635,1742,1385,1154,1159,920,1090,1058,1779,2495,2731,3628,2413,1656,1264,1290,1132,937,979,1145,1678,1721,2215,2523,1282,1657,1219,1094,1068,1083,977,937,1622,1757,1717,1985,1294,1224,1098,965,917,915,970,927,1349,2011,2189,2282,1354,1358,1081,1020,995,980,948,1061,1476,2136,2392];


均方差(RMSE): 310.903709429391
残差平方和(SSR): 9279467.18754769
相关系数(R): 0.836572467988913
相关系数之平方(R^2): 0.699853494197061
修正R平方(Adj. R^2): 0.693398730631406
确定系数(DC): 0.699853494197062
卡方系数(Chi-Square): 2572.0049634607
F统计(F-Statistic): 53.0463169879473

参数        最佳估算
----------        -------------
a        1611.66820287278
b        -1.96208633729936
c        669.117880094744
d        12.0552442703549
e        749.19574848143


注意如果不加范围约束,参数组值是不唯一的,因为公式里有周期性三角函数。



t1.jpg

新手

20 麦片

财富积分


050


13

主题

53

帖子

0

最佳答案
 楼主| 发表于 2018-7-24 10:13:23 | 显示全部楼层
shihe 发表于 2018-7-23 21:42
用1stOpt试试,不用猜初值,使用更简单:

Function y=a+b*x+c*sin(2*pi*x/d+e);

老哥,1stOpt 是另外一个单独的软件么?为什么用matlab里的cftool不能拟合出合理的结果来?

论坛优秀回答者

中级

855 麦片

财富积分


5001500


0

主题

2176

帖子

186

最佳答案
  • 关注者: 118
发表于 2018-7-24 15:10:37 | 显示全部楼层
Matlab拟合工具箱采用的是局部最优算法,因此非常依赖用户猜测提供的初值,初值的好坏决定了拟合计算是否收敛,对一般用户来说猜初值不是件容易的事情,因此很容易非正确的局部最优解。

新手

20 麦片

财富积分


050


13

主题

53

帖子

0

最佳答案
 楼主| 发表于 2018-10-17 17:13:04 | 显示全部楼层
shihe 发表于 2018-7-24 15:10
Matlab拟合工具箱采用的是局部最优算法,因此非常依赖用户猜测提供的初值,初值的好坏决定了拟合计算是否收 ...

老哥,你帮我看看我这个错误是什么原因,你有没有遇到过,应该怎么解决。我用simulink模拟,之前还好好的,然后不知道怎么回事,就出来这么一个错误,之前从来没见过,不知道应该怎么解决,老哥你帮我看一下。
1539745699(1).png

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表