Не уверен, что это кому-то еще интересно, кроме меня, но (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено 0men 08 октября 2003 г. 12:57
В ответ на: Это очень круто, но похоже на разводку, надо выкладывать свой вариант тогда может обсудят отправлено patton 08 октября 2003 г. 12:44

вот мой простейший вариант методом Гаусса системы Ax=B. Недостаток - если элементы aii близки к 0 то из-за округлений при вычислениях может ухудшиться точность. У меня такого никогда не будет, поэтому был выбран он.


void SolveLinear
(
float * DataSnsSolve, // CO, NO, NO2, SO2
float * ResSnsSolve
)
{
signed char i;
unsigned char j;
float TempClbGas[ NUM_EQU ][ NUM_EQU ];
float TempB[ NUM_EQU ];
float Temp;


for( i=0; i {
for( j=0; j TempClbGas[ i ][ j ] = ClbData.ClbGas[ i ][ j ];
TempB[ i ] = DataSnsSolve[ i ];
}

for( i=0; i for( j=i+1; j {
TempClbGas[ j ][ i ] /= -TempClbGas[ i ][ i ];
for( unsigned char k=i+1; j TempClbGas[ j ][ k ] += TempClbGas[ j ][ i ]*TempClbGas[ i ][ k ];
TempB[ j ] += TempClbGas[ j ][ i ]*TempB[ i ];
}

ResSnsSolve[ NUM_EQU-1 ] = TempB[ NUM_EQU-1 ]/TempClbGas[ NUM_EQU-1 ][ NUM_EQU-1 ];
for( i=NUM_EQU-2; i>=0; i-- )
{
Temp = TempB[ i ];
for( j=i+1; j Temp -= ResSnsSolve[ j ]*TempClbGas[ i ][ j ];
ResSnsSolve[ i ] = Temp/TempClbGas[ i ][ i ];
}
}



Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru