应该lsqcurvefit重塑初始化参数向量?
2视图(30天)
显示旧的评论
当我运行下面的简单测试R2018a lsqcurvefit的
函数测试
ctrue = [1, 2, 3];
xdata =兰德(3);
ydata = F (ctrue xdata);
磅=无穷(3,1);乌兰巴托= +正(3,1);
磅(1)= 1;乌兰巴托(1)= 1;
选择= optimoptions (@lsqcurvefit,“SpecifyObjectiveGradient”,真正的);
c = lsqcurvefit (@F (0, 0, 0), xdata, ydata,磅,乌兰巴托,选择);
该模型函数,
函数[,江淮]= F (c, xd)
断言(isequal(大小(c) (3,1)),…
(“c有望3 x1,但它是“,…
num2str(大小(c, 1)),“x”num2str(大小(c, 2))))
= xd * c;
江淮= xd;
引发我得到维护,
错误使用测试> F(第21行)
c预计3 x1,但它是1 x3
所以lsqcurvefit经过c 1 x3行向量,即使最初的c,我提供的是一个3 x1列向量(0,0,0)。这应该发生吗?不应该我能指望初始矢量的形状确定的形状参数数组传递给模型函数?
5个评论
艾伦·韦斯
2021年5月6日
两个文档部分是正确的,但我现在可以看到部分线性指数不是有用的。发生了什么是,在内部,解决使用线性指数计算值,但对非线性目标和约束函数的参数是重塑回
x0
使用时的形状。
我将更新文档。
通知你,线性指数线性约束矩阵的关键
一个
和
Aeq
,因为对于那些参数
x
参数是一个列向量的重塑不管的形状
x0
。
艾伦·韦斯
MATLAB数学工具箱文档
接受的答案
答案(1)
艾伦·韦斯
2018年10月11日
可能解决的行为是不一致的,因此,当矢量方向问题,我建议你要主动,迫使你喜欢的尺寸。例如,
函数[,江淮]= F (c, xd)
c = c (:);为列c %
c = c (:)。';%行c
c =重塑(c, - 3, - 1);%另一种可能性
艾伦·韦斯
MATLAB数学工具箱文档
7评论
越南盾
2021年5月6日
非常感谢!
感谢你给我Fexpand的函数。它是有用的。
% Wrarpper扩大决策变量
函数varargout = Fexpand (b,变长度输入宗量)
c =变长度输入宗量{1};
试一试%更新MATLAB修复bug
c (b) = c;
结束
varargout =细胞(1、nargout);
[varargout {}): = F (c,变长度输入宗量{2:结束});% < -调用原始模型
结束
虽然我理解有点困难,它成功地解决了我所遇到的问题。
但我有一个新问题。
下面这一行代码是什么意思?
@(变长度输入宗量)Fexpand(磅<乌兰巴托,变长度输入宗量{:})
如果
原始模型“F”返回一个函数处理,我可以用Fexpand的功能如何?
我很沮丧,我不知道如何解决这个问题。希望得到你的帮助,谢谢。
电子邮件:lidong@nim.ac.cn