SHOW:
|
|
- or go back to the newest paste.
| 1 | void Kadr:: APROKS( double * x, double * y, int n, int num) | |
| 2 | /* вычисление коэффициентов полинома | |
| 3 | x - массив значений токов | |
| 4 | - | y - массив вычесленных значений */ |
| 4 | + | y - массив вычесленных значений |
| 5 | n - количество замеров | |
| 6 | num - номер канала */ | |
| 7 | {
| |
| 8 | char YN; // Ответ на запрос | |
| 9 | double A,B; // Попроавочный коэффициент | |
| 10 | int i,j,k,m1,k1; // Счетчики | |
| 11 | int m=2; // (Количество коэффициентов) - 1 ? | |
| 12 | double r,s; // Накполение чего-то там | |
| 13 | double a[10][11]; | |
| 14 | double c[11]; // Тарировка | |
| 15 | double q[200]; | |
| 16 | ||
| 17 | // Задать массив и забить его нулями. Размерность - количество коэффициентов | |
| 18 | for(i=0;i<=10;i++) c[i]=0; | |
| 19 | n--; | |
| 20 | ||
| 21 | // Задать массив и забить его единицами. Размерность - количество коэффициентов | |
| 22 | for(i=0;i<=n;i++) q[i]=1; | |
| 23 | // Расчет | |
| 24 | for(i=0;i<=m;i++) | |
| 25 | {
| |
| 26 | s=0; r=0; | |
| 27 | for(j=0;j<=n;j++) | |
| 28 | {
| |
| 29 | // Сумма единиц o_0 | |
| 30 | s=s+q[j]; | |
| 31 | // 0+1*значение o_0 | |
| 32 | r=r+q[j]*y[j]; | |
| 33 | // Можно тупо взять массив из параметров | |
| 34 | q[j]=q[j]*x[j]; | |
| 35 | } | |
| 36 | // Номер? | |
| 37 | a[0][i]=s; | |
| 38 | // Запись значения | |
| 39 | a[i][m+1]=r; | |
| 40 | } | |
| 41 | // конец цикла | |
| 42 | ||
| 43 | ||
| 44 | for(i=1;i<=m;i++) | |
| 45 | {
| |
| 46 | s=0; | |
| 47 | for(j=0;j<=n;j++) | |
| 48 | {
| |
| 49 | if(j<m) a[i][j]=a[i-1][j+1]; | |
| 50 | s=s+q[j]; | |
| 51 | q[j]=q[j]*x[j]; | |
| 52 | } | |
| 53 | a[i][m]=s; | |
| 54 | } | |
| 55 | // конец цикла | |
| 56 | ||
| 57 | ||
| 58 | m1=m+1; | |
| 59 | for(k=0;k<=m;k++) | |
| 60 | {
| |
| 61 | k1=k+1; | |
| 62 | s=a[k][k]; | |
| 63 | for(j=k1;j<=m1;j++) a[k][j]=a[k][j]/s; | |
| 64 | // конец цикла | |
| 65 | ||
| 66 | for(i=k1;i<=m;i++) | |
| 67 | {
| |
| 68 | r=a[i][k]; | |
| 69 | for(j=k1;j<=m1;j++) a[i][j]=a[i][j]-a[k][j]*r; | |
| 70 | } | |
| 71 | // конец цикла | |
| 72 | } | |
| 73 | // конец цикла | |
| 74 | ||
| 75 | for(i=m;i>=0;i--) | |
| 76 | {
| |
| 77 | s=a[i][m1]; | |
| 78 | for(j=i+1;j<=m;j++) | |
| 79 | {
| |
| 80 | s=s-a[i][j]*c[j]; | |
| 81 | } | |
| 82 | c[i]=s; | |
| 83 | } | |
| 84 | ||
| 85 | // Запись результатов | |
| 86 | TORA[num*3]=c[0]; | |
| 87 | TORA[num*3+1]=c[1]; | |
| 88 | TORA[num*3+2]=c[2]; | |
| 89 | // Ввод поправочных коэффициентов | |
| 90 | cout<<"\n\n Надо вводить попpавочные коэффициент a*x ? ( Y/N ) : "; | |
| 91 | cin>>YN; | |
| 92 | if( YN == 'Y' || YN == 'y' ) | |
| 93 | {
| |
| 94 | cout<<"\n введите коэффициент пpи линейном члене : "; | |
| 95 | cin>>A; | |
| 96 | // Домножение | |
| 97 | TORA[num*3] *= A; | |
| 98 | TORA[num*3+1] *= A; | |
| 99 | TORA[num*3+2] *= A; | |
| 100 | } | |
| 101 | } |