Ma trận lượng giác


13

Giới thiệu

Hai hàm lượng giác phổ biến nhất, sinecosine(hoặc sincoscho ngắn), có thể được mở rộng để có chức năng ma trận giá trị. Một cách để tính toán các chất tương tự có giá trị ma trận như sau:

Hãy xem xét hai danh tính lượng giác quan trọng sau:

danh tính trig

Sử dụng các danh tính này, chúng ta có thể rút ra các phương trình sau cho sincos:

chức năng trig

Các mũ ma trận tồn tại cho tất cả các ma trận vuông và được cho bởi:

ma trận hàm mũ

nơi A 0 là bản sắc ma trận Tôi với kích thước tương tự như một . Sử dụng hàm mũ theo ma trận, hai hàm lượng giác này (và do đó tất cả các hàm lượng giác khác) có thể được đánh giá là hàm của ma trận.

Các thách thức

Cho một ma trận vuông A , xuất các giá trị của sin(A)cos(A).

Quy tắc

  • Đầu vào và đầu ra có thể ở bất kỳ định dạng hợp lý, thuận tiện nào (mảng 2D, định dạng ma trận của ngôn ngữ của bạn, v.v.).
  • Bạn có thể viết một chương trình, hai chương trình độc lập, một chức năng hoặc hai chức năng. Nếu bạn chọn viết hai hàm, mã có thể được chia sẻ giữa chúng (chẳng hạn như hàm nhập và hàm trợ giúp).
  • Các giá trị của ma trận đầu vào sẽ luôn là số nguyên.
  • Giải pháp của bạn có thể có các vấn đề chính xác do kết quả của sự thiếu chính xác. Nếu ngôn ngữ của bạn có các giá trị chính xác vô hạn kỳ diệu, thì giải pháp của bạn sẽ hoạt động hoàn hảo (bỏ qua thực tế là nó sẽ yêu cầu vô hạn thời gian và / hoặc bộ nhớ). Tuy nhiên, vì các giá trị độ chính xác vô hạn kỳ diệu đó không tồn tại, nên độ chính xác gây ra bởi độ chính xác hạn chế có thể được chấp nhận. Quy tắc này được đưa ra để tránh các biến chứng do yêu cầu một lượng chính xác cụ thể trong đầu ra.
  • Không được phép xây dựng các hàm tính toán lượng giác cho các đối số ma trận (bao gồm các hàm trig hyperbol). Các nội dung ma trận khác (như phép nhân, lũy thừa, đường chéo, phân tách và hàm mũ ma trận) được cho phép.

Các trường hợp thử nghiệm

Định dạng: A -> sin(A), cos(A)

[[0]] -> [[0]], [[1]]
[[0, 2], [3, 5]] -> [[-0.761177343863758, 0.160587281888277], [0.240880922832416, -0.359709139143065]], [[0.600283445979886, 0.119962280223493], [0.179943420335240, 0.900189146538619]]
[[1, 0, 1], [0, 0, 0], [0, 1, 0]] -> [[0.841470984807897, -0.158529015192103, 0.841470984807897], [0, 0, 0], [0, 1, 0]], [[0.540302305868140, -0.459697694131860, -0.459697694131860], [0, 1, 0], [0, 0, 1]]
[[1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1]] -> [[0.841470984807897, 0, 0, 0, 0], [0, 0.841470984807897, 0, 0, 0], [0, 0, 0.841470984807897, 0, 0], [0, 0, 0, 0.841470984807897, 0], [0, 0, 0, 0, 0.841470984807897]], [[0.540302305868140, 0, 0, 0, 0], [0, 0.540302305868140, 0, 0, 0], [0, 0, 0.540302305868140, 0, 0], [0, 0, 0, 0.540302305868140, 0], [0, 0, 0, 0, 0.540302305868140]]
[[-3, 2, -6], [3, 0, 4], [4, -2, 7]] -> [[-0.374786510963954, 0.135652884035570, -1.35191037980742], [1.14843105375406, 0.773644542790111, 1.21625749577185], [1.21625749577185, -0.135652884035570, 2.19338136461532]], [[4.13614256031450, -1.91289828483056, 5.50873853927692], [-2.63939111203107, 1.49675144828342, -3.59584025444636], [-3.59584025444636, 1.91289828483056, -4.96843623340878]]

Đọc thêm

Câu hỏi tuyệt vời này tại Math.SE bao gồm một số dẫn xuất thay thế của các chất tương tự có giá trị ma trận của các hàm lượng giác.


Tôi đã nhận được sin([[1, 0, 1], [0, 0, 0], [0, 1, 0]]) = {{0.841, -0.158, 0.841}, {0, 0, 0}, {0, 1, 0}}với Mathematica, bạn có thể kiểm tra?
kennytm

1
@kennytm Đó là những gì trường hợp thử nghiệm cho thấy.
Mego

1
@Mego Rõ ràng tất cả các câu trả lời hiện có nên bị xóa sau đó.
frageum

3
@Mego Hoàn toàn không hợp lý khi nghĩ rằng tất cả các nội dung dựa trên dấu phẩy động sử dụng một thuật toán chính xác (hoặc một thuật toán chính xác nếu các phép toán dấu phẩy động được thay thế bằng các phép toán "số thực").
frageum

1
@feersum Tôi đã giải quyết điều đó trong lần chỉnh sửa mới nhất của mình:(ignoring the fact that it would require infinite time and/or memory)
Mego

Câu trả lời:


6

Julia, 33 19 byte

A->reim(expm(A*im))

Đây là một hàm chấp nhận một mảng nổi 2 chiều và trả về một tuple của các mảng như vậy tương ứng với cosine và sin tương ứng. Lưu ý rằng đây là mặt trái của thứ tự được đưa ra trong các trường hợp thử nghiệm, trong đó sin được liệt kê đầu tiên.

Đối với ma trận A có giá trị thực , chúng ta có

sin

cô sin

Nghĩa là sin và cos của A tương ứng với phần ảo và phần thực của ma trận lũy thừa e iA . Xem chức năng của ma trận (Higham, 2008).

Hãy thử trực tuyến! (bao gồm tất cả các trường hợp thử nghiệm)

Đã lưu 14 byte nhờ Dennis!


6

Toán học, 27 byte

{Im@#,Re@#}&@MatrixExp[I#]&

Dựa trên giải pháp của @ Rainer P.

Lấy ma trận vuông Alàm đối số và đưa ra một danh sách chứa {sin(A), cos(A)}.

Đầu vào được định dạng Nđể lấy giá trị số thay vì công thức chính xác dài và Columnđể hiển thị kết quả của sin(A)cos(A) dưới dạng ma trận riêng thay vì danh sách lồng nhau.

Thí dụ

Tính toán các giá trị riêng biệt cần 38 byte

{(#2-#)I,+##}/2&@@MatrixExp/@{I#,-I#}&

6

Thạch , 23 22 byte

³æ*÷!
®Ḥ‘©r0Ç€s2_@/µÐL

Hãy thử trực tuyến!

Lý lịch

Cách tiếp cận này trực tiếp tính toán chuỗi Taylor cho sincos , nghĩa là

công thức

Nó tăng số lượng các điều khoản ban đầu của cả hai chuỗi cho đến khi kết quả không còn thay đổi, do đó độ chính xác của nó chỉ bị giới hạn bởi độ chính xác của loại dấu phẩy động.

Làm thế nào nó hoạt động

®Ḥ‘©r0Ç€s2_@/µÐL  Main link, Argument: A (matrix)

             µÐL  Loop; apply the chain until the results are no longer unique.
                  Return the last unique result.
®                   Yield the value of the register (initially zero).
 Ḥ                  Unhalve/double it.
  ‘©                Increment and copy the result (n) to the register.
    r0              Range; yield [n, ..., 0].
      ǀ            Apply the helper link to each k in the range.
        s2          Split the results into chunks of length 2. Since n is always
                    odd, this yields [[Ç(n), Ç(n-1)], ..., [Ç(1), Ç(0)]].
          _@/       Reduce the columns of the result by swapped subtraction,
                    yielding [Ç(1) - Ç(3) + ... Ç(n), Ç(0) - Ç(2) + ... Ç(n - 1)].


³æ*÷!             Helper link. Argument: k (integer)

³                 Yield the first command-line argument (A).
 æ*               Elevate A to the k-th power.
    !             Yield the factorial of k.
   ÷              Divide the left result by the right one.

2

Matlab, 138 121 52 50 byte

Vì phép lũy thừa ma trận được cho phép, (điều mà trước tiên tôi không nhận thấy, tôi không cần phải xác định funciton của người trợ giúp nữa và toàn bộ vấn đề có thể được giải quyết một cách tầm thường:

A=input('')*i;a=expm(A);b=expm(-A);[(b-a)*i,a+b]/2

Đầu vào phải là một ma trận, vd [1,2;4,5] hoặc thay thế[[1,2];[3,4]]

Một điều bất ngờ (nhìn chung không quá bất ngờ) là ma trận cosin và sin vẫn thỏa mãn

I = sin(A)^2+cos(A)^2

Không A^0giống như eye(size(A))?
FryAmTheEggman

Oh, bạn nói đúng, cảm ơn bạn!
flawr

2
Tại sao không sử dụng expm?
Luis Mendo

2
Theo danh tính: Tôi nên hy vọng họ thỏa mãn danh tính đó, xem xét rằng dạng vô hướng đã được sử dụng để mở rộng các hàm thành ma trận!
Mego

1
Vâng, sau đó toàn bộ điều trở nên tầm thường.
flawr


2

C ++, 305 byte

#include<cmath>
#include<iostream>
#include<vector>
int x,i=0, j;void p(std::vector<double> v){int x=sqrt(v.size());for(i=0;i<x;i++){for(j=0;j<x;j++) std::cout << v[x] << " ";std::cout << "\n";}}int main(){std::vector<double> s, c;while(std::cin >> x){s.push_back(sin(x));c.push_back(cos(x));}p(s);p(c);}

Đầu vào là một danh sách các số là một hình vuông hoàn hảo trên stdin. Đầu ra là một mảng 2d được in khá đẹp trên thiết bị xuất chuẩn



0

Sage, 44 byte

lambda A:map(exp(I*A).apply_map,(imag,real))

Dùng thử trực tuyến .

Hàm ẩn danh này trả về một danh sách 2 ma trận tương ứng sin(A)cos(A). exp(I*A)tính toán hàm mũ của ma trận cho I*A( Avới tất cả các phần tử được nhân với đơn vị ảo) và matrix.apply_map(f)trả về một ma trận fđã được áp dụng cho tất cả các phần tử của nó. Bằng cách áp dụng imagreal(các hàm để có được phần ảo và phần thực của giá trị vô hướng) cho ma trận, chúng ta có được các giá trị sin(A)cos(A), nhờ vào danh tính nổi tiếng của Euler (được tham chiếu trong văn bản thách thức).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.