Использование графиков MATLAB для поиска констант линейного уравнения - PullRequest
0 голосов
/ 08 октября 2018

Нахождение m и c для уравнения y = mx + c, с помощью математики и графиков.y - это data_model_1, x - это время.Избегайте других функций MATLAB, таких как fitlm, поскольку они не соответствуют цели.

У меня проблемы с поиском констант m и c.Я пытаюсь найти как m, так и c, ограничивая их диапазоном (основываясь на умных догадках), и мне нужно вывести значения m и c на основе среднего диапазона ошибок.Точка, где средний диапазон ошибок наиболее близок к 0, должна быть моей m и c значениями.

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

1 Ответ

0 голосов
/ 20 октября 2018

Вы можете быстро получить m и c, используя fminsearch.В первом примере ниже функция ошибки представляет собой сумму квадратов ошибок (SSE).Во втором примере используется сумма абсолютных ошибок .Ключевым моментом здесь является обеспечение того, что функция ошибок является выпуклой.

Обратите внимание, что c = Beta(1) и m = Beta(2).

Воспроизводимый пример (код MATLAB):

% Generate some 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...