Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int CInvariant::linearkombination(CMatrix& Q_plus, CMatrix& Q_minus, int MATRIX,
- int plus_pos, int minus_pos,
- CMatrix zweidim_loe)
- {
- switch(MATRIX)
- {
- case Q_PLUS :
- {
- // 1. neue Lösungen sollen in der Q-Matrix hinter den bisherigen Lösungen
- // eingefügt werden . Als Anfangswert wird die erste der neuen Spalten
- // eingetragen
- UINT sp_neu = Q_plus.AnzSpalten;
- // 2. für die neuen Lösungen werden nun Spalten an die Q-Matrix angefügt;
- // es kommen so viele Lösungen hinzu, wie Lösungsvektoren in der
- // Gewichtungsmatrix zweidim_loe stehen:
- Q_plus.Resize(Q_plus.AnzZeilen, Q_plus.AnzSpalten + zweidim_loe.AnzSpalten);
- // 3. Linearkombination durchführen
- for(UINT sp=0; sp<zweidim_loe.AnzSpalten; sp++)
- {
- for(UINT z=0; z<Q_plus.AnzZeilen; z++)
- {
- Q_plus[z][sp_neu] = zweidim_loe[0][sp] * Q_plus[z][plus_pos] +
- zweidim_loe[1][sp] * Q_minus[z][minus_pos];
- // Plausibilitätstest
- ASSERT (Q_plus[z][sp_neu] >= 0);
- };
- sp_neu++;
- };
- };
- break;
- case Q_MINUS:
- {
- UINT sp_neu = Q_minus.AnzSpalten;
- Q_minus.Resize(Q_minus.AnzZeilen,
- Q_minus.AnzSpalten + zweidim_loe.AnzSpalten);
- for(UINT sp=0; sp<zweidim_loe.AnzSpalten; sp++)
- {
- for(UINT z=0; z<Q_minus.AnzZeilen; z++)
- {
- Q_minus[z][sp_neu] = zweidim_loe[0][sp] * Q_plus[z][plus_pos] +
- zweidim_loe[1][sp] * Q_minus[z][minus_pos];
- // Plausibilitätstests
- if(z != Q_minus.AnzZeilen - 1)
- {
- ASSERT (Q_minus[z][sp_neu] >= 0);
- }
- else
- {
- ASSERT (Q_minus[z][sp_neu] <= 0);
- };
- };
- sp_neu++;
- };
- };
- break;
- };
- return 0;
- };
Add Comment
Please, Sign In to add comment