while循环直到满足函数值的某些条件

时间:2016-11-30 11:23:32

标签: matlab loops curve-fitting

我正在尝试使用最小二乘法在Matlab中拟合一些数据。

我找到了最合适的参数,我现在想确定它们的不确定性。

为了确定第一个参数的不确定性,比如a,我们已经看到当然应该对一个参数应用变化,直到函数(在该变化下评估)减去原始函数值之间的差值等于1。

也就是说,我的Matlab代码中有一个名为[bestparam]的向量,包含四个参数a,b,c和d。

我还在另一个名为chi-square的文件中定义了一个函数,我在最佳参数下进行了评估。

我现在想对参数a应用一个小变量,并继续这样做直到卡方(a +变化) - chi-square = 1.差异必须恰好为1。我为此实现了以下代码:

i = 0;
a_new = a + i;
%small variation on the parameter a
new_param = [a_new b c d];
%my new parameters at which I want the function chisquare to be evaluated
newchisquare = feval(@chisquare, [new_param], X, Y, dY);
%the function value 
while newchisquare - chisquarevalue ~= 1
    i = i + 0.0001;
    a_new = a_new + i;
    new_param = [a_new b c d];
    newchisquare = feval(@chisquare, [new_param], X, Y, dY);
end
disp(a_new);
disp(newchisquare);

但是当我执行这个循环时,它永远不会停止运行。当我将条件更改为< 1,即差异应该大于1时,它会在5秒后停止。但是,函数值之间的差异不再是一个。例如,我的原始函数值是63.5509,然后新的函数值是64.6145,这不是1更大。

那么有没有办法实现代码,并继续更新参数a直到差异恰好是一个?感谢帮助。

1 个答案:

答案 0 :(得分:1)

执行数值方法除非您确定要比较两个整数,否则我不建议使用 for (Component c : mainPanel.getComponents()) { for (Component sc : ((JPanel) c).getComponents()) { if (sc instanceof JTextField) { //process } } } ==等操作。只有小的价值偏差可能会导致代码永不停止。您可以应用一些容差阈值,以使代码在大致正确的情况下停止:

~=
相关问题