Tôi muốn sử dụng C ++ với các số phức. Do đó tôi đã bao gồm #include <complex>
. Bây giờ câu hỏi của tôi là: Làm cách nào để khai báo một biến? (Vì vậy định dạng được gọi là gì, hãy nói 1 + i
:?)
Cảm ơn trước :-)
Tôi muốn sử dụng C ++ với các số phức. Do đó tôi đã bao gồm #include <complex>
. Bây giờ câu hỏi của tôi là: Làm cách nào để khai báo một biến? (Vì vậy định dạng được gọi là gì, hãy nói 1 + i
:?)
Cảm ơn trước :-)
Hàm tạo củastd::complex
có hai tham số:
Ví dụ:
std::complex<float> my_complex(1,1); //1 + 1i
Ngoài ra, C ++ 11 giới thiệu các ký tự do người dùng xác định , cho phép chúng tôi triển khai (Hoặc được thực hiện bởi thư viện tiêu chuẩn, như trong đề xuất được chấp nhận C ++ 14 này ) một ký tự cho các số phức dễ sử dụng:
constexpr std::complex<float> operator"" i(float d)
{
return std::complex<float>{0.0L,static_cast<float>( d )};
}
Bạn có thể sử dụng điều này như sau:
auto my_complex = 1i; // 0 + 1i
Bạn xác định một biến bằng cách chỉ định một tham số mẫu và chỉ định tên cho biến, giống như với hầu hết các mẫu khác:
std::complex<double> x(1, 1);
Tham số đầu tiên của ctor là phần thực, phần thứ hai là phần ảo.
Bắt đầu với C ++ 14, một toán tử nghĩa đen do người dùng định nghĩa đã được thêm vào, vì vậy bạn có thể khởi tạo một biến phức tạp với ký hiệu tự nhiên hơn:
using namespace std::literals;
std::complex<double> c = 1.2 + 3.4i;
Trong trường hợp này, (rõ ràng là đủ) 1.2
phần thực và 3.4
phần ảo.
Thử cái này:
#include <complex>
#include <iostream>
using namespace std;
int main()
{
complex<double> a = {1,2};
complex<double> b(3,4);
cout << a + b << "\n";
}
Đây là một ví dụ về cách sử dụng. Nó biên dịch và chạy theo QT
#include <QCoreApplication>
#include<complex>
#include<iostream>
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
std::complex<double> x=3.0-3.0i;
std::complex<double> y=2.0+4.0i;
cout.precision(3);
cout<<"x="<<x<<" y="<<y<<'\n';
cout<<" OR x real="<<real(x)<<" x imagine="<<imag(x)<<"\n\n";
complex<double> sum = x + y;
cout<<"The sum: x + y = "<<sum<<'\n';
complex<double> difference = x - y;
cout<<"The difference: x - y = "<<difference<<'\n';
complex<double> product = x * y;
cout<<"The product: XY = "<<product<<'\n';
complex<double> quotient = x / y;
cout<<"The quotient: x / y = "<<quotient<<'\n';
complex<double> conjugate = conj(x);
cout<<"The conjugate of x = "<<conjugate<<'\n';
complex<double> reciprocal = 1.0/x;
cout<<"The reciprocal of x = "<<reciprocal<<'\n';
complex<double> exponential =exp(x);
cout<<"The exponential of x = "<<exponential<<'\n';
double magnitude=2.0,phase=45;
cout<<"magintude = "<<magnitude<<" phase = "<< phase<<" degrees\n";
complex<double> pol= std::polar(2.0,(M_PI/180.0)*phase);
cout<<"The polar: x , y = "<<pol<<'\n';
return a.exec();
}