
[英]'fitnlm' or 'lsqcurvefit' for non-linear least squares regression?
[英]Is there a way to provide a vector of unknown coefficients to MATLAB's fittype function for non-linear least squares?
我有一个相对复杂的非线性系统要在 MATLAB 中求解,它可以描述为未知系数和基函数的 function,我试图拟合一些初始轨迹数据以获取系数。
我目前有一个使用 MATLAB 的fittype function 的工作解决方案,但它受到限制,因为只能输入标量值作为系数,而我需要使用不同数量的未知系数Xi多次运行此拟合,以量化我更广泛算法的性能不同数量的基函数。 拟合示例如下:
s1_fit_1 = fittype( @(xi1, xi2, xi3, xi4, xi5, xi6, xi7, xi8, xi9, xi10, r1_1, v1_1, t) ...
( (( chebyshevT((mBasis-1), (time_to_z(t0, t1, t)))' ...
- (omega1(getT1(t), dt1)' .* h0) ...
- (omega2(getT1(t), dt1)' .* hf) ...
- (omega3(getT1(t), dt1)' .* h0_dot) ...
- (omega4(getT1(t), dt1)' .* hf_dot))' * [xi1; xi2; xi3; xi4; xi5; xi6; xi7; xi8; xi9; xi10]) ...
+ (omega1(getT1(t), dt1) * r0_1) ...
+ (omega2(getT1(t), dt1) * r1_1) ...
+ (omega3(getT1(t), dt1) * v0_1) ...
+ (omega4(getT1(t), dt1) * v1_1) ), ...
'independent', 't', 'dependent', 's1_r_1', ...
'coefficients', {'xi1', 'xi2', 'xi3', 'xi4', 'xi5', 'xi6', 'xi7', 'xi8', 'xi9', 'xi10', 'r1_1', 'v1_1'});
作为参考,函数omega[x]和time_to_z()不受此影响,可以忽略。
如您所见,我目前有 10 个Xi[x]系数; 我想在多个脚本运行中改变这个数字,最多大约 50 个。 它可以手动完成,但这将非常耗时。 对我来说,最简单的方法是将Xi定义为我动态更新大小的向量或单元格,但fittype似乎不支持这一点。
有没有办法让我实现这一点,或者我可以使用另一个非线性求解器来实现相同的结果?
非常感谢。
优化工具箱中的 function lsqcurvefit
更好地支持向量值系数:
https://www.mathworks.com/matlabcentral/answers/470283-using-a-vector-of-coefficients-in-fittype
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.