математика — C ++ рассчитать линию наилучшего соответствия, используя хи-квадрат Аррениус

так что я сейчас смотрю на эту веб-страницу — это вопрос химии / математики, который дает вам данные о соотношении скорости и температуры для расчета энергии активации вещества — данные на странице & в коде

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

  • есть идеи?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …