Bài viết

11.2: Các toán tử bình thường


Các toán tử bình thường là những toán tử đi làm với các toán tử riêng của chúng. Như chúng ta sẽ thấy, điều này bao gồm nhiều ví dụ quan trọng về hoạt động.

Định nghĩa 11.2.1. Chúng tôi gọi (T in mathcal {L} (V) ) thông thường if (TT ^ * = T ^ * T ).

Cho một toán tử tùy ý (T in mathcal {L} (V) ), chúng ta có (TT ^ * neq T ^ * T ) nói chung. Tuy nhiên, cả (TT ^ * ) và (T ^ * T ) đều là tự liền kề và bất kỳ toán tử tự liền nào (T ) đều bình thường. Bây giờ chúng tôi đưa ra một đặc điểm khác cho các nhà khai thác bình thường về định mức.

Đề xuất 11.2.2. Cho phép (V ) là một không gian sản phẩm phức tạp bên trong và giả sử rằng (T in mathcal {L} (V) ) thỏa mãn

begin {phương trình *}
inner {Tv} {v} = 0, quad text {cho tất cả (v in V ).}
end {phương trình *}
sau đó (T = 0 ).

Bằng chứng. Bạn sẽ có thể xác minh rằng
begin {phương trình *}
begin {split}
bên trong {Tu} {w} = frac {1} {4} & left { bên trong {T (u + w)} {u + w} - bên trong {T (uw)} {uw} đúng.
& left. + i inner {T (u + iw)} {u + iw} - i inner {T (u-iw)} {u-iw} right }.
end {split}
end {phương trình *}
Vì mỗi số hạng ở phía bên tay phải có dạng ( bên trong {Tv} {v} ), chúng tôi nhận được 0 cho mỗi (u, w in V ).
Do đó (T = 0 ).

Đề xuất 11.2.3. Cho phép (T in mathcal {L} (V) ). sau đó (NS) là bình thường nếu và chỉ khi

begin {phương trình *}
chuẩn {Tv} = chuẩn {T ^ * v}, quad text {cho tất cả (v in V ).}
end {phương trình *}

Bằng chứng. Lưu ý rằng

begin {phương trình *}
begin {split}
text { (T ) là bình thường} & Longleftrightarrow T ^ * T-TT ^ * = 0
& Longleftrightarrow inner {(T ^ * T-TT ^ *) v} {v} = 0, quad text {cho tất cả (v in V )}
& Longleftrightarrow internal {TT ^ * v} {v} = internal {T ^ * T v} {v}, quad text {cho tất cả (v in V )}
& Longleftrightarrow chuẩn {Tv} ^ 2 = chuẩn {T ^ * v} ^ 2, quad text {cho tất cả (v in V ).}
end {split}
end {phương trình *}

Hệ quả 11.2.4. Cho phép (T in mathcal {L} (V) ) là một nhà điều hành bình thường.

  1. ( kernel (T) = kernel (T ^ *) ).
  2. Nếu như ( lambda in mathbb {C} ) là một giá trị riêng của (NS), sau đó ( overline { lambda} ) là một giá trị riêng của (T ^ * ) với cùng một eigenvector.
  3. Nếu như ( lambda, mu in mathbb {C} ) là giá trị riêng biệt của (NS) với eigenvectors liên quan (v, w trong V ), tương ứng, sau đó ( bên trong {v} {w} = 0 ).
Bằng chứng. Lưu ý rằng Phần ~ 1 tuân theo Đề xuất 11.2.3 và tính xác định tích cực của quy chuẩn.

Để chứng minh Phần ~ 2, trước tiên hãy xác minh rằng nếu (T ) là bình thường, thì (T- lambda I ) cũng bình thường với ((T- lambda I) ^ * = T ^ * - overline { lambda} I ). Do đó, theo Mệnh đề 11.2.3, chúng ta có
begin {phương trình *}
0 = chuẩn {(T- lambda I) v} = chuẩn {(T- lambda I) ^ * v} = chuẩn {(T ^ * - overline { lambda} I) v},
end {phương trình *}
và do đó (v ) là một ký tự của (T ^ * ) với giá trị riêng ( overline { lambda} ).

Sử dụng Phần ~ 2, lưu ý rằng

begin {phương trình *}
( lambda- mu) bên trong {v} {w} = bên trong { lambda v} {w} - bên trong {v} { overline { mu} w}
= bên trong {Tv} {w} - bên trong {v} {T ^ * w} = 0.
end {phương trình *}

Vì ( lambda- mu neq 0 ) nó theo sau ( inner {v} {w} = 0 ), chứng tỏ Phần ~ 3.


11.2: Đại số toán tử

  • Đóng góp bởi Marcia Levitus
  • Phó giáo sư (Viện thiết kế sinh học) tại Đại học bang Arizonia

Hãy & rsquos bắt đầu bằng cách xác định toán tử nhận dạng, thường được ký hiệu là ( hat E ) hoặc ( hat I ). Toán tử nhận dạng giữ nguyên phần tử mà nó hoạt động trên đó: ( hat E f (x) = f (x) ). Điều này tương tự như nhân với số 1.

Chúng ta có thể thêm các toán tử như sau:

[( hat A + hat B) f = hat A f + hat B f. không có số]

[( hat x + dfrac) f = hat x f + dfrac= x f + dfrac không có số]

(hãy nhớ rằng ( hat x ) có nghĩa là & ldquomultiply bởi (x ) & rdquo).

Sản phẩm giữa hai nhà khai thác được định nghĩa là hoạt động liên tiếp của các nhà khai thác, với người vận hành bên phải hoạt động trước. Ví dụ: (( hat x dfrac) f = hat x ( dfrac) = x dfrac). Đầu tiên chúng ta áp dụng toán tử ở bên phải (trong trường hợp này là & ldquotake đạo hàm của hàm đối với (x ) & rdquo), sau đó là toán tử ở bên trái (& ldquomultiply by (x ) bất cứ thứ gì bạn có trong lần đầu tiên bước & rdquo). Chúng ta có thể sử dụng định nghĩa này để tính bình phương của một toán tử. Ví dụ: nếu chúng ta định nghĩa toán tử ( hat A ) là ( hat A = dfrac), toán tử ( hat A ^ 2 ) là ( hat A hat A = dfrac dfrac = dfrac).

Phép nhân toán tử nói chung không phải là giao hoán: ( hat A hat B neq hat B hat A ). Nói cách khác, nói chung, thứ tự của các hoạt động rất quan trọng. Trước đây, chúng ta đã thấy điều đó (( hat x dfrac) f = x dfrac). Hãy & rsquos hoàn nguyên thứ tự của hoạt động: (( dfrac hat x) f ). Bây giờ, trước tiên chúng ta nhân hàm với (x ) và sau đó lấy đạo hàm của kết quả: (( dfrac hat x) f = dfrac(xf) = x dfrac+ f ). Trong bước cuối cùng, chúng tôi tính đạo hàm của sản phẩm bằng cách sử dụng các quy tắc phân biệt mà chúng tôi đã quen thuộc.

Chúng tôi vừa chứng minh rằng ( hat x dfrac neq dfrac hat x ), hay nói cách khác, thứ tự mà chúng ta áp dụng hai toán tử này rất quan trọng (tức là trước tiên chúng ta lấy đạo hàm rồi nhân với (x ), hay đầu tiên nhân với (x ) rồi đến lấy đạo hàm). Cho dù thứ tự có quan trọng hay không cũng có những hệ quả rất quan trọng trong cơ học lượng tử, vì vậy sẽ rất hữu ích khi định nghĩa cái gọi là cổ góp, được định nghĩa là

[ hãn [ hat A, hat B] = hat A hat B - hat B hat A. ]

Ví dụ: dấu giao hoán của các toán tử ( hat x ) và ( dfrac), ký hiệu là ([ hat x, dfrac] ), là theo định nghĩa ( hat x dfrac - dfrac hat x ). Khi ([ hat A, hat B] = 0 ), các toán tử ( hat A ) và ( hat B ) được cho là đi làm. Do đó, nếu các toán tử ( hat A ) và ( hat B ) đi làm, thì ( hat A hat B = hat B hat A ). Khi các toán tử ( hat A ) và ( hat B ) không đi làm, ( hat A hat B neq hat B hat A ) và dấu phẩy ([ hat A ) , hat B] neq 0 ).

Trước khi chúng ta tiếp tục, điều quan trọng là phải nhận ra rằng tích của hai toán tử cũng là một toán tử. Ví dụ: hãy & rsquos xem xét sản phẩm ( dfrac hat x ). Đây là một toán tử, khi được áp dụng cho một hàm (f ), sẽ cho một hàm mới (x dfrac+ f ). Ví dụ: if (f = sin (kx) ), ( dfrac hat x f = kx cos (kx) + sin (kx) ). Ngoài ra, hãy lưu ý rằng toán tử ( dfrac hat x ) có thể được biểu thị bằng ( hat E + hat x dfrac), trong đó ( hat E ) là toán tử nhận dạng. Khi toán tử ( hat E + hat x dfrac) hoạt động trên một hàm (f ), kết quả là chính hàm (nhân với một) cộng với (x ) nhân với đạo hàm của hàm, đó chính xác là những gì chúng ta nhận được khi thực hiện ( dfrac hat x f ).

Tương tự, dấu giao hoán giữa hai toán tử cũng là một toán tử:

Lưu ý rằng trong ví dụ ở bên phải của hình, chúng tôi đã chứng minh rằng toán tử ([ hat x, dfrac] ) bằng toán tử (- hat E ) (& ldquomultiply bởi -1 & rdquo). Nói cách khác, khi dấu phẩy ([ hat x, dfrac] ) (một toán tử) hoạt động trên một hàm (f ), kết quả là (- f ). Bởi vì ([ hat x, dfrac] neq 0 ), các toán tử ( hat x ) và ( dfrac) không đi làm. Điều này liên quan trực tiếp đến nguyên lý bất định, nguyên lý này (ở dạng đơn giản nhất) nói rằng vị trí của một hạt nào đó càng được xác định chính xác, thì động lượng của nó càng được biết chính xác. Chúng ta sẽ thấy mối liên hệ giữa câu lệnh này và dấu cổ góp trong giây lát, và bạn sẽ thảo luận chi tiết về vấn đề này trong các khóa học hóa lý trong tương lai của bạn.

Hãy nhớ rằng dấu phẩy là một toán tử, vì vậy câu trả lời của bạn cũng phải là một toán tử (nghĩa là nó không nên chứa một hàm). Để & lsquosee & rsquo những gì dấu phẩy làm (để chúng ta có thể viết toán tử tương đương), chúng ta áp dụng một hàm tùy ý:

Hãy nhớ rằng khi chúng ta có các biểu thức như ( dfrac hat x ^ 2 f ) chúng ta cần đi từ phải sang trái, tức là trước tiên chúng ta nhân với (x ^ 2 ) và chỉ sau đó lấy đạo hàm thứ hai.

[[ hat x ^ 2, dfrac] = displaystyle < color-4 hat x dfrac-2 hat E> nonumber ]

Một lần nữa, kết quả của bạn phải là một toán tử và do đó không được chứa hàm (f ). Bởi vì ([ hat x ^ 2, dfrac] neq 0 ), hai toán tử không đi lại.


Đối với 1: $ | Tv | ^ 2 = langle Tv, Tv rangle = langle T ^ * Tv, v rangle = langle TT ^ * v, v rangle = | T ^ * v | ^ 2. $

Đối với 2, những gì bạn nói sẽ hiệu quả nếu $ T $ có khả năng đảo ngược, nhưng không ai nói là có. Và bạn sẽ không sử dụng giả thuyết chiều hữu hạn.

Nếu bạn nhìn vào sự phân hủy Schur của $ T $, bạn có $ T = VXV ^ * $, với $ V $ là một đơn nguyên và $ X $ hình tam giác trên. Đẳng thức $ TT ^ * = T ^ 2 $ ngụ ý $ XX ^ * = X ^ 2 $.

Các mục nhập chéo của $ XX ^ * $ không âm và chúng đồng ý với các mục nhập chéo của $ X ^ 2 $, là $ X_^ 2 $ (vì $ X $ là hình tam giác). Vì vậy, các số $ X_^ 2 $ không âm, ngụ ý rằng $ X_$ là thực cho tất cả $ k $. Các mục đường chéo của $ X ^ 2 $ là $ X_ <11> ^ 2, X_ <22> ^ 2, ldots, X_^ 2 $ và các mục nhập theo đường chéo của $ XX ^ * $ là $ X_ <11> ^ 2, | X_ <12> | ^ 2 + X_ <22> ^ 2, | X_ <13> | ^ 2 + | X_ < 23> | ^ 2 + X_ <33> ^ 2, ldots, | X_ <11> | ^ 2 + cdots + | X_ <1, n-1> | ^ 2 + X_^ 2. $ Vì vậy, đẳng thức $ XX ^ * = X ^ 2 $ ngụ ý rằng $ X_= 0 $ nếu $ j & gtk $. Nghĩa là, $ X $ là đường chéo với đường chéo thực, do đó, nó là đường chéo. Sau đó, $ T $ là selfadjoint.


Các hành động lặp đi lặp lại của các toán tử bình thường ☆

Cho phép MỘT là một toán tử bình thường trong không gian Hilbert H, và cho G ⊂ H là một tập các vectơ có thể đếm được. Chúng tôi điều tra các mối quan hệ giữa MỘT, G và L làm cho hệ thống lặp hoàn chỉnh, Bessel, một cơ sở hoặc một khung cho H. Vấn đề được thúc đẩy bởi vấn đề lấy mẫu động học và được kết nối với một số chủ đề trong phân tích chức năng, bao gồm lý thuyết khung và lý thuyết quang phổ. Nó cũng có quan hệ với các chủ đề trong phân tích sóng hài ứng dụng bao gồm, lý thuyết wavelet và phân tích tần số thời gian.


Nội dung

Archimedes đã tính toán thể tích của các bề mặt tứ giác nhất định của cuộc cách mạng. [2] Sự phát triển của phép tính toán vào thế kỷ thứ mười bảy đã cung cấp một cách tính toán có hệ thống hơn. [3] Độ cong của các bề mặt chung lần đầu tiên được nghiên cứu bởi Euler. Năm 1760 [4] ông đã chứng minh một công thức về độ cong của một phần phẳng của một bề mặt và vào năm 1771 [5] ông coi các bề mặt được biểu diễn dưới dạng tham số. Monge đặt nền móng cho lý thuyết của họ trong cuốn hồi ký cổ điển của mình L'application de l'analyse à la géometrie xuất hiện vào năm 1795. Đóng góp xác định cho lý thuyết bề mặt được Gauss đưa ra trong hai bài báo đáng chú ý được viết vào năm 1825 và 1827. [1] Điều này đánh dấu một sự khởi đầu mới so với truyền thống vì lần đầu tiên Gauss coi Nội tại hình học của bề mặt, các đặc tính chỉ được xác định bởi khoảng cách trắc địa giữa các điểm trên bề mặt độc lập với cách thức cụ thể của bề mặt đó trong không gian Euclid xung quanh. Kết quả đỉnh cao, Định lý Egregium của Gauss, đã xác định rằng độ cong Gauss là một bất biến nội tại, tức là bất biến dưới các phép đẳng phương cục bộ. Quan điểm này được Riemann mở rộng sang các không gian có chiều cao hơn và dẫn đến cái ngày nay được gọi là hình học Riemann. Thế kỷ 19 là thời kỳ hoàng kim của lý thuyết bề mặt, từ cả quan điểm tôpô và vi phân-hình học, với hầu hết các máy đo địa chất hàng đầu đều cống hiến hết mình cho nghiên cứu của họ. [ cần trích dẫn ] Darboux đã thu thập nhiều kết quả trong chuyên luận bốn tập của mình Théorie des bề mặt (1887–1896).

Trực giác khá quen thuộc khi nói rằng lá cây, bề mặt thủy tinh, hoặc hình dạng của một khuôn mặt, cong theo những cách nhất định, và tất cả những hình dạng này, ngay cả sau khi bỏ qua bất kỳ dấu hiệu phân biệt nào, đều có một số hình học nhất định. các tính năng phân biệt cái này với cái khác. Hình học vi phân của các bề mặt liên quan đến sự hiểu biết toán học về các hiện tượng như vậy. Nghiên cứu về lĩnh vực này, được bắt đầu ở dạng hiện đại vào những năm 1700, đã dẫn đến sự phát triển của hình học trừu tượng và chiều cao hơn, chẳng hạn như hình học Riemannian và thuyết tương đối rộng. [ nghiên cứu ban đầu? ]

Đối tượng toán học cơ bản là bề mặt thường xuyên. Mặc dù các quy ước khác nhau trong định nghĩa chính xác của chúng, nhưng chúng tạo thành một lớp tổng quát của các tập con của không gian Euclide ba chiều () 3) nắm bắt một phần của khái niệm quen thuộc về "bề mặt". Bằng cách phân tích loại đường cong nằm trên một bề mặt như vậy và mức độ mà các bề mặt buộc chúng phải cong theo ℝ 3, người ta có thể liên kết với mỗi điểm của bề mặt hai con số, được gọi là độ cong chính. Mức trung bình của họ được gọi là có nghĩa là độ cong bề mặt, và sản phẩm của chúng được gọi là Độ cong Gaussian.

Có nhiều ví dụ cổ điển về bề mặt thông thường, bao gồm:

  • các ví dụ quen thuộc như mặt phẳng, hình trụ và hình cầu, được xác định theo đặc tính rằng độ cong trung bình của chúng bằng 0 tại mọi điểm. Các ví dụ nổi tiếng nhất là catenoids và helicoid, mặc dù nhiều loại khác đã được phát hiện. Các bề mặt tối thiểu cũng có thể được xác định bằng các thuộc tính liên quan đến diện tích bề mặt, với kết quả là chúng cung cấp mô hình toán học cho hình dạng của màng xà phòng khi được kéo căng qua khung dây, là bề mặt có ít nhất một đường thẳng chạy qua mọi điểm. các ví dụ bao gồm hình trụ và hình hypebol của một trang tính.

Một kết quả đáng ngạc nhiên của Carl Friedrich Gauss, được gọi là định lý egregium, đã chỉ ra rằng độ cong Gauss của một bề mặt, theo định nghĩa của nó, liên quan đến cách các đường cong trên bề mặt thay đổi hướng trong không gian ba chiều, thực sự có thể được đo bằng độ dài của các đường cong nằm trên bề mặt cùng với các góc tạo ra khi hai đường cong trên bề mặt cắt nhau. Về mặt kinh tế, điều này nói rằng độ cong Gauss có thể được tính từ hình thức cơ bản đầu tiên (còn gọi là tensor hệ mét) của bề mặt. Các hình thức cơ bản thứ haingược lại, là một đối tượng mã hóa độ dài và góc của các đường cong trên bề mặt bị bóp méo như thế nào khi các đường cong bị đẩy ra khỏi bề mặt.

Mặc dù đo các khía cạnh khác nhau của chiều dài và góc, dạng cơ bản thứ nhất và thứ hai không độc lập với nhau và chúng thỏa mãn một số ràng buộc nhất định được gọi là Phương trình Gauss-Codazzi. Một định lý lớn, thường được gọi là định lý cơ bản của hình học vi phân của các bề mặt, khẳng định rằng bất cứ khi nào hai vật thể thỏa mãn các ràng buộc Gauss-Codazzi, chúng sẽ phát sinh như dạng cơ bản thứ nhất và thứ hai của một bề mặt thông thường.

Sử dụng dạng cơ bản đầu tiên, có thể xác định các đối tượng mới trên một bề mặt thông thường. Trắc địa là các đường cong trên bề mặt thỏa mãn một phương trình vi phân thông thường bậc hai nhất định được xác định bởi dạng cơ bản đầu tiên. Chúng liên quan trực tiếp đến việc nghiên cứu độ dài của các đường cong, một đường trắc địa có độ dài đủ ngắn sẽ luôn là đường cong của ngắn nhất chiều dài trên bề mặt kết nối hai điểm cuối của nó. Do đó, trắc địa là nền tảng cho bài toán tối ưu hóa việc xác định đường đi ngắn nhất giữa hai điểm đã cho trên một mặt phẳng chính quy.

Người ta cũng có thể xác định vận chuyển song song dọc theo bất kỳ đường cong nào cho trước, điều này đưa ra chỉ định về cách biến dạng một vectơ tiếp tuyến với bề mặt tại một điểm của đường cong thành vectơ tiếp tuyến tại tất cả các điểm khác của đường cong. Đơn thuốc được xác định bởi một phương trình vi phân thông thường bậc nhất được xác định bởi dạng cơ bản đầu tiên.

Các khái niệm trên về cơ bản đều liên quan đến phép tính đa biến. Các Định lý Gauss-Bonnet là một kết quả toàn cục hơn, liên hệ độ cong Gaussian của một bề mặt cùng với kiểu tôpô của nó. Nó khẳng định rằng giá trị trung bình của độ cong Gauss hoàn toàn được xác định bởi đặc tính Euler của bề mặt cùng với diện tích bề mặt của nó.

Ý niệm về Đa tạp RiemannianBề mặt Riemann là hai khái quát của các bề mặt thông thường đã thảo luận ở trên. Đặc biệt, về cơ bản tất cả lý thuyết về các bề mặt đều như được thảo luận ở đây đều có sự tổng quát hóa trong lý thuyết về đa tạp Riemann. Đây không phải là trường hợp của bề mặt Riemann, mặc dù mọi bề mặt thông thường đều cho một ví dụ về bề mặt Riemann.

Định nghĩa Chỉnh sửa

Trực quan rõ ràng rằng một hình cầu là nhẵn, trong khi hình nón hoặc hình chóp, do đỉnh hoặc cạnh của chúng, thì không. Khái niệm "bề mặt thông thường" là sự hình thức hóa khái niệm bề mặt nhẵn. Định nghĩa này sử dụng sự biểu diễn cục bộ của một bề mặt thông qua bản đồ giữa các không gian Euclide. Có một khái niệm tiêu chuẩn về độ mịn đối với các bản đồ như vậy, một bản đồ giữa hai tập con mở của không gian Euclide là nhẵn nếu các đạo hàm riêng của mọi bậc của nó tồn tại tại mọi điểm của miền. [6] [7] [8]

Sau đây đưa ra ba cách tương đương để trình bày định nghĩa, định nghĩa giữa có lẽ là trực quan nhất, vì về cơ bản nó nói rằng bề mặt chính quy là một tập hợp con của ℝ 3, cục bộ là đồ thị của một hàm trơn (cho dù trên một vùng trong yz máy bay, xz máy bay, hoặc xy chiếc máy bay).

  • f, như một hàm V → ℝ 3, có thể phân biệt vô hạn (tức là mượt mà)
  • với mỗi điểm của V, hai đạo hàm riêng ∂uNS và ∂vNS độc lập tuyến tính như các phần tử của ℝ 3. [9] [10] [11] [12]
  • NSU = <(NS(u, v), u, v) : (u, v) ∈ V >
  • NSU = <(u, NS(u, v), v) : (u, v) ∈ V >
  • NSU = <(u, v, NS(u, v)) : (u, v) ∈ V >.
  • NSU = <(NS, y, z) ∈ U : NS(NS, y, z) = 0 >
  • tại mỗi điểm của NSU , ít nhất một đạo hàm riêng của F là khác 0.

Các hình thái nhà xuất hiện trong định nghĩa đầu tiên được gọi là tham số địa phương hoặc hệ tọa độ địa phương hoặc biểu đồ địa phương trên S. [13] Sự tương đương của hai định nghĩa đầu tiên khẳng định rằng, xung quanh bất kỳ điểm nào trên bề mặt thông thường, luôn tồn tại các tham số cục bộ có dạng (u, v) ↦ (NS(u, v), u, v) , (u, v) ↦ (u, NS(u, v), v) , hoặc (u, v) ↦ (u, v, NS(u, v)) , được biết như Monge các bản vá lỗi . Các hàm F như trong định nghĩa thứ ba được gọi là chức năng xác định cục bộ. Sự tương đương của cả ba định nghĩa dựa trên định lý hàm ẩn. [14] [15] [16]

Đưa ra hai tham số cục bộ bất kỳ NS : VUNS ′ : V ′→ U ′ Của một bề mặt thông thường, thành phần NS −1 ∘ NS ′ Nhất thiết phải mịn như một ánh xạ giữa các tập con mở của ℝ 2. [17] Điều này cho thấy rằng bất kỳ bề mặt thông thường nào cũng có cấu trúc của một ống góp trơn, với một tập bản đồ trơn được đưa ra bởi sự nghịch đảo của các tham số cục bộ.

Trong lý thuyết cổ điển về hình học vi phân, các bề mặt thường chỉ được nghiên cứu trong trường hợp chính quy. [7] [18] Tuy nhiên, người ta cũng thường nghiên cứu các bề mặt không chính quy, trong đó hai đạo hàm riêng ∂uNS và ∂vNS của một tham số địa phương có thể không độc lập tuyến tính. Trong trường hợp này, S có thể có các điểm kỳ dị như các cạnh của biểu bì. Các bề mặt như vậy thường được nghiên cứu trong lý thuyết điểm kỳ dị. Các dạng suy yếu khác của bề mặt thông thường xảy ra trong thiết kế có sự hỗ trợ của máy tính, trong đó một bề mặt bị phá vỡ thành các mảnh rời rạc, với các dẫn xuất của các tham số cục bộ thậm chí không liên tục dọc theo ranh giới. [ cần trích dẫn ]


Giả sử một không gian Hilbert phức, và trở thành một toán tử bình thường. Nếu là phổ của, tồn tại một phép đo phổ duy nhất gây ra sự biến đổi đại số đơn kim

đâu là các số đo vô hướng được liên kết với.

Chúng tôi đặc biệt quan tâm đến trường hợp cụ thể của một không gian Hilbert thực và một toán tử thông thường, áp dụng thảo luận trước đó cho toán tử thông thường, với phép đo phổ. Vì không gian Hilbert thực không nhất thiết là bất biến dưới phép đo phổ, chúng ta sẽ cố gắng đặc trưng cho các tập con Borel sao cho như vậy.

Đối với một tập hợp con tùy ý, chúng tôi đặt. Để sử dụng sau này, chúng tôi chỉ định bằng cách đóng tập con tùy ý.


11.1. và, hoặc, không phải ¶

Có ba toán tử logic: và, hoặc, và không. Ngữ nghĩa (nghĩa) của các toán tử này tương tự như nghĩa của chúng trong tiếng Anh. Ví dụ: x & gt 0 và x & lt 10 chỉ đúng khi x lớn hơn 0 đồng thời, x nhỏ hơn 10. Bạn sẽ mô tả điều này bằng lời như thế nào? Bạn sẽ nói rằng x nằm trong khoảng từ 0 đến 10, không bao gồm các điểm cuối.

n% 2 == 0 hoặc n% 3 == 0 đúng nếu một trong hai trong số các điều kiện là đúng, nghĩa là, nếu số đó chia hết cho 2 hoặc chia hết cho 3. Trong trường hợp này, một hoặc phần kia, hoặc cả hai phần phải đúng thì kết quả mới đúng.

Cuối cùng, toán tử not phủ định một biểu thức boolean, do đó, không & # 160 x & gt y là đúng nếu x & gt y là sai, nghĩa là, nếu x nhỏ hơn hoặc bằng y.

Có một lỗi rất phổ biến xảy ra khi các lập trình viên cố gắng viết các biểu thức boolean. Ví dụ: điều gì sẽ xảy ra nếu chúng ta có một số biến và chúng ta muốn kiểm tra xem giá trị của nó có phải là 5,6 hay 7. Nói cách khác, chúng ta có thể nói: “số bằng 5 hoặc 6 hoặc 7”. Tuy nhiên, nếu chúng ta dịch điều này sang Python, số == 5 hoặc 6 hoặc 7, nó sẽ không chính xác. Toán tử hoặc phải kết hợp các kết quả của ba lần kiểm tra bằng nhau. Cách viết đúng là số == 5 hoặc số == 6 hoặc số == 7. Điều này có vẻ giống như đánh máy nhiều nhưng nó hoàn toàn cần thiết. Bạn không thể đi đường tắt.

11.1.1. Kiểm tra việc hiểu của bạn¶

logic-operator2: Biểu thức Python chính xác để kiểm tra xem một số được lưu trữ trong biến x có nằm trong khoảng từ 0 đến 5 hay không?


11.2: Các toán tử bình thường

Một cá thể dẫn xuất là một khai báo cá thể được tạo tự động cùng với một khai báo kiểu dữ liệu hoặc kiểu mới. Phần thân của một khai báo phiên bản dẫn xuất được dẫn xuất về mặt cú pháp từ định nghĩa của kiểu được liên kết. Các thể hiện có nguồn gốc chỉ có thể thực hiện được đối với các lớp được trình biên dịch biết đến: những lớp được định nghĩa trong Prelude hoặc thư viện chuẩn. Trong chương này, chúng tôi mô tả nguồn gốc của các lớp được xác định bởi Prelude.

Nếu T là một kiểu dữ liệu đại số được khai báo bởi:

  1. C là một trong các Eq, Ord, Enum, Bound, Show hoặc Read.
  2. Có một ngữ cảnh cx & prime như cx & prime & # x00A0 & rArr & # x00A0C & # x00A0t ij giữ cho mỗi loại cấu thành t ij .
  3. Nếu C bị ràng buộc, kiểu phải là kiểu liệt kê (tất cả các hàm tạo phải là nullary) hoặc chỉ có một hàm tạo.
  4. Nếu C là Enum thì kiểu phải là kiểu liệt kê.
  5. Không được khai báo phiên bản rõ ràng nào ở nơi khác trong chương trình tạo nên T & # x00A0u 1 & # x00A0 & hellip & # x00A0u k một ví dụ của C.
  6. Nếu khai báo dữ liệu không có hàm tạo (tức là khi n = 0), thì không có lớp nào có thể dẫn xuất được (tức là m = 0)

Đối với mục đích của các cá thể dẫn xuất, một khai báo kiểu mới được coi như một khai báo dữ liệu với một phương thức khởi tạo duy nhất.

Nếu có biểu mẫu dẫn xuất, một khai báo phiên bản được tạo tự động cho T & # x00A0u 1 & # x00A0 & hellip & # x00A0u k trên mỗi lớp C tôi . Nếu khai báo phiên bản dẫn xuất là không thể đối với bất kỳ C tôi thì kết quả là một lỗi tĩnh. Nếu không có trường hợp dẫn xuất nào được yêu cầu, biểu mẫu dẫn xuất có thể bị bỏ qua hoặc có thể sử dụng biểu mẫu dẫn xuất & # x00A0 ().

Mỗi khai báo phiên bản dẫn xuất sẽ có dạng: instance & # x00A0 (cx, & # x00A0 cx & prime) & # x00A0 = & # x003E & # x00A0C tôi & # x00A0 (T & # x00A0u 1 & # x00A0 & hellip & # x00A0u k ) & # x00A0 trong đó & # x00A0 <& # x00A0d & # x00A0> trong đó d được dẫn xuất tự động tùy thuộc vào C tôi và khai báo kiểu dữ liệu cho T (như sẽ được mô tả trong phần còn lại của phần này).

Ngữ cảnh cx & prime là ngữ cảnh nhỏ nhất thỏa mãn điểm (2) ở trên. Đối với các kiểu dữ liệu lặp lại lẫn nhau, trình biên dịch có thể cần thực hiện phép tính điểm cố định để tính toán nó.

Các chi tiết còn lại của các phiên bản dẫn xuất cho mỗi lớp Prelude dẫn xuất hiện đã được cung cấp. Các biến và hàm tạo tự do được sử dụng trong các bản dịch này luôn tham chiếu đến các thực thể được xác định bởi Prelude.

11.1 Các trường hợp bắt nguồn của Eq và Ord

Các phương thức lớp được giới thiệu tự động bởi các phiên bản dẫn xuất của Eq và Ord là (==), (/ =), so sánh, (& # x003C), (& # x003C =), (& # x003E), (& # x003E =) , tối đa và tối thiểu. Bảy toán tử sau được định nghĩa để so sánh các đối số của chúng về mặt từ vựng đối với tập phương thức khởi tạo đã cho, với các hàm tạo trước đó trong khai báo kiểu dữ liệu được tính là nhỏ hơn so với các toán tử muộn hơn. Ví dụ: đối với kiểu dữ liệu Bool, chúng ta có kiểu đó (True & # x00A0 & # x003E & # x00A0False) & # x00A0 == & # x00A0True.

Các phép so sánh có nguồn gốc luôn đi ngang các hàm tạo từ trái sang phải. Những ví dụ minh họa thuộc tính này:

Tất cả các phép toán dẫn xuất của lớp Eq và Ord đều nghiêm ngặt trong cả hai đối số. Ví dụ: False & # x00A0 & # x003C = & # x00A0 & perp là & perp, mặc dù Sai là hàm tạo đầu tiên của kiểu Bool.

11.2 Các trường hợp bắt nguồn của Enum

Các khai báo cá thể có nguồn gốc cho lớp Enum chỉ có thể thực hiện được cho các kiểu liệt kê (kiểu dữ liệu chỉ có các hàm tạo nullary).

Các hàm tạo nullary được giả định được đánh số từ trái sang phải với các chỉ số từ 0 đến n & trừ 1. Các toán tử succ và trước cung cấp cho giá trị kế nhiệm và tiền nhiệm tương ứng, theo sơ đồ đánh số này. Đó là một lỗi khi áp dụng succ cho phần tử tối đa hoặc trước phần tử tối thiểu.

Toán tử toEnum và fromEnum ánh xạ các giá trị được liệt kê đến và từ kiểu Int toEnum gây ra lỗi thời gian chạy nếu đối số Int không phải là chỉ mục của một trong các hàm tạo.

Định nghĩa của các phương pháp còn lại là

trong đó firstCon và lastCon tương ứng là các hàm tạo đầu tiên và cuối cùng được liệt kê trong khai báo dữ liệu. Ví dụ, với kiểu dữ liệu:

11.3 Các trường hợp bắt nguồn của Bound

Lớp Bound giới thiệu các phương thức lớp minBound và maxBound, các phương thức này xác định các phần tử tối thiểu và tối đa của kiểu. Đối với một kiểu liệt kê, các hàm tạo đầu tiên và cuối cùng được liệt kê trong khai báo dữ liệu là các giới hạn. Đối với một kiểu có một hàm tạo duy nhất, hàm tạo được áp dụng cho các giới hạn cho các kiểu cấu thành. Ví dụ: kiểu dữ liệu sau:

sẽ tạo ra phiên bản Bound sau:

11.4 Các trường hợp bắt nguồn của Đọc và Hiển thị

Các phương thức lớp được giới thiệu tự động bởi các phiên bản dẫn xuất của Read và Show là showsPrec, readPrec, showList và readList. Chúng được sử dụng để ép các giá trị thành chuỗi và phân tích cú pháp chuỗi thành giá trị.

Hàm showsPrec & # x00A0d & # x00A0x & # x00A0r chấp nhận mức ưu tiên d (một số từ 0 đến 11), một giá trị x và một chuỗi r. Nó trả về một chuỗi đại diện cho x được nối với r. showsPrec thỏa mãn luật: showsPrec & # x00A0d & # x00A0x & # x00A0r & # x00A0 ++ & # x00A0s & # x00A0 & # x00A0 == & # x00A0 & # x00A0showsPrec & # x00A0d & # x00A0x & # & # x00A0 (r & # x00A0) # x00A0s) Biểu diễn sẽ được đặt trong dấu ngoặc đơn nếu mức độ ưu tiên của hàm tạo cấp cao nhất trong x nhỏ hơn d. Do đó, nếu d là 0 thì kết quả không bao giờ được đặt trong dấu ngoặc đơn nếu d là 11 thì nó luôn được đặt trong dấu ngoặc đơn, trừ khi nó là một biểu thức nguyên tử (nhớ lại rằng ứng dụng hàm có ưu tiên 10). Tham số phụ r là cần thiết nếu các cấu trúc dạng cây được in theo thời gian tuyến tính thay vì thời gian bậc hai theo kích thước của cây.

Hàm readPrec & # x00A0d & # x00A0s chấp nhận mức ưu tiên d (một số từ 0 đến 10) và một chuỗi s và cố gắng phân tích cú pháp một giá trị từ phía trước của chuỗi, trả về danh sách (giá trị được phân tích cú pháp, chuỗi còn lại ) cặp. Nếu không có phân tích cú pháp thành công, danh sách trả về trống. Việc phân tích cú pháp của một ứng dụng toán tử infix không có dấu ngoặc đơn chỉ thành công nếu mức độ ưu tiên của toán tử lớn hơn hoặc bằng d.

Nó sẽ là trường hợp

Nghĩa là, readPrec sẽ có thể phân tích cú pháp chuỗi được tạo bởi showsPrec và phải cung cấp giá trị mà showsPrec bắt đầu bằng.

showList và readList cho phép danh sách các đối tượng được biểu diễn bằng cách sử dụng các ký hiệu không chuẩn. Điều này đặc biệt hữu ích cho các chuỗi (danh sách Char).

readPrec sẽ phân tích cú pháp bất kỳ đại diện hợp lệ nào của các loại tiêu chuẩn ngoài các chuỗi, mà chỉ các chuỗi được trích dẫn mới được chấp nhận và các danh sách khác, chỉ có dạng được đặt trong ngoặc vuông [& hellip] được chấp nhận. Xem Chương & # x00A09 để biết đầy đủ chi tiết.

Kết quả của hiển thị là một biểu thức Haskell chính xác về mặt cú pháp chỉ chứa các hằng số, với các khai báo cố định có hiệu lực tại điểm mà kiểu được khai báo. Nó chỉ chứa các tên phương thức khởi tạo được xác định trong kiểu dữ liệu, dấu ngoặc đơn và khoảng trắng. Khi các trường hàm tạo có nhãn được sử dụng, dấu ngoặc nhọn, dấu phẩy, tên trường và dấu bằng cũng được sử dụng. Dấu ngoặc đơn chỉ được thêm vào khi cần thiết, bỏ qua tính liên kết. Không có ngắt dòng nào được thêm vào. Kết quả của chương trình có thể đọc được bằng cách đọc nếu tất cả các loại thành phần đều có thể đọc được. (Điều này đúng với tất cả các trường hợp được xác định trong Prelude nhưng có thể không đúng với các trường hợp do người dùng xác định.)

  • Nếu phương thức khởi tạo được định nghĩa là một toán tử infix, thì thể hiện Read dẫn xuất sẽ chỉ phân tích cú pháp các ứng dụng infix của phương thức khởi tạo (không phải dạng tiền tố).
  • Tính liên kết không được sử dụng để giảm sự xuất hiện của dấu ngoặc đơn, mặc dù có thể được ưu tiên. Ví dụ, đã cho

  • show & # x00A0 (1 & # x00A0: $ & # x00A02 & # x00A0: $ & # x00A0NT) tạo ra chuỗi "1 & # x00A0: $ & # x00A0 (2 & # x00A0: $ & # x00A0NT)".
  • đọc & # x00A0 "1 & # x00A0: $ & # x00A0 (2 & # x00A0: $ & # x00A0NT)" thành công, với kết quả hiển nhiên.
  • đọc & # x00A0 "1 & # x00A0: $ & # x00A02 & # x00A0: $ & # x00A0NT" không thành công.
  • Các cấu trúc tròn không thể được in hoặc đọc bởi những trường hợp này.
  • Máy in mất cấu trúc con được chia sẻ, biểu diễn in của một đối tượng có thể lớn hơn nhiều so với mức cần thiết.
  • Các kỹ thuật phân tích cú pháp được sử dụng bởi trình đọc rất kém hiệu quả khi đọc một cấu trúc lớn có thể khá chậm.
  • Không có quyền kiểm soát của người dùng đối với việc in các loại được xác định trong Prelude. Ví dụ, không có cách nào để thay đổi định dạng của số dấu phẩy động.

11.5 Một ví dụ

Như một ví dụ hoàn chỉnh, hãy xem xét một kiểu dữ liệu cây:

Không thể dẫn xuất tự động các khai báo cá thể cho Bound và Enum, vì Cây không phải là kiểu liệt kê hoặc kiểu dữ liệu phương thức khởi tạo đơn. Các khai báo cá thể hoàn chỉnh cho Tree được hiển thị trong Hình & # x00A011.1, Lưu ý việc sử dụng ngầm định các định nghĩa phương thức lớp mặc định & # 8212, ví dụ: chỉ & # x003C = được định nghĩa cho Ord, với các phương thức lớp khác (& # x003C, & # x003E, & # x003E =, max và min) được xác định bằng các giá trị mặc định được đưa ra trong khai báo lớp được hiển thị trong Hình & # x00A06.1.


Trong Python 3.x, 5/2 sẽ trả về 2,5 và 5 // 2 sẽ trả về 2. Cái trước là phép chia dấu phẩy động, và cái sau là phân chia tầng, đôi khi còn được gọi là phép chia số nguyên.

Trong Python 2.2 trở lên trong dòng 2.x, không có sự khác biệt nào đối với các số nguyên trừ khi bạn thực hiện phép phân chia nhập từ __future__, điều này khiến Python 2.x áp dụng hành vi 3.x.

Bất kể lần nhập nào trong tương lai, 5.0 // 2 sẽ trả về 2.0 vì đó là kết quả phân chia tầng của hoạt động.

Làm rõ Python 2.x:

Để làm rõ cho dòng Python 2.x, / không phải là phân chia tầng cũng không phải là phân chia thực sự.

/ là phân chia tầng khi cả hai args là int, nhưng là phép chia đúng khi một trong hai của args là float.

// thực hiện "phân chia tầng", bất kể loại của bạn. Vì vậy, 1,0 / 2,0 sẽ cho 0,5, nhưng cả 1/2, 1 // 2 và 1,0 // 2.0 sẽ cho 0.

/ -> Phân chia dấu chấm động

// -> Phân chia tầng

Hãy xem một số ví dụ trong cả Python 2.7 và Python 3.5.

Python 2.7.10 so với Python 3.5

Python 2.7.10 so với Python 3.5

Bây giờ nếu bạn muốn có (trong python 2.7) đầu ra giống như trong python 3.5, bạn có thể làm như sau:

Python 2.7.10

Ở đâu vì không có sự khác biệt giữa phân chia Tầng trong cả python 2.7 và Python 3.5

Như mọi người đã trả lời rồi, // là phân chia tầng.

Tại sao điều này lại quan trọng vì // là sự phân chia tầng rõ ràng, trong tất cả các phiên bản Python từ 2.2, bao gồm cả các phiên bản Python 3.x.

Hành vi của / có thể thay đổi tùy thuộc vào:

  • Nhập __future__ hoạt động hay không (mô-đun-cục bộ)
  • Tùy chọn dòng lệnh Python, -Q cũ hoặc -Q mới

Python 2.7 và phiên bản python sắp ra mắt khác:

Chia toán hạng bên trái cho toán hạng bên phải

Phép chia các toán hạng trong đó kết quả là thương số trong đó các chữ số sau dấu thập phân bị loại bỏ. Nhưng nếu một trong các toán hạng là số âm, kết quả sẽ được làm tròn, tức là, được làm tròn từ 0 (về phía âm vô cùng):

Ví dụ: 9 // 2 = 4 và 9.0 // 2.0 = 4.0, -11 // 3 = -4, -11.0 // 3 = -4.0

Cả / Bộ phận và // toán tử phân chia tầng đang hoạt động theo cách tương tự.

Dấu gạch chéo kép, //, là phân chia tầng:

// is floor division, it will always give you the integer floor of the result. The other is 'regular' division.

The answer of the equation is rounded to the next smaller integer or float with .0 as decimal point.

The above answers are good. I want to add another point. Up to some values both of them result in the same quotient. After that floor division operator ( // ) works fine but not division ( / ) operator:

  • // is floor division, it will always give you the floor value of the result.
  • And the other one / is the floating-point division.

Followings are the difference between / and // I have run these arithmetic operations in Python 3.7.2

Python 3.x Clarification

Just to complement some previous answers.

It is important to remark that:

floor division. As in:

Is not int division. As in:

Is not round to 0 float division. As in:

As a consequence, the way of behaving is different when it comes to positives an negatives numbers as in the following example:

Python 3

  1. Also referred to as integer division. The resultant value is a whole integer, though the result’s type is not necessarily int. The result is always rounded towards minus infinity: 1//2 is 0 , (-1)//2 is -1 , 1//(-2) is -1 , and (-1)//(-2) is 0 .

Python 2

Notes:

1. For (plain or long) integer division, the result is an integer. The result is always rounded towards minus infinity: 1/2 is 0, (-1)/2 is -1, 1/(-2) is -1, and (-1)/(-2) is 0. Note that the result is a long integer if either operand is a long integer, regardless of the numeric value.

4. Deprecated since version 2.3: The floor division operator, the modulo operator, and the divmod() function are no longer defined for complex numbers. Instead, convert to a floating point number using the abs() function if appropriate.

5. Also referred to as integer division. The resultant value is a whole integer, though the result’s type is not necessarily int.


11.2: Normal operators

The usual comparison operators are available, as shown in Table 9.1.

Table 9.1. Comparison Operators

Operator Description
& lt less than
> greater than
<= less than or equal to
>= greater than or equal to
= equal
<> or != not equal

The != operator is converted to <> in the parser stage. It is not possible to implement != and <> operators that do different things.

Comparison operators are available for all relevant data types. All comparison operators are binary operators that return values of type boolean expressions like 1 < 2 < 3 are not valid (because there is no < operator to compare a Boolean value with 3 ).

There are also some comparison predicates, as shown in Table 9.2. These behave much like operators, but have special syntax mandated by the SQL standard.

Table 9.2. Comparison Predicates

Predicate Description
một BETWEEN NSy between
một NOT BETWEEN NSy not between
một BETWEEN SYMMETRIC NSy between, after sorting the comparison values
một NOT BETWEEN SYMMETRIC NSy not between, after sorting the comparison values
một IS DISTINCT FROM b not equal, treating null like an ordinary value
một IS NOT DISTINCT FROM b equal, treating null like an ordinary value
expression IS NULL is null
expression IS NOT NULL is not null
expression ISNULL is null (nonstandard syntax)
expression NOTNULL is not null (nonstandard syntax)
boolean_expression IS TRUE is true
boolean_expression IS NOT TRUE is false or unknown
boolean_expression IS FALSE is false
boolean_expression IS NOT FALSE is true or unknown
boolean_expression IS UNKNOWN is unknown
boolean_expression IS NOT UNKNOWN is true or false

The BETWEEN predicate simplifies range tests:

Notice that BETWEEN treats the endpoint values as included in the range. NOT BETWEEN does the opposite comparison:

BETWEEN SYMMETRIC is like BETWEEN except there is no requirement that the argument to the left of AND be less than or equal to the argument on the right. If it is not, those two arguments are automatically swapped, so that a nonempty range is always implied.

Ordinary comparison operators yield null (signifying “ unknown ” ), not true or false, when either input is null. For example, 7 = NULL yields null, as does 7 <> NULL . When this behavior is not suitable, use the IS [ NOT ] DISTINCT FROM predicates:

For non-null inputs, IS DISTINCT FROM is the same as the <> operator. However, if both inputs are null it returns false, and if only one input is null it returns true. Similarly, IS NOT DISTINCT FROM is identical to = for non-null inputs, but it returns true when both inputs are null, and false when only one input is null. Thus, these predicates effectively act as though null were a normal data value, rather than “ unknown ” .

To check whether a value is or is not null, use the predicates:

or the equivalent, but nonstandard, predicates:

Do không phải write expression = NULL because NULL is not “ equal to ” NULL . (The null value represents an unknown value, and it is not known whether two unknown values are equal.)

Some applications might expect that expression = NULL returns true if expression evaluates to the null value. It is highly recommended that these applications be modified to comply with the SQL standard. However, if that cannot be done the transform_null_equals configuration variable is available. If it is enabled, PostgreSQL will convert x = NULL clauses to x IS NULL .

Nếu expression is row-valued, then IS NULL is true when the row expression itself is null or when all the row's fields are null, while IS NOT NULL is true when the row expression itself is non-null and all the row's fields are non-null. Because of this behavior, IS NULL and IS NOT NULL do not always return inverse results for row-valued expressions in particular, a row-valued expression that contains both null and non-null fields will return false for both tests. In some cases, it may be preferable to write row IS DISTINCT FROM NULL or row IS NOT DISTINCT FROM NULL , which will simply check whether the overall row value is null without any additional tests on the row fields.

Boolean values can also be tested using the predicates

These will always return true or false, never a null value, even when the operand is null. A null input is treated as the logical value “ unknown ” . Notice that IS UNKNOWN and IS NOT UNKNOWN are effectively the same as IS NULL and IS NOT NULL , respectively, except that the input expression must be of Boolean type.

Some comparison-related functions are also available, as shown in Table 9.3.

Table 9.3. Comparison Functions

Function Description Example Example Result
num_nonnulls(VARIADIC "any") returns the number of non-null arguments num_nonnulls(1, NULL, 2) 2
num_nulls(VARIADIC "any") returns the number of null arguments num_nulls(1, NULL, 2) 1


Xem video: HTML va CSS orqali haqiqiy kalkulyator tayyorlash (Tháng Giêng 2022).