Vstupné parametre programu sú polia, ktorých prvky predstavujú body v xy rovine, ktoré chceme aproximovať mocninovou funkciou. Výstupne parametre sú požadované koeficienty rovnice (aproximácie).
Pre zaujímavosť aj trošku teórie:
Mocnimová aproximácia: y = bxa
Úprava rovnice y = bxa do logaritmického tvaru:
Sústava 2 rovníc o 2 neznámych. V rovniciach je použitá substitúcia B = lnb.
Riešením je:
kde B = lnb.

Zdrojový kód:
public bool powerApproximation(out string errorMessage, double[] xArray, double[] yArray, out double bValue, out double aValue)
{
errorMessage = "";
aValue = 0;
bValue = 0;
try
{
//kontrola dlzky jednotlivych poli, x, y hodnoty
if (xArray.Length != yArray.Length)
{
errorMessage = "Error: different lenght of arrays.";
return false;
}
int n = xArray.Length; //dlzka pola, pocet bodov pouzitych pri aproximacii
if (n == 0)
{
errorMessage = "Error: array is empty.";
return false;
}
// inicializacia premennych
double num1a = 0; double num2a = 0; double num3a = 0;
double den1a = 0; double den2a = 0;
double num1b = 0; double num2b = 0;
// vypocet jednotlivych prvkov (sum) v rovniciach
for (int i = 0; i < n; i++)
{
if (xArray[i] > 0 && yArray[i] > 0)
{
num1a += Math.Log(xArray[i], Math.E) * Math.Log(yArray[i], Math.E);
num2a += Math.Log(xArray[i], Math.E);
num3a += Math.Log(yArray[i], Math.E);
den1a += Math.Pow(Math.Log(xArray[i], Math.E), 2);
}
else
{
errorMessage = "Error: invalid input for function ln(value), value must be greater than zero.";
return false;
}
}
den2a = Math.Pow(num2a, 2);
num1b = num3a;
num2b = num2a;
// kontrola menovatelov, nemozu byt nulove - delenie nulou
if (n == 0 || (den1a - den2a) == 0)
{
errorMessage = "Error: divide by zero.";
return false;
}
// vypocet koeficientov
aValue = (n * num1a - num2a * num3a) / (n * den1a - den2a);
bValue = Math.Exp((num1b - aValue * num2b) / n);
}
catch (Exception ex)
{
errorMessage = ex.Message;
return false;
}
return true;
}







