如何在MATLAB中针对特定关系将这些数据线性化?

如何在MATLAB中针对特定关系将这些数据线性化?,matlab,optimization,linear-regression,linearization,Matlab,Optimization,Linear Regression,Linearization,我有数据表明y和x没有线性趋势。数据如下所示,如果将y绘制为x的函数,则该绘图是非线性的 x= [45.5976, 45.6311, 45.6599, 45.679, 45.703, 45.7461, 45.7749] y = [0.17, 1.7, 5.1, 17, 51, 170, 510] plot(x,y,'o') 我的目标是找到b的最佳值,使log(y)行为与log((x-b)/b)呈线性关系。换句话说,plot(log((x-b)/b),log(y)应该会产生一个线性函数。因为我没

我有数据表明y和x没有线性趋势。数据如下所示,如果将y绘制为x的函数,则该绘图是非线性的

x= [45.5976, 45.6311, 45.6599, 45.679, 45.703, 45.7461, 45.7749]
y = [0.17, 1.7, 5.1, 17, 51, 170, 510]
plot(x,y,'o')

我的目标是找到
b
的最佳值,使
log(y)
行为与
log((x-b)/b)
呈线性关系。换句话说,
plot(log((x-b)/b),log(y)
应该会产生一个线性函数。

因为我没有足够的声誉来添加注释来澄清这个问题,所以我试图帮助回答。另外,通常在转换数据以拟合线性回归时,如果原始模型是:y=b0+b1x,那么记录预测值和响应会得到一个新的模型y*=b0+b1x*其中y*=ln(y)和x*=ln(x)。为什么您决定您的模型的形式应为:ln(y)=ln((x-b)/b

在任何情况下,要在Matlab中找到此类模型的最佳beta值,您需要执行以下操作:

x= [45.5976, 45.6311, 45.6599, 45.679, 45.703, 45.7461, 45.7749]';
y = [0.17, 1.7, 5.1, 17, 51, 170, 510]';
figure(1), plot(x,y,'o');

ln_y = log(y);
ln_x = log(x);
figure(2), plot(ln_x, ln_y, 'x');

ln_X = [ones(length(ln_x),1) ln_x];
B = ln_X\ln_y;

ln_y_fitted = ln_X*B;
figure(2), 
hold on
plot(ln_x, ln_y_fitted, '--', 'Color', 'r');
给定上述代码,如果要绘制log(y)=log((x-b)/b的各种结果,可以使用以下内容:

for b = 0.1:0.1:4
    ln_x = log((x-b)/b);
    figure, plot(ln_x, ln_y, 'x');
end

由于我没有足够的声誉来添加评论来澄清这个问题,我试图帮助回答。另外,通常在转换数据以拟合线性回归时,如果您的原始模型是:y=b0+b1x,那么记录预测值和响应会得到一个新模型y*=b0+b1x*,其中y*=ln(y)和x*=ln(x).你为什么决定你的模型应该是:ln(y)=ln((x-b)/b的形式

在任何情况下,要在Matlab中找到此类模型的最佳beta值,您需要执行以下操作:

x= [45.5976, 45.6311, 45.6599, 45.679, 45.703, 45.7461, 45.7749]';
y = [0.17, 1.7, 5.1, 17, 51, 170, 510]';
figure(1), plot(x,y,'o');

ln_y = log(y);
ln_x = log(x);
figure(2), plot(ln_x, ln_y, 'x');

ln_X = [ones(length(ln_x),1) ln_x];
B = ln_X\ln_y;

ln_y_fitted = ln_X*B;
figure(2), 
hold on
plot(ln_x, ln_y_fitted, '--', 'Color', 'r');
给定上述代码,如果要绘制log(y)=log((x-b)/b的各种结果,可以使用以下内容:

for b = 0.1:0.1:4
    ln_x = log((x-b)/b);
    figure, plot(ln_x, ln_y, 'x');
end

你如何定义
b
的最佳值?根据什么标准是最佳的?
绘图(x,log(y),'o')
不够线性吗?@SecretAgentMan的目标是找到一个合适的“b”值,使ln(y)与ln((x-b)/b)之间的关系更为合理一个线性关系。泰,我得到了那部分。在我发布我的答案之前,我很好奇你是否有一个量化的度量来“优化”。对于
b
,有无限多的选择会起作用。我认为一个合适的可行解是可能的。你的意思是
plot(log(y),log((x-b)/b)
或者
plot(log((x-b)/b),log(y))
?我用0.5到2的不同
b
值绘制了这两个函数,得到了看似相似的线性图。你试过了吗?请你的问题澄清我之前的评论好吗?你如何定义
b
的最佳值?根据什么标准最佳?是
绘图(x,log(y),'o'))
不够线性?@SecretAgentMan目标是找到一个合适的“b”值,使ln(y)与ln((x-b)/b)之间的关系成为线性关系。Ty,我得到了那部分。我很好奇你是否有一个量化的“优化”方法在我发布我的答案之前。
b
有无限多的选择将起作用。我认为一个合适的可行解决方案是可能的。你是指
plot(log(y),log((x-b)/b)
还是
plot(log((x-b)/b),log(y))
?我使用不同的
b
值(从0.5到2)绘制了这两个函数,得到了看似相似的线性图。你试过了吗?能否请你的问题澄清我之前的评论?@lincolnk,谢谢你的帮助。你的代码在ln_x和ln_y_之间创建了线性关系,但我的目标是找到v“b”的值,使绘图(log(y),log((x-b)/b)的绘图接近线性趋势。我同意这种方法。但是,请注意,要使这种特殊关系线性化,
plot(log(y),log((x-b)/b)
。我明白了。@Nini,我同意@SecretAgentMan。如果您想找到最佳的
b
,以便
log>(y) =log((x-b)/b)
是最线性的,您需要定义某种定量度量来最小化/最大化。根据,您的编辑显示
b的各种值的绘图显示了许多可行的解决方案。(+1)需要从OP中获得更多详细信息以提供改进的方法。@lincolnck是否可以对b进行约束?例如,将搜索引擎限制为最小值和最大值,如minplot(log(y),log((x-b)/b)
。我明白了。@Nini,我同意@SecretAgentMan。如果您想找到最佳的
b
,从而
log(y)/log((x-b)/b
是最线性的,您需要定义某种定量度量来最小化/最大化。根据,您的编辑显示
b
的各种值的绘图显示了许多可行的解决方案。(+1)需要OP提供进一步的详细信息以提供改进的方法。@lincolnck是否可能对b?进行约束?例如,将搜索引擎限制为最小值和最大值,例如min