Masalan #include #include int main() { std::complex< double > z( 1.0, 2.0 ); // z = 1 + 2i std::cout << z << std::endl; // Kompleks sonni vector ko’rinishida chiqarish: (1, 2) std::cout << std::conj( z ) << std::endl; // Kompleks bog’lanish: (1, -2) std::cout << z.real() << std::endl; // Kompleks sonning haqiqiy qismi: 1 std::cout << z.imag() << std::endl; // Kompleks sonning mavhum qismi : 2 return 0; } C++ da kompleks sonlar bilan matematik operatsiyalar - C++ da komleks sonlar bilan ishlagan kabi, boshqa sonli ma’lumot tiplari bilan ham ishlashingiz mumkin:
- #include
- #include using namespace std;
- int main() { complex< double > z1( 1.0, 2.0 );
- complex< double > z2( 2.0, 1.0 );
- cout << z1 + z2 << endl; // kompleks sonlarni qo’shish: (3, 3)
- cout << z1 - z2 << endl; // kompleks sonlarni ayirish: (-1, 1)
- cout << z1 * z2 << endl; // kompleks sonlarni ko’paytirish: (0, 5)
- cout << z1 / z2 << endl; // kompleks sonlarni bo’lish : (0.8, 0.6)
- cout << pow( z1, 2 ) << endl; // kompleks sonlarni darajaga oshirish: (-3, 4)
- return 0; }
C++da kompleks sonlarni ko’rsatkichli va triginometrik ko’rinishi - C++ standart kutuxonasida kompleks sonlarning turli shakllari bilan ishlash uchun funksiyalar mavjud:
- #include
- #include using namespace std;
- int main() {complex< double > z( 3.0, 4.0 );
- double rho = abs( z ); // kompleks sonlar moduli: 5
- double phi = arg( z ); // kompleks sonlar argumenti: 0.927295
- // kompleks sonlarning trigonometric ko’rinishi: 5*(cos(0.927295) + i*sin(0.927295))
- cout << rho << "*(cos(" << phi << ") + i*sin(" << phi << "))" << endl;
- // kompleks sonlarning ko’rsatkichli ko’rinishi: 5*exp(i*0.927295)
- cout << rho << "*exp(i*" << phi << ")" << endl; // Kompleks sonlarning moduli va argumentini natijaviy qiymatini olish: (3, 4)
- cout << polar( rho, phi ) << endl; return 0; }
Valarray Sinfi - Sinf shabloni Type tipidagi elementlarning ketma-ketligini boshqaruvchi ob’yektni tavsiflaydi. Ular matematik amallarni yuqori tezlikda bajarish uchun mo’ljallangan massivda saqlanadi va hisoblashlarni optimallashtiradi
Valarray Sinfi Sinf - bu tartiblangan qiymatlar to’plamining matematik ifodasi va noldan boshlab ketma-ket raqamlash elementlarga qo'llaniladi. Sinf huddi konteyner kabi tasvirlangan bo’lsada, vector kabi birinchi darajali ketma-ketlikdagi konteynerlar tomonidan qo'llab-quvvatlanadigan ba’zi bir hususiyatlarni qo'llab-quvvatlamaydi. Bu sinf shablon vektoridan ikki muhim jihatdan farq qiladi: - Bu mos keladigan valarray bir xil turdagi va uzunlikdagi ob'ektlarning elementlari o'rtasida juda ko'p arifmetik operatsiyalarni belgilaydi, masalan, ксарр = cos ( ярр) + sin ( Зарр).
- Valarray ob’yektni yaratish uchun оператора[ qayta yuklash orqali qiziqarli yo’llarni aniqlaydi.
Valarray Sinfi Type Klass ob’yekti: - Odatiy tarzda ishlaydigan ochiq konstruktor, destructor, konstruktor nusxasi va tayinlash operatorlaridan iborat bo’ladi.
- Agar kerak bo'lsa, u suzuvchi nuqta turlari uchun aniqlangan va odatdagi usulda ishlaydigan arifmetik operatorlar va matematik funktsiyalarni aniqlaydi.
Xususan, nusxa ko'chirish konstruktsiyasi bilan standart konstruktsiya o'rtasida hatto kichik farq ham bo'lmaydi. Type klassi ob'ektlari bilan hech qanday operatsiya istisnolarni keltirib chiqara olmaydi. Valarray Sinf konstruktori
valarray
|
Valarray ma'lum bir o'lchamda yoki belgilangan qiymatga ega bo'lgan elementlar bilan yoki boshqa valarrayning nusxasi yoki boshqa Valarrayning to’plam ostisi sifatida yaratadi.
|
value_type
|
Turi, valarrayda saqlangan element turini ifodalaydi.
| Funksiyalar Operatorlar Operatorlar Masalan - #include
- #include using namespace std;
- int __cdecl MyApplyFunc( int n ) { return n*2; }
- int main( int argc, char* argv[] ) {
- valarray vaR(10), vaApplied(10);
- int i; for ( i = 0; i < 10; i += 3 ) vaR[i] = i;
- for ( i = 1; i < 10; i += 3 ) vaR[i] = 0;
- for ( i = 2; i < 10; i += 3 ) vaR[i] = -i;
- cout << "The initial Right valarray is: (";
- for ( i=0; i < 10; ++i ) cout << " " << vaR[i]; cout << " )" << endl; vaApplied = vaR.apply( MyApplyFunc );
- cout << "The element-by-element result of " << "applying MyApplyFunc to vaR is the\nvalarray: ( ";
- for ( i = 0; i < 10; ++i )
- cout << " " << vaApplied[i]; cout << " )" << endl; }
Slice sinfi - std::slice bu BLAS muhitiga o'xshash std::valarray to'plamini belgilaydigan sinf selektoridir. Std :: slice turining ob'ekti uchta qiymatni o'z ichiga oladi: boshlang'ich indeks, qadamlar va to'plam ostidagi qiymatlarning umumiy soni. std::slice tipidagi ob’yektlardan indeks sifatida operator[] valarray dan foydalanish mumkin. (Объекты типа std::slice можно использовать в качестве индексов с operator[] valarray автора.)
Funksiya a’zolari
(конструктор)
|
Bo’lak, qism yaratish
(public funksiya a’zosi)
|
start
|
Boshlang’ich qismga murojaat
(public funksiya a’zosi)
|
size
|
Qism o’lchamiga ruxsat berish
(public funksiya a’zosi)
|
stride
|
Qism qadamiga ruxsat berish
(public funksiya a’zosi)
| Misol - #include
- #include
- class Matrix {
- std::valarray data;
- int dim;
- public: Matrix(int r, int c) : data(r*c), dim(c) {} int& operator()(int r, int c) {return data[r*dim + c];}
- int trace() const { return data[std::slice(0, dim, dim+1)].sum(); }
- };
- int main() {
- Matrix m(3,3); int n = 0;
- for(int r=0; r<3; ++r)
- for(int c=0; c<3; ++c)
- m(r, c) = ++n;
- std::cout << "Trace of the matrix (1,2,3) (4,5,6) (7,8,9) is " << m.trace() << '\n'; }
Gslice sinfi std :: gslice bu std::valarray indekslari ko'p bosqichli qadamlar va o'lchovlar to'plami bilan belgilanadigan sinf selektoridir. Std :: gslice tipidagi ob'ektlardan Operator [] valarray yordamida indekslar sifatida foydalanish mumkin, masalan, Valarray sifatida ko'rsatilgan ko'p o'lchovli qator ustunlarini tanlash. S ning boshlang'ich qiymatini hisobga olgan holda, i j muvaffaqiyatlari ro'yxati va Dj o'lchamlari ro'yxati, std:: gslice ushbu qiymatlardan qurilgan k indekslarini tanlaydi. j=s+Σj(ijdj). Masalan, dastlabki indeks 3, muvaffaqiyatlar {19,4,1} va {2,4,3} uzunlikdagi GSlice quyidagi ko'rsatkichlar to'plamini yaratadi: Gslice sinfi 3 + 0*19 + 0*4 + 0*1 = 3, 3 + 0*19 + 0*4 + 1*1 = 4, 3 + 0*19 + 0*4 + 2*1 = 5, 3 + 0*19 + 1*4 + 0*1 = 7, 3 + 0*19 + 1*4 + 1*1 = 8, ... 3 + 1*19 + 3*4 + 2*1 = 36 Std :: gslice ob'ektlarini qurish, bir yoki bir nechta indekslarni bir necha marotaba tanlash mumkin: agar yuqoridagi misolda {1,1,1} yutuqlari ishlatilsa, ko'rsatkichlar {3, 4, 5, 4, 5, 6, ...}. Bunday gslices lardan faqat std :: valarray :: operator [] ning doimiy versiyasi uchun argument sifatida foydalanish mumkin, aks holda xatti-harakatlar aniqlanmaydi. Funksiya a’zolari
(конструктор)
|
Gslice ni qurish
(public funksiya-a’zosi)
|
start
|
GSlice ning dastlabki holati
(public funksiya-a’zosi)
|
stride
|
GSlice ning qadam-baqadam massivga ruxsat berish
(public funksiya-a’zosi)
|
size
|
GSlice dan massiv o’lchamlariga ruxsat berish
(public funksiya-a’zosi)
| Misol - #include
- #include
- void test_print(std::valarray& v, int rows, int cols, int planes)
- { for(int r=0; r
- { for(int c=0; c
- { for(int z=0; z
- std::cout << v[r*cols*planes + c*planes + z] << ' '; std::cout << '\n';
- }
- std::cout << '\n';
- }
- }
- int main() { std::valarray v = { 111,112,113 , 121,122,123 , 131,132,133 , 141,142,143, 211,212,213 , 221,222,223 , 231,232,233 , 241,242,243};
- std::cout << "Initial 2x4x3 array:\n"; test_print(v, 2, 4, 3);
- v[std::gslice(0, {2, 4}, {4*3, 3})] = 1;
- v[std::gslice(1, {1, 4}, {4*3, 3})] -= v[std::gslice(2, {1, 4}, {4*3, 3})];
- std::cout << "After column operations: \n"; test_print(v, 2, 4, 3); }
E’tiboringiz uchun raxmat
Do'stlaringiz bilan baham: |