
你要知道,你要拟合的是一个分段函数,这本身就不是一般的连续光滑函数。
nlinfit之所以要有初值这一项,就是考虑到在某些变态的情况下,无法找到最小二乘函数的最小值,可能是一个局部的最小值,也可能根本找不到,所以有必要通过改变迭代初值的方法进行试验。对于这种分段函数,最好的方法还是分段拟合。
fun1=inline('4213-300x/ref(1)-300(ref(2)+ref(3))+300ref(3)exp(-x/(ref(3)ref(4)))','ref','x');
fun2=inline('4213-3000/ref(1)-300ref(3)exp(-x/(ref(3)ref(4)))(exp(10/(ref(3)ref(4)))-1)','ref','x');
fun=@(ref,t)((t<=10)fun1(ref,t)+(t>10)fun2(ref,t));
t=0:01:50;
v=[3969
3963
3959
3955
3952
3949
3947
3945
3943
3941
3939
3938
3936
3935
3933
3932
393
3929
3928
3927
3926
3925
3923
3922
3921
392
3919
3918
3917
3916
3915
3914
3913
3912
3911
391
3909
3908
3907
3907
3906
3905
3904
3903
3903
3902
3901
39
39
3899
3898
3898
3897
3896
3896
3895
3894
3893
3893
3892
3891
3891
389
3889
3889
3888
3888
3887
3887
3886
3886
3885
3884
3884
3883
3882
3882
3881
388
388
3879
3879
3878
3878
3877
3877
3876
3876
3875
3875
3874
3874
3873
3873
3872
3872
3871
387
387
3869
3869
4105
4108
411
4112
4114
4115
4116
4117
4118
4119
4119
412
412
4121
4122
4122
4123
4123
4124
4124
4124
4125
4125
4126
4126
4126
4127
4127
4128
4128
4129
4129
4129
4129
4129
413
413
413
413
413
4131
4131
4131
4131
4132
4132
4132
4132
4132
4132
4133
4133
4133
4133
4133
4134
4134
4134
4134
4134
4134
4135
4135
4135
4135
4135
4136
4136
4136
4136
4136
4137
4137
4138
4138
4138
4139
4139
4139
4139
4139
414
414
414
414
414
414
414
414
414
414
414
414
414
414
414
414
414
414
414
414
414
414
414
414
4141
4141
4141
4141
4141
4141
4141
4141
4141
4141
4142
4142
4142
4142
4142
4142
4142
4142
4142
4142
4143
4143
4143
4143
4143
4143
4143
4143
4143
4143
4143
4143
4143
4144
4144
4144
4144
4144
4144
4144
4144
4144
4144
4144
4145
4145
4145
4145
4145
4145
4145
4145
4145
4145
4145
4145
4145
4145
4145
4145
4146
4146
4146
4146
4146
4146
4146
4146
4146
4146
4146
4146
4146
4147
4147
4147
4147
4147
4147
4147
4147
4147
4147
4147
4147
4147
4147
4147
4148
4148
4148
4148
4148
4148
4148
4148
4148
4148
4148
4148
4148
4148
4148
4148
4148
4149
4149
4149
4149
4149
4149
4149
4149
4149
4149
4149
4149
4149
4149
4149
4149
415
415
415
415
415
415
415
415
415
415
415
415
415
415
415
415
415
415
415
415
4151
4151
4151
4151
4151
4151
4151
4151
4151
4151
4151
4151
4151
4151
4151
4151
4151
4151
4151
4151
4151
4152
4152
4152
4152
4152
4152
4152
4152
4152
4152
4152
4152
4152
4152
4152
4152
4152
4152
4152
4152
4152
4152
4152
4153
4153
4153
4153
4153
4153
4153
4153
4153
4153
4153
4153
4153
4153
4153
4153
4153
4153
4153
4153
4153
4153
4153
4153
4154
4154
4154
4154
4154
4154
4154
4154
4154
4154
4154
4154
4154
4154
4154
4154
4154
4154
4154
4154
4154
4154
4154
4154
4154
4154
4155
4155
4155
4155
4155
4155
4155
4155
4155
4155
4155
4155
4155
4155
4155
4155
4155
4155
4155
4155
4155
4155
4155
4155
4155
4155
4155
4155
4156
4156
4156
4156
4156
4156
4156
4156
4156
4156
4156
4156
4156
4156
4156
4156
4156
4156
4156
4156
4156
4156
4156
4156
4156
4156
4156
4156
4156
4156
4156
4156];
abc=nlinfit(t',v,fun,[51891 000083 000013 12050]');
plot(t,v);hold on;
f=@(t)(fun(abc,t));
fplot(f,[0,50],'r')
就实际应用而言,还是以非线性代数方程参数拟合问题居多。
实现非线性代数方程参数拟合的软件有很多,比如MATLAB、Origin、SPSS和1stOpt等,特别是1stOpt,其代码简单易学,几乎不需调试,即可获得高质量的拟合结果,不过需要指出的是,该软件的拟合过程对 *** 作者而言是一个黑箱。拟合问题,实际上是一类最优化问题。既然说到最优化问题,自然要涉及最优化算法、初值、程序代码。初值的选取一直是困扰局部最优算法的问题,比如在调用MATLAB著名的lsqnonlin函数时,拟合结果对选用的初值具有很大的依赖性。以具有全局搜索能力算法的计算结果,作为初值供局部最优化算法调用,是一种解决初值选取问题的方法。
nc是加工中心用的程序,
gcode是3D打印机用的程序,
刀路软件都可以处理这些格式,推荐:
CIMCO Edit,刀路编辑,修改刀路和刀路仿真;
NC Viewer,刀路查看和验证,用于发现程序中的格式错误;
熊族,刀路查看,用于获取程序执行时间;
如果要生成这些文件,需要用专门的CAM软件:
NC程序:UG、cimatron、CAMworks/HSMWorks;
GCO程序:使用3D打印机配套的软件,比如Repetier-Host之类;
如果两种软件求得的目标函数值是一样的,只是变量值不一样,那就是你的规划有多组解。
如果目标函数不一样,那么估计是你至少有个软件的程序写错了。否则那就是这两个软件有个软件开发的有BUG(可能性很小)。
你可以自己验算一下,把两个软件最后求得的极值和变量值都带到约束函数中,看更“极”的那个,是不是真的符合所有约束条件。如果不符合,那基本肯定是你这个软件中的程序写错。
右键>1stOpt的exe程序文件,以管理员身份运行打上对勾,保存。
打开程序>工具>快捷工具栏设置>文件管理器前面打上对勾。
再在上面工具栏单击文件管理器快捷按钮。
以上就是关于如何用matlab拟合模型分段函数全部的内容,包括:如何用matlab拟合模型分段函数、遗传算法可以减少过拟合嘛、什么软件保存.nc和.gcode等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)