2013-03-14 25 views
18

Gần đây, tôi đang cố gắng tính toán bằng cách sử dụng một số phương trình có liên quan đến số ảo i trong đó. Tuy nhiên, không giống như e hoặc π, không có bất kỳ phương pháp hoặc hàm gốc nào sẽ trả lại i. A quick search trong Google không nhận được bất kỳ câu trả lời nào. Bất kỳ ý tưởng về cách để đạt được nó?Làm thế nào để tính toán với số ảo trong JavaScript?

function imaginary(){ 
    return { 
     rational: this, 
     imaginary: "2i" //magic code that does this 
    }; 
}; 
Number.prototype.imaginary = imaginary; 
+3

Hãy xem ở đây: http://janhartigan.com/articles/creating-a-javascript-complex- số lớp –

+0

^Kết quả đầu tiên dường như có thông tin tốt ... – elclanrs

+0

Loại tính toán nào? Chỉ cần + - * /, hoặc số mũ, v.v ...? – mbeckish

Trả lời

9

Giả sử bạn thực sự muốn số phức, và không chỉ là thành phần tưởng tượng:

tôi sẽ mô hình hóa một số phức tạp giống như bạn mô hình hóa một điểm 2D, tức là một cặp số.

Cũng giống như một điểm có thành phần x và y, do đó, một số phức có các thành phần thực và ảo. Cả hai thành phần chỉ có thể được mô hình hoá với các loại số thông thường (int, float, v.v.)

Tuy nhiên, bạn sẽ cần xác định chức năng mới cho tất cả các phép toán.

Cộng và trừ các số phức hoạt động theo cách tương tự như cộng và trừ các điểm - thêm các thành phần riêng biệt vào các điểm khác, không trộn chúng. Ví dụ:

(3 + 2i) + (5 + 4i) = (8 + 6i)

Phép nhân hoạt động giống như bạn đã học trong đại số khi nhân (a + b) * (c + d) = (ac + ad + bc + bd).

Ngoại trừ bây giờ bạn cũng phải nhớ rằng i * i = -1. Vì vậy:

(a + bi) * (c + di) = (ac + adi + bci + bdii) = (ac-bd) + (ad + bc) i

Đối với bộ phận và lũy thừa, xem http://en.wikipedia.org/wiki/Complex_number

4

Tôi không phải là chuyên gia toán học nhưng tôi đã cố gắng tìm kiếm bằng một cụm từ khác và tôi có kết quả khác.

Kiểm tra sau đây:

Tôi hy vọng điều này sẽ giúp.

+0

Trong khi các liên kết này có thể trả lời câu hỏi, thì tốt hơn nên bao gồm các phần cần thiết của câu trả lời ở đây và cung cấp các liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. –

16

Thư viện math.js hỗ trợ số phức, ma trận và hơn thế nữa. Thư viện tương thích với thư viện Math tích hợp của JavaScript, do đó khá dễ sử dụng.

http://mathjs.org

Bạn chỉ có thể làm những việc như:

math.i;       // i 
math.sqrt(-4)     // 2i 
var a = math.complex('2 + 3i'); // 2 + 3i 
var b = math.complex(4, 5);  // 4 + 5i 
math.add(a, b);     // 6 + 8i 
math.multiply(a, b);   // -7 + 22i 
math.eval('e^(pi*i) + 1');  // ~0 
// etc... 

Chỉnh sửa: lưu ý toán đó.js đi kèm với một phân tích cú pháp biểu hiện, mà làm cho nó thuận tiện hơn để làm việc với các giá trị phức tạp và các biểu thức toán học:

math.eval('(2 + 3i) * (4 + 5i)'); // -7 + 22i 
+0

mathjs không hỗ trợ chuyển đổi số phức đến hoặc từ tọa độ cực, không giống như các thư viện số phức trong hầu hết các ngôn ngữ khác. Có lẽ xem https://npmjs.org/package/Complex nếu bạn cần. – MkV

+3

mathjs hiện hỗ trợ tạo và chuyển đổi các số phức từ tọa độ cực, [xem tài liệu] (https://github.com/josdejong/mathjs/blob/master/docs/datatypes/complex_numbers.md). –

+0

Khi tôi thử 'math.eval ('e^(pi * i) + 1')' Tôi nhận được 1.2246467991473532e-16. Tuy nhiên, đây là nút REPL trên điện thoại sử dụng ứng dụng 'termux'. – trysis

Các vấn đề liên quan