使用 MATLAB 图查找线性方程常数



在数学和绘图的帮助下,为方程y = mx + c找到mcydata_model_1x是时间。 避免使用其他 MATLAB 函数,例如fitlm,因为它违背了目的。

我无法找到常量mc。我试图通过将mc限制在一个范围内(基于智能猜测(来找到它们,我需要根据平均误差范围推断mc值。平均误差范围最接近 0 的点应该是我的mc值。

load(file)
figure
plot(time,data_model_1,'bo')
hold on
for a = 0.11:0.01:0.13
c = -13:0.1:-10
data_a = a * time + c ;
plot(time,data_a,'r');
end
figure
hold on
for a = 0.11:0.01:0.13
c = -13:0.1:-10
data_a = a * time + c ;
mean_range = mean(abs(data_a - data_model_1));
plot(a,mean_range,'b.')
end

快速而肮脏的方法

您可以使用fminsearch()快速获得mc。 在下面的第一个示例中,误差函数是误差平方和(SSE(。 第二个示例使用绝对误差的总和。 这里的关键是确保误差函数是凸的。

请注意,c = Beta(1)m = Beta(2)

可重现的示例(MATLAB 代码[1](:

% Generate some example data
N = 50;
X = 2 + 13*random(makedist('Beta',.7,.8),N,1);
Y = 5 + 1.5.*X + randn(N,1);
% Example 1
SSEh =@(Beta) sum((Y - (Beta(1) + (Beta(2).*X))).^2);
Beta0 = [0.5 0.5];   % Initial Guess
[Beta SSE] = fminsearch(SSEh,Beta0)
% Example 2
SAEh =@(Beta) sum(abs(Y-(Beta(1) + Beta(2).*X)));
[Beta SumAbsErr] = fminsearch(SAEh,Beta0)

这是一种快速而肮脏的方法,适用于许多应用程序。

@Wolfie的评论将引导您使用运算符或mldivide()求解线性方程组的解析方法。这是更正确的方法(尽管它会得到类似的答案(。需要注意的是,这种方法得到了SSE的答案。

[1] 使用 MATLAB R2018a 进行测试

相关内容

  • 没有找到相关文章

最新更新