1

所以我现在正在看这个网页 - 它是一个化学/数学问题,它为您提供速率与温度的数据以计算物质的活化能 - 数据在页面上和代码中

http://faculty.weber.edu/ewalker/Chem2990/Chem3020/WebPages/1_11.htm

其中给出了 T 和 k(rate) 的值

正如它所说,您可以绘制 1/T 与 ln(k) 来计算 Ea(活化能)和 A(预实验因子)

但不要这样做,而是制作一个迭代 chi^2 计算的程序来评估最低的计算 - 这将与激活能相关联

可怕的是:// k = A * exp(-Ea/(RT))

chi^2 = ((观察到 - 预期)^2)/预期

其中,observed 是网页上给出的 k 值,expected 是使用估计值 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 结果不匹配

  • 有任何想法吗?
4

0 回答 0