Matlab数据处理:用离散数据根据自定义多变量非线性方程拟合解析方程求取参数

问题:已知xlsx表格[X,Y,Z]的离散取值,希望用Z=C1Y^{C2}X^{C3}+C5Y^{C6}X 来拟合,用matlab求得[C1,C2,C3,C5,C6]的值

解答:

clc;
clear;
close all;
%加载数据(注意为方便读取,data.xlsx数据已经手动处理)
data = xlsread('modify_data.xlsx');
%x为时间h,y为压强Mpa,z=%
x=data(:,1);y=data(:,2);z=data(:,3);
%采用匿名函数按照离散数据以给定函数形式拟合解析式,x、y自变量,y因变量,Ci为参数
myfit=fittype( @(C1,C2,C3,C5,C6,x,y) C1.*(y.^C2).*(x.^C3)+C5.*(y.^C6).*x, ...
        'independent', {'x', 'y'}, ...
        'dependent', 'z' );
%拟合数据,特别注意'StartPoint'需要适当选取[C1,...,C6]否则不收敛,
%利用curvefittingtool工具箱不断调整得出参数起始点可取[-0.0700,0.2750,0.5450,-3.9575,0.9949],使得拟合收敛
[coe,gof] = fit([x,y],z,myfit,'StartPoint',[-0.0700,0.2750,0.5450,-3.9575,0.9949]);
coe
gof
%绘图
plot(coe, [x y], z);:

运行结果:

General model:
     coe(x,y) = C1.*(y.^C2).*(x.^C3)+C5.*(y.^C6).*x
     Coefficients (with 95% confidence bounds):
       C1 =   2.402e-06  (-9.316e-07, 5.736e-06)
       C2 =       1.915  (1.705, 2.125)
       C3 =     0.08906  (0.06933, 0.1088)
       C5 =  -9.081e-08  (-2.133e-06, 1.952e-06)
       C6 =      0.9633  (-2.509, 4.436)


gof = 

  包含以下字段的 struct:

           sse: 2.4940
       rsquare: 0.8668
           dfe: 199
    adjrsquare: 0.8641
          rmse: 0.1119

 备注:

1.rsquare=0.8668认为接近1,拟合效果不错

2.fill函数的startpoint如何设置[C1,...C6]得到一个收敛点?(我找了没找到什么设置startpoint好方法,摸索用如下方法找到了一个还可接受结果)

利用curvefitting工具箱里的custom equtation,在fit options手动改变C1到C6数值(二分法思想:先很大正数后很大负数,初步判定Ci的正负,然后除2选择中间值或再除2,观察拟合趋势决定找寻方向),观察拟合效果,并观察左边是否converge收敛和warning警告rsquare为正,差不多到收敛和requare到0.6左右之后停止手动操作。接下来可以编写循环微调参数步长,筛选出更大的rsquare,类似这样:

for i=1:100
    [coe,gof] = fit([x,y],z,myfit,'StartPoint',[0.001664,0.0231+0.0001*i,-0.007028,-0.9979,-0.0068,-0.5807,-1.013,-0.08-3.5852e-04]);
    if gof.rsquare>0.6
        fprintf('i=%d,gof.requare=%f\n',i,gof.rsquare);
    end
    
end

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值