我有一个加载到matlab
的数据集。我需要对绘制的曲线进行指数拟合,而不使用曲线拟合工具cftool
。
我想通过执行代码/函数来手动执行此操作,该代码/函数将输出对应于等式的a
和b
的值:
y = a*exp(b*x)
然后使用这些值,我将进行错误优化并创建最适合我的数据。
请帮忙吗?
提前致谢。
答案 0 :(得分:1)
试试这个......
f = fit(x,y,'exp1');
答案 1 :(得分:0)
我认为这种分配的典型目标是通过记录双方的记录,可以使用多种拟合方法的各种方法。
ln(y) = ln(a) + ln( exp(x).^b )
ln(y) = ln(a) + b * ln( exp(x) )
当由于ln的行为接近零而涉及噪声等误差时,这种方法可能会遇到困难。
答案 2 :(得分:0)
在本练习中,我有一组呈现指数曲线的数据,我想以指数方式拟合它们并获得a和b的值。我使用了以下代码,它使用了我的数据。
"trail.m" file:
%defining the data used
load trialforfitting.txt;
xdata= trialforfitting(:,1);
ydata= trialforfitting(:,2);
%calling the "fitcurvedemo" function
[estimates, model] = fitcurvedemo(xdata,ydata)
disp(sse);
plot(xdata, ydata, 'o'); %Data curve
hold on
[sse, FittedCurve] = model(estimates);
plot(xdata, FittedCurve, 'r')%Fitted curve
xlabel('Voltage (V)')
ylabel('Current (A)')
title('Exponential Fitting to IV curves');
legend('data', ['Fitting'])
hold off
"fitcurvedemo.m" file:
function [estimates, model] = fitcurvedemo(xdata, ydata)
%Call fminsearch with a random starting point.
start_point = rand(1, 2);
model = @expfun;
estimates = fminsearch(model, start_point);
%"expfun" accepts curve parameters as inputs, and outputs
%the sum of squares error [sse] expfun is a function handle;
%a value that contains a matlab object methods and the constructor
%"FMINSEARCH" only needs sse
%estimate returns the value of A and lambda
%model computes the exponential function
function [sse, FittedCurve] = expfun(params)
A = params(1);
lambda = params(2);
%exponential function model to fit
FittedCurve = A .* exp(lambda * xdata);
ErrorVector = FittedCurve - ydata;
%output of the expfun function [sum of squares of error]
sse = sum(ErrorVector .^ 2);
end
end
我有一组新数据不能使用此代码,并为绘制的数据曲线提供适当的指数拟合。