简单的对数曲线拟合
Easy logaritmic curve fitting
我正在尝试对一些表现为对数函数的度量 (lux, ohm)
建模。
为了做到这一点,我尝试使用 MATLAB 对其进行建模,方法是使用自然对数投影实数值,然后使用 polyfit
获得线性表达式。然后,我想隔离变量 lux
.
我目前拥有的是:
% Original values from spreadsheet
lux = [1, 5, 10, 50, 100]';
ohm = [100, 35, 25, 8, 6]';
% Logaritmic fitting
x_ = log(lux);
y_ = log(ohm);
p = polyfit(x_,y_,1)
x1 = linspace(x_(1), x_(end), 1000);
y1 = polyval(p,x1);
plot(x_,y_,'ob');
hold on;
plot(x1,y1, 'r');
hold on;
% Get expression
% y = -0.6212x + 4.5944
% log(ohm) = -0.6212 * log(lux) + 4.5944
lfun = @(ohm, a, b) ((ohm/exp(b)).^(1/a));
a = p(1);
b = p(2);
t = linspace(1,100,100);
plot(log(t), log(lfun(t, a, b)), '--g');
hold off;
legend({'points','poly','eq'});
因为我得到了p = -0.6212 4.5944
,我假设方程是log(ohm) = -0.6212 * log(lux) + 4.5944
。隔离变量 lux
结果:
lux = (ohm / exp(4.5944) ).^(-1/0.6212)
但是,从绿线可以看出,是不行的!
我做错了什么?
除了绘图之外,您所做的一切都正确,在第一个图中,您将 x 轴定义为 log(lux)
,将 y 轴定义为 log(ohm)
,但要坚持在第二种情况下你需要翻转参数:
plot(log(lfun(t, a, b)), log(t), '--g')
t
指的是 'ohm',因此必须显示在 y 轴上以与第一个图重合。
我正在尝试对一些表现为对数函数的度量 (lux, ohm)
建模。
为了做到这一点,我尝试使用 MATLAB 对其进行建模,方法是使用自然对数投影实数值,然后使用 polyfit
获得线性表达式。然后,我想隔离变量 lux
.
我目前拥有的是:
% Original values from spreadsheet
lux = [1, 5, 10, 50, 100]';
ohm = [100, 35, 25, 8, 6]';
% Logaritmic fitting
x_ = log(lux);
y_ = log(ohm);
p = polyfit(x_,y_,1)
x1 = linspace(x_(1), x_(end), 1000);
y1 = polyval(p,x1);
plot(x_,y_,'ob');
hold on;
plot(x1,y1, 'r');
hold on;
% Get expression
% y = -0.6212x + 4.5944
% log(ohm) = -0.6212 * log(lux) + 4.5944
lfun = @(ohm, a, b) ((ohm/exp(b)).^(1/a));
a = p(1);
b = p(2);
t = linspace(1,100,100);
plot(log(t), log(lfun(t, a, b)), '--g');
hold off;
legend({'points','poly','eq'});
因为我得到了p = -0.6212 4.5944
,我假设方程是log(ohm) = -0.6212 * log(lux) + 4.5944
。隔离变量 lux
结果:
lux = (ohm / exp(4.5944) ).^(-1/0.6212)
但是,从绿线可以看出,是不行的!
我做错了什么?
除了绘图之外,您所做的一切都正确,在第一个图中,您将 x 轴定义为 log(lux)
,将 y 轴定义为 log(ohm)
,但要坚持在第二种情况下你需要翻转参数:
plot(log(lfun(t, a, b)), log(t), '--g')
t
指的是 'ohm',因此必须显示在 y 轴上以与第一个图重合。