我有5个未知参数,但只有4个方程式,但每个参数都有一个间隔,所以我更喜欢使用fmincon
。例如,这些是4个等式:
2*x(3) + x(5) + 5*x(1) - 1 = 0;
7*x(4) + 3*x(3) + x(2) - 10 = 0;
x(3) + 2*x(5) + 5*x(1) - 3 = 0;
3*x(4) + 9*x(5) + x(2) - 10 = 0;
我的想法是这样的:
for x(1)=0.1:0.1:1
fmincon(@myfun, x0,[]...);
end
但我不知道如何在循环中更改x(1)
。感谢您提前提出任何建议。
答案 0 :(得分:0)
我不确定你是否遵循最清晰的策略。你有一个线性系统。因此,我认为最简单的解决方案是应用一种GMM(广义矩方法)来估计参数x(1)... X(5)[http://en.wikipedia.org/wiki/Generalized_method_of_moments]。
1)用g(i)定义你的方程式i。所以i = 1,...,4。
2)使向量v = [g(1),g(2),g(3),g(4)]'。
3)解决优化问题找到解决min v'v的x(1),...,x(5)。 [基本上你是最小化\ sum g(i)^ 2]
为了解决这个问题,您可以按照建议使用fmincon(但这里没有循环),或者您可以使用KKT http://en.wikipedia.org/wiki/Karush%E2%80%93Kuhn%E2%80%93Tucker_conditions进行分析解析(因为参数数量仅为5)。另一个计算成本较低的解决方案是按照min v'v对X(i)的可能值进行网格划分,但这可以永远持续下去。
我希望我帮助你
答案 1 :(得分:0)
我想我已经弄明白了这个问题。如何在MATLAB中使用匿名函数是一个问题。我只举一个简单的例子,但请注意,没有提供一些内容。
for p=1:10
i=i+1;
x(i,:) = fmincon(@(X) myfun(X,p), x0, [], [], [], [], ...
[], [], [], options);
end
在这种情况下,我可以在使用fmincon
时在我的函数中循环p的值。
感谢大家提供了许多有用的建议。