我正在尝试使用最小二乘法在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直到差异恰好是一个?感谢帮助。
答案 0 :(得分:1)
执行数值方法除非您确定要比较两个整数,否则我不建议使用 for (Component c : mainPanel.getComponents()) {
for (Component sc : ((JPanel) c).getComponents()) {
if (sc instanceof JTextField) {
//process
}
}
}
或==
等操作。只有小的价值偏差可能会导致代码永不停止。您可以应用一些容差阈值,以使代码在大致正确的情况下停止:
~=