aiolia8672
2013-05-09, 15:19
各位前辈大家好,我是刚学用matlab编程不久,想用最小二乘拟合性能退化数据的程序,根据以前的一个大致模板编了一个小程序,调试的时候总是类似“未定义变量或函数”等的报错,但是内联函数inline不是不需要定义变量吗?难道需要用function提前定义一下?且我程序中的fun2为要拟合的函数。。
我用M文件写的程序及说明如下,还望求各位前辈多加指点,帮晚辈看一下该程序,争取能让调试成功,晚辈不胜感激!:
%与指数退化模型Y=b*exp(a*T)拟合
T=1;
f2=feval(fun2, b, T);
[b, resnorm2]=Isqcurvefit(fun2, [0 0], T, Y);
fun2=inline('b(1)*exp(b(2)*T)', 'b', 'T');
Z=[14 17 21 17 20 15310 18 15300 15210 15200
15 18 22 19 19 20 20 20 15310 15330
15 18 20 20 20 17 15 20 18 19
15 15 20 16 22 20 20 12 11 13
14 15 20 20 20 20 673 15110 19290 19870
14 14 19 20 20 20 19 1690 2293 2727
15 15 21 19 19 20 19 16 18 3519
15 16 15 19 20 20 19 946 2030 18840
14 15 19 20 20 20 19 15320 17 19890]
i=1;
while i<=9
i=i+1;
Y=Z(:,i);
%函数的拟合值
F2(:,i)=resnorm2;
R2(:,i)=resnorm2;
para21=b(1,1);
A2(:,i)=para21;
para22=b(1,2);
B2(:,i)=para22;
end
disp('拟合的函数为:');
fun2
以上程序中,内联函数inline的输入部分:第一项为表达被拟合退化模型的函数表达式,此处的表达式是指数退化模型;b为指数退化模型的参数矢量,注:b(1)表示第一个参数,b(2)表示第二个参数;T表示测量时刻矢量,形式为1*N,N为测量时间点个数。内联函数inline的输出部分:fun2为被拟合模型函数。函数lsqcurvefit的输入部分:fun2为被拟合模型函数;[0 0]为函数初值,自定义,初值可以试探;Y表示Z的第i列(Z表示退化数据M*N阶的矩阵,其中M为样本
量,N为测量时间点个数:i表示进行拟合的第i个样品(i≤M))。
函数lsqcurvefit的输出部分:b为退化模型的参数矢量;resnorm2为输出的误差平方和。
函数reval的输入部分:fun2为被拟合模型函数,b为指数退化模型的参数矢量,
T表示测量时刻矢量;函数feval的输出部分:亿为内联函数所表示的退化模型在该时刻的拟合值。
其他说明:F2表示拟合值矩阵;R2表示误差平方和矩阵;para21表示退化模型
参数1的值;para22表示退化模型参数2;A2表示退化模型参数矩阵。
我用M文件写的程序及说明如下,还望求各位前辈多加指点,帮晚辈看一下该程序,争取能让调试成功,晚辈不胜感激!:
%与指数退化模型Y=b*exp(a*T)拟合
T=1;
f2=feval(fun2, b, T);
[b, resnorm2]=Isqcurvefit(fun2, [0 0], T, Y);
fun2=inline('b(1)*exp(b(2)*T)', 'b', 'T');
Z=[14 17 21 17 20 15310 18 15300 15210 15200
15 18 22 19 19 20 20 20 15310 15330
15 18 20 20 20 17 15 20 18 19
15 15 20 16 22 20 20 12 11 13
14 15 20 20 20 20 673 15110 19290 19870
14 14 19 20 20 20 19 1690 2293 2727
15 15 21 19 19 20 19 16 18 3519
15 16 15 19 20 20 19 946 2030 18840
14 15 19 20 20 20 19 15320 17 19890]
i=1;
while i<=9
i=i+1;
Y=Z(:,i);
%函数的拟合值
F2(:,i)=resnorm2;
R2(:,i)=resnorm2;
para21=b(1,1);
A2(:,i)=para21;
para22=b(1,2);
B2(:,i)=para22;
end
disp('拟合的函数为:');
fun2
以上程序中,内联函数inline的输入部分:第一项为表达被拟合退化模型的函数表达式,此处的表达式是指数退化模型;b为指数退化模型的参数矢量,注:b(1)表示第一个参数,b(2)表示第二个参数;T表示测量时刻矢量,形式为1*N,N为测量时间点个数。内联函数inline的输出部分:fun2为被拟合模型函数。函数lsqcurvefit的输入部分:fun2为被拟合模型函数;[0 0]为函数初值,自定义,初值可以试探;Y表示Z的第i列(Z表示退化数据M*N阶的矩阵,其中M为样本
量,N为测量时间点个数:i表示进行拟合的第i个样品(i≤M))。
函数lsqcurvefit的输出部分:b为退化模型的参数矢量;resnorm2为输出的误差平方和。
函数reval的输入部分:fun2为被拟合模型函数,b为指数退化模型的参数矢量,
T表示测量时刻矢量;函数feval的输出部分:亿为内联函数所表示的退化模型在该时刻的拟合值。
其他说明:F2表示拟合值矩阵;R2表示误差平方和矩阵;para21表示退化模型
参数1的值;para22表示退化模型参数2;A2表示退化模型参数矩阵。