так что я сейчас смотрю на эту веб-страницу — это вопрос химии / математики, который дает вам данные о соотношении скорости и температуры для расчета энергии активации вещества — данные на странице & в коде
http://faculty.weber.edu/ewalker/Chem2990/Chem3020/WebPages/1_11.htm
в нем приведены значения для T и k (скорость)
как говорится, вы можете построить график 1 / T против ln (k) для расчета Ea (энергии активации) & A (фактор перед экспортом)
но вместо этого создайте программу, которая повторяет вычисления chi ^ 2 для оценки самого низкого значения, которое будет связано с энергией активации
Arrhenious это: // k = A * exp (-Ea / (RT))
чи ^ 2 = ((наблюдается — ожидается) ^ 2) / ожидается
где наблюдаемые значения k приведены на веб-странице, а ожидаемые — оценки, сделанные при использовании оценки Ea, которая начинается с 100
#include <stdio.h>
#include <iostream>
#include <cmath>
#include <string>
#include <fstream>
#include <sstream>
#include <iomanip>using namespace std;
int main()
{
long double chi1;
long double chi2;
long double T[8] = { 400,430,460,490,510,540,610,7000, };
long double k[8] = { 0.011,0.035,0.105,0.343,0.789,2.17,20.0,145, };
long double kJ;
long double R = 8.31446;
long double ki[8];
long double OE[8];
long double dEa = 10000;
int i = 0;
int dp = 5;
// k = A * exp(-Ea/(RT))
long double Ea = 100000;
long double A = 1.100e+12;
// I’m keeping A constant at 1.1*10^12
// Then calculating Chi Squared from a starting Ea value of 100000// k = A * exp(-Ea/(RT))
do {
do {
chi1 = 0; chi2 = 0;
i = 0;
while (i < 8) {
ki[i] = A*exp(-E / (R*T[i]));
OE[i] = pow(k[i] - ki[i], 2);
chi1 = chi1 + (OE[i]);
i++;
}
i = 0;
while (i < 8)
{
ki[i] = A*exp(-(E + dE) / (R*T[i]));
OE[i] = pow(k[i] - ki[i], 2);
chi2 = chi2 + (OE[i]);
i++;
}if (chi1 > chi2) {
E = E + dE;
}
} while (chi2 < chi1);
do {
chi1 = 0; chi2 = 0;
i = 0;
while (i < 8)
{
ki[i] = A*exp(-E / (R*T[i]));
OE[i] = pow(k[i] - ki[i], 2);
chi1 = chi1 + (OE[i]);
i++;
}i = 0;
while (i < 8)
{
ki[i] = A*exp(-(E - dE) / (R*T[i]));
OE[i] = pow(k[i] - ki[i], 2);
chi2 = chi2 + (OE[i]);
i++;
}if (chi1 > chi2) {
E = E - dE;
}} while (chi2 < chi1);
dE = dE / 10;
} while (dE > pow(10, 2 - dp));kJ = E / 1000;
cout << dE << endl;
cout << “Ea = " << fixed << setprecision(dp) << kJ << "kJ" << endl;
cout << “Chi squared = " << chi1 << endl;return 0;}
в основном мое значение для Chi ^ 2 и Ea не совпадают с моими результатами Excel
Задача ещё не решена.
Других решений пока нет …