如果循环内的语句找到最小值C++
在我的最后一个for循环中,我想重复这些方程并调整Ea的值,直到我找到“平方差2”的最小值及其对应的Ea值。我不确定if语句将如何工作,因此它将在该点停止,而不是继续,在这种情况下,我找不到最小值如果循环内的语句找到最小值C++,c++,if-statement,for-loop,C++,If Statement,For Loop,在我的最后一个for循环中,我想重复这些方程并调整Ea的值,直到我找到“平方差2”的最小值及其对应的Ea值。我不确定if语句将如何工作,因此它将在该点停止,而不是继续,在这种情况下,我找不到最小值 int main() { int T[] = { 700,730,760,790,810,840,910,1000 }; double k[] = { 0.011,0.035,0.105,0.343,0.789,2.17,20,145 }; float Yhat[8] = {}; int n = 0;
int main()
{
int T[] = { 700,730,760,790,810,840,910,1000 };
double k[] = { 0.011,0.035,0.105,0.343,0.789,2.17,20,145 };
float Yhat[8] = {};
int n = 0;
float Ea = 150000; //kJ
float A = (1.1)*10E12;
float R = 8.3144598; //kj K mol-1
float bestchisquared = 0;
float BestEa = 0;
for (int i = 0; i < 8; i++)
{
cout << "Temp (K): " << T[i] << endl;
}
for (int i = 0; i < 8; i++)
{
cout << "Rate (L mol-1 s-1): " << k[i] << endl;
}
float differenceofsquares = 0.0;
for (int i = 0; i < 8; i++)
{
differenceofsquares += (k[i] - (A*exp(-Ea / (R*T[i]))))*(k[i] - (A*exp(-Ea / (R*T[i]))));
}
cout << "chi squared for 150kJ: " << differenceofsquares << endl;
float differenceofsquares2 = 0;
for (int i = 0; i < 8; i++)
{
differenceofsquares2 += (k[i] - (A*exp(-Ea / (R*T[i]))))*(k[i] - (A*exp(-Ea / (R*T[i]))));
if (differenceofsquares2 < differenceofsquares)
Ea = Ea + 10000;
}
else if bestchisquared = differenceofsquares;
}
cout <<"Pre-exponential coefficient = "<< A << endl;
cout << "Best chi squared = " << bestchisquared << endl;
cout << "Best Activation Energy = " << BestEa << endl;
system("Pause");
return 0;
}您正在使用differenceofsquares2+=作为for循环的第一行。因此,在复合+=变量时,方差平方2永远不会自行减小。为了找到最小值,您必须在整个For循环中循环,并注意最小的差异cfsquares,但我不能使用if语句找到最小值吗?可以,但您需要另一个变量。在温度变量中读取方程式的结果。如果该变量小于differenceofsquares2,那么将临时值复制到differenceofsquares2tanks,您能解释一下我在代码中的位置吗?在for循环中,声明float tempResult=[expression];如果tempResult