curvefitting - sum of exponential function

9 vues (au cours des 30 derniers jours)
Inho Kang
Inho Kang le 28 Mar 2018
I have data from experiment.
I want to find the best-fit curve for this and I expect that the result will be “∑A(k)*exp(-t/lamda(k))” A(k) and lamda(k) are coefficients
Since I don’t have “curvefitting tool”, <1>does it work for such function above?
If not, <2>how can I find the best coefficient with the least calculation time?

Réponses (1)

Arturo Gonzalez
Arturo Gonzalez le 8 Sep 2020
Per this answer, you can do it with the following matlab code
clear all;
clc;
% get data
dx = 0.001;
x = (dx:dx:1.5)';
y = -1 + 5*exp(0.5*x) + 4*exp(-3*x) + 2*exp(-2*x);
% calculate n integrals of y and n-1 powers of x
n = 3;
iy = zeros(length(x), n);
xp = zeros(length(x), n+1);
iy(:,1) = cumtrapz(x, y);
xp(:,1) = x;
for ii=2:1:n
iy(:, ii) = cumtrapz(x, iy(:, ii-1));
xp(:, ii) = xp(:, ii-1) .* x;
end
xp(:, n+1) = ones(size(x));
% get exponentials lambdas
Y = [iy, xp];
A = pinv(Y)*y;
Ahat = [A(1:n)'; [eye(n-1), zeros(n-1, 1)]];
lambdas = eig(Ahat);
lambdas
% get exponentials multipliers
X = [ones(size(x)), exp(lambdas'.*x)];
P = pinv(X)*y;
P
% show estimate
y_est = X*P;
figure();
plot(x, y); hold on;
plot(x, y_est, 'r--');

Catégories

En savoir plus sur 수학 dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!