double Lagrange(double x[],double y[],int size,double value)
{
double result=0;
double mult;
for(int i=0; i<size; i++)
{
mult=y;
for(int j=0; j<size; j++)
{
if (j!=i)
{
mult*=(value-x[j])/(x-x[j]);
}
}
result+=mult;
}
return result;
}
/*
x,y - массивы (таблицы) значений функции y(x)
size - размер массивов (таблиц значений)
value - значение в
котором необходимо узнать y(value)
*/
Зависимость м/у значениями...
Проблема: Значение температуры попадает между данными значениями в массиве, приложение должно выбрать коэфициент, в соответствии с тем положением темературы.
Иными словами можно ли задать математическую функцию, зная значение аргумента получать значение функции. Спасибо
{
static float temp[14]={-140,-120,-100,-80,-60,-40,-20,-10,0,10,20,30,40,50};
int i=0;
static double k=0;
static double inter;
static int stop=0;
do
{
if(tv>=temp)
{
k=(tv-temp)/(temp[i+1]-temp);
inter=(interpol-interpol[i+1])*k+interpol;
stop=1;
i++;
}
else
{
//вписать сообщение об ошибке, если не соответсвует температура диапазону температур.
};
}
while(stop=1);
return inter;
}
int _tmain(int argc, _TCHAR* argv[])
{ float tv=10;
double pr,vl,pl,te,tp,kv,kdif;
double interpol[14];
//Ввод табличных данных.
double pran[14]={0.78,0.763,0.759,0.749,0.74,0.73,0.721,0.717,0.713,0.706,0.705,0.705,0.706,0.728};
double vlagosod[14]={1.9E-13,8E-11,8E-9,2.5E-7,5.4E-6,8E-5,8E-4,1.63E-3,3.85E-3,7.4E-3,15E-3,27.8E-3,50E-3,88.4E-3};
double plotnost[14]={2.52,2.18,1.94,1.73,1.58,1.44,1.33,1.27,1.22,1.18,1.13,1.08,1.04,0.998};
double teploemkost[14]={1.01E+3,1.01E+3,1.01E+3,1.01E+3,1.005E+3,1.005E+3,1.005E+3,1.005E+3,1.005E+3,0.01E+3,1.013E+3,1.04E+3,1.06E+3,1.1E+3};
double teploprovodnost[14]={0.0114,0.0132,0.0149,0.0166,0.0186,0.0209,0.0228,0.0236,0.0244,0.0251,0.0257,0.0265,0.0270,0.0272};
double kinvyazkost[14]={3.5E-6,4.54E-6,5.8E-6,7.05E-6,8.7E-6,10.6E-6,12.5E-6,13.2E-6,14.2E-6,14.9E-6,15.9E-6,16.6E-6,17.2E-6,18E-6};
double ktdifuzii[14]={6E-6,7.8E-6,9.8E-6,12E-6,14E-6,16.5E-6,19.3E-6,20.8E-6,22.1E-6,23.8E-6,25.4E-6,27E-6,28.6E-6,30.2E-6};
//Запуск функции iterpol для интерполяционного расчета данных.
interpol[14]=pran[14];
pr=iterpol();
interpol[14]=vlagosod[14];
vl=iterpol();
Но теперь выдает ошибку
error C2660: 'iterpol' : function does not take 0 arguments
Подскажите что делать...
Цитата:
Originally posted by Unlock
double iterpol(float tv, double interpol[14])
{
static float temp[14]={-140,-120,-100,-80,-60,-40,-20,-10,0,10,20,30,40,50};
int i=0;
static double k=0;
static double inter;
static int stop=0;
do
{
if(tv>=temp)
{
k=(tv-temp)/(temp[i+1]-temp);
inter=(interpol-interpol[i+1])*k+interpol;
stop=1;
i++;
}
else
{
//вписать сообщение об ошибке, если не соответсвует температура диапазону температур.
};
}
while(stop=1);
return inter;
}
Но теперь выдает ошибку
error C2660: 'iterpol' : function does not take 0 arguments
Подскажите что делать...
double iterpol(float tv, double interpol[14])
{
static float temp[14]={-140,-120,-100,-80,-60,-40,-20,-10,0,10,20,30,40,50};
int i=0;
static double k=0;
static double inter;
static int stop=0;
do
{
if(tv>=temp)
{
k=(tv-temp)/(temp[i+1]-temp);
inter=(interpol-interpol[i+1])*k+interpol;
stop=1;
i++;
}
else
{
//вписать сообщение об ошибке, если не соответсвует температура диапазону температур.
};
}
while(stop=1);
return inter;
}
Но теперь выдает ошибку
error C2660: 'iterpol' : function does not take 0 arguments
Подскажите что делать...
Еще бы функция-то 2 аргумента имеет. Но совет не в этом. Надо применять интерполяцию конечно! Но, извини, что-то она у тебя "страшная". Можно классически применять метод Лагранжа (наиболее просто и элегантно):
Код:
Спасибо...