curvefitting - sum of exponential function

2 Ansichten (letzte 30 Tage)
Inho Kang
Inho Kang am 28 Mär. 2018
Beantwortet: Arturo Gonzalez am 8 Sep. 2020
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?

Antworten (1)

Arturo Gonzalez
Arturo Gonzalez am 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--');

Kategorien

Mehr zu 수학 finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!