Ваша проблема в том, что у вас есть три неизвестных (коэффициенты a, b и c) и только одно уравнение, которое я вижу: y = y1, когда x = 0; это дает с = у1, как вы сказали.
Без дополнительной информации все, что вы можете сделать, это сказать, как b связано с a. Вот и все. Нет одного решения, есть много решений.
Если вы говорите мне, что у вас есть две другие точки (x2, y2) и (x3, y3), то вы должны подставить их все в уравнение и решить. Начните с:
альтернативный текст http://www.equationsheet.com/latexrender/pictures/41a2186ee8f0fcad42693e5c6211e258.gif
Теперь подставим три точки (x1, y1), (x2, y2) и (x3, y3):
альтернативный текст http://www.equationsheet.com/latexrender/pictures/4929b2060c4fe90914da0ac237f68e38.gif
Это матричное уравнение, которое вам нужно инвертировать. Вы можете использовать правило Крамера или разложение LU. Другая возможность Wolfram Alpha :
http://www.wolframalpha.com/input/?i=inverse{{x1*x1,+x1,+1},+{x2*x2,+x2,+1},+{x3*x3,+x3,+1}}
Возьмите обратное, которое дает вам ссылка, и умножьте на него правый вектор, чтобы вычислить три коэффициента.
Кодировать довольно легко, если заметить, что
det = (x2 x1 ^ 2-x3 x1 ^ 2-x2 ^ 2 x1 + x3 ^ 2
x1-x2 x3 ^ 2 + x2 ^ 2 x3)
Разделите все записи в матрице на это значение. Числители довольно просты:
альтернативный текст http://www.equationsheet.com/latexrender/pictures/93fc1a5b2cfddcc8685045937396cee3.gif
Разделите это на определитель, и вы получите обратное.
Если у вас больше очков, чем три, вам нужно подгонять по методу наименьших квадратов. Проделайте тот же трюк, подставив все имеющиеся у вас точки (x1, y1) ... (xn, yn). У вас будет больше уравнений, чем неизвестных. Умножим обе стороны на транспонирование матрицы nx3 и решим. Вуаля - у вас будет набор коэффициентов, которые минимизируют квадраты ошибок между точками и значениями функций.