Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Зависимость м/у значениями...

8.2K
31 октября 2004 года
Unlock
6 / / 26.10.2004
Есть однострочный массив(температура), есть другой массив(Коэфициент), зависящий от темературы...
Проблема: Значение температуры попадает между данными значениями в массиве, приложение должно выбрать коэфициент, в соответствии с тем положением темературы.

Иными словами можно ли задать математическую функцию, зная значение аргумента получать значение функции. Спасибо
8.2K
31 октября 2004 года
Unlock
6 / / 26.10.2004
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;
}

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
Подскажите что делать...
6.3K
02 ноября 2004 года
mefisto
26 / / 13.04.2004
Цитата:
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
Подскажите что делать...



Еще бы функция-то 2 аргумента имеет. Но совет не в этом. Надо применять интерполяцию конечно! Но, извини, что-то она у тебя "страшная". Можно классически применять метод Лагранжа (наиболее просто и элегантно):

Код:
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)
*/
8.2K
03 ноября 2004 года
Unlock
6 / / 26.10.2004
Спасибо...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог