error Function definitions are not permitted in this context

2 visualizaciones (últimos 30 días)
This is my homework:
Use a least squares fit of this data to obtain values for A and Ea for the reaction k = Aexp(−Ea/RT)
So I wrote:
% --- Store data
r=8314; % gas constant, J/(K*kg-mol)
t=[773.5 786 797.5 810 810 820 834];
k=[1.63 2.95 4.19 8.13 8.19 14.9 22.2]*1e-3;
% --- Obtain fit, print parameters, and plot fit along with data
[a,ea]=fitArrhenius(k,t,r);
tf=linspace(750,840);
kf=a*exp(-ea./(r*tf));
plot(t,k,'o',tf,kf,'-');
xlabel('T (K)'); ylabel('Reaction rate'); legend('Data','Fit',2);
% =====================================================
function [a,ea] = fitArrhenius(k,t,r)
% fitArrhenius Least squares fit to parameters of arrhenius rate equation
if nargin<3, r=8314; end % default gas constant J/(K*kg-mol)
c=expfit(1./(r*t),k);
a=c(1);
ea=-c(2);
And at the end a received this:
>> function [a,ea] = fitArrhenius(k,t,r)
function [a,ea] = fitArrhenius(k,t,r)
|
Error: Function definitions are not permitted in this context.

Respuesta aceptada

Walter Roberson
Walter Roberson el 11 de Feb. de 2014
You cannot define functions at the command prompt. You need to store them in files. In this case you would need to store into fitArrhenius.m

Más respuestas (1)

Joseph
Joseph el 12 de Feb. de 2014
- According to the documentation "expfit" does a maximum likelihood fit assuming the error follows an exponential distribution.
- A true least squares method would involve using Newton's method to minimize the function: sum(I=1:7,(kf(t)-k)^2) with respect to a and Ea.
- The common way of doing this (what Excel does) is linearize the formula by taking the natural log of both sides and then doing a least squares fit to the transformed data, then exponentiating the constant and setting the slope parameter as the exponent. The code for this is shown below (Sorry for extra returns but the preview didn't wrap the text)
close all; clear all; clc;
% --- Store data
r=8314; % gas constant, J/(K*kg-mol)
t=[773.5 786 797.5 810 810 820 834];
k=[1.63 2.95 4.19 8.13 8.19 14.9 22.2]*1e-3;
% --- Obtain fit, print parameters, and plot fit along with data
% Arrhenius equation: k = Ae^(-Ea/(r*t);
% Take ln of both sides
% ln A + Ea*(-1/rt) = ln k
k2 = log(k)';
t2 = -1./(r*t)';
% Set up least squares matrix (see Least Squares on Wikipedia)
X = [ones(1,length(t2))',t2];
% Least squares solution;
param = (X'*X)^-1*X'*k2;
% exponentiate constant since we solved for log a
a = exp(param(1));
ea = param(2);
tf=linspace(750,840);
kf=a*exp(-ea./(r*tf));
plot(t,k,'o',tf,kf,'-');
xlabel('T (K)'); ylabel('Reaction rate');
legend('Data','Fit',2);

Categorías

Más información sobre Interpolation en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by