当前位置:编程学习 > Matlab >>

关于matlab数值优化问题,利用lsqcurvefit进行参数拟合

程序: function F=lutaolin_1_adj(x); % 分别拟合不同垂直载荷下的B,D,E Sv=0; Sh=0; C = 1.65; % 垂直载荷共有4组,对每组分别拟合,分别得到B, D, E %以下是四组实验数据 %Fz=1985.37/1000; %xdata_kappa=[0.00 1.03 0.99 1.02 1.12 1.75 3.43 11.49 100.00]; %ydata_Fx=[0.00 234.88 284.69 314.99 355.93 386.90 603.34 752.94 935.93]; %Fz=3624.99/1000; %xdata_kappa=[0.00 0.24 0.81 1.13 1.51 2.74 6.88 51.25 %100.00]; %ydata_Fx=[0.00 255.39 467.91 783.34 964.73 1129.76 1342.61 %1563.66 1605.09]; Fz=4842.20/1000; xdata_kappa=[0.00 0.26 0.73 1.02 1.28 1.93 2.39 4.17]; ydata_Fx=[0.00 228.13 784.07 946.62 1180.25 1341.57 1590.54 1776.902]; %Fz=7500.82/1000; %xdata_kappa=[0.00 0.17 0.30 0.21 0.65 0.64 1.15 1.21 %0.93 1.59]; %ydata_Fx=[0.00 363.20 483.26 713.36 934.30 1064.25 1241.40 %1370.64 1655.24 1951.03]; % 设x = [B D E] %x0 = [0.3 1800 0.7];% Fz=2003N 待拟合变量的初始值 %x0 = [0.3 3000 0.6];%Fz=3635N 待拟合变量的初始值 x0 = [0.2 4000 0.3];%Fz=4865N 待拟合变量的初始值 %x0 = [0.3 6000 0.9];%Fz=7535N 待拟合变量的初始值 opt=optimset('MaxIter',1000,'MaxFunEvals',3000,'tolx',1e-16,'tolf',1e-9);%MaxIter最大迭代次数 MaxIter函数评价的最大次数 tolx tolf 为控制误差 x = lsqcurvefit(@magicformula,x0,xdata_kappa,ydata_Fx,[],[],opt);%[][]采用默认设置 若为lb,rb是定义了x的解算范围 B = x(1) D = x(2) E = x(3) % 利用当前拟合后的数据计算新的一组fx,然后画图对比 fx_mf =x(2)*sin(1.65*atan(x(1)*(xdata_kappa)-x(3)*(x(1)*(xdata_kappa)-atan(x(1)*(xdata_kappa))))); figure(1) plot(xdata_kappa,-ydata_Fx,'k-',xdata_kappa,-fx_mf,'k--'); xlabel('滑移率');ylabel('纵向力(N)'); legend('原始数据','拟合数据'); grid on function fx_mf = magicformula(x, xdata_kappa) % x = [B D E] fx_mf =x(2)*sin(1.65*atan(x(1)*(xdata_kappa)-x(3)*(x(1)*(xdata_kappa)-atan(x(1)*(xdata_kappa))))); 这是一个利用函数lsqcurvefit进行拟合的程序。 这是其中第一组数据拟合出来的图形,后来出现了线性的变化,应该是比较圆滑的曲线。 还有直线的走向也有问题。 走向应该是如图其中滑移率大于0的部分。 最后进行拟合,应该还有误差,我不太清楚这个误差是怎么得到的。 跪求高手。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
追问:但是最后拟合出来的图形尽然是这样的。
你再看前面x、Fx给予的值也都是大于0的,但是最后拟合出来的竟然是Fx小于0,符号全部弄反了。
本身就是对一组参数进行拟合的,还有最后是怎么算出它的误差的呢?你qq多少?
这个误差在哪体现出来呢?也没数据出现啊
答案:Sv,Sh,C,Fz你的程序中没有用到
MaxFunEvals 3000次不够,建议迭代次数都用默认

四组数据中有些有问题
算出来的结果当然和你给的图不一样

上一个:matlab问题紧急求解!请哪位高手帮帮忙啊!
下一个:matlab的m文件中怎样改变文字大小

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,