<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://en.formulasearchengine.com/index.php?action=history&amp;feed=atom&amp;title=Isomorphism_extension_theorem</id>
	<title>Isomorphism extension theorem - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://en.formulasearchengine.com/index.php?action=history&amp;feed=atom&amp;title=Isomorphism_extension_theorem"/>
	<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/index.php?title=Isomorphism_extension_theorem&amp;action=history"/>
	<updated>2026-05-30T08:21:06Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0-wmf.28</generator>
	<entry>
		<id>https://en.formulasearchengine.com/index.php?title=Isomorphism_extension_theorem&amp;diff=255065&amp;oldid=prev</id>
		<title>en&gt;Niceguyedc: WPCleaner v1.33 - Repaired 1 link to disambiguation page - (You can help) - Subfield</title>
		<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/index.php?title=Isomorphism_extension_theorem&amp;diff=255065&amp;oldid=prev"/>
		<updated>2014-08-17T19:25:23Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=En:WP:CLEANER&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;En:WP:CLEANER (page does not exist)&quot;&gt;WPCleaner&lt;/a&gt; v1.33 - Repaired 1 link to disambiguation page - &lt;a href=&quot;/index.php?title=WP:DPL&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;WP:DPL (page does not exist)&quot;&gt;(You can help)&lt;/a&gt; - &lt;a href=&quot;/index.php?title=Subfield&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Subfield (page does not exist)&quot;&gt;Subfield&lt;/a&gt;&lt;/p&gt;
&lt;a href=&quot;https://en.formulasearchengine.com/index.php?title=Isomorphism_extension_theorem&amp;amp;diff=255065&amp;amp;oldid=17552&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>en&gt;Niceguyedc</name></author>
	</entry>
	<entry>
		<id>https://en.formulasearchengine.com/index.php?title=Isomorphism_extension_theorem&amp;diff=17552&amp;oldid=prev</id>
		<title>en&gt;Brad7777: removed Category:Theorems in algebra; added Category:Theorems in abstract algebra using HotCat</title>
		<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/index.php?title=Isomorphism_extension_theorem&amp;diff=17552&amp;oldid=prev"/>
		<updated>2012-01-31T21:13:00Z</updated>

		<summary type="html">&lt;p&gt;removed &lt;a href=&quot;/index.php?title=Category:Theorems_in_algebra&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Category:Theorems in algebra (page does not exist)&quot;&gt;Category:Theorems in algebra&lt;/a&gt;; added &lt;a href=&quot;/index.php?title=Category:Theorems_in_abstract_algebra&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Category:Theorems in abstract algebra (page does not exist)&quot;&gt;Category:Theorems in abstract algebra&lt;/a&gt; using &lt;a href=&quot;/index.php?title=WP:HC&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;WP:HC (page does not exist)&quot;&gt;HotCat&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;The &amp;#039;&amp;#039;&amp;#039;Kabsch algorithm&amp;#039;&amp;#039;&amp;#039;, named after [[Wolfgang Kabsch]], is a method for calculating the optimal [[rotation matrix]] that minimizes the [[RMSD]] ([[root mean square]]d deviation) between two paired sets of points. It is useful in graphics, [[cheminformatics]] to compare molecular structures, and also [[bioinformatics]] for comparing [[protein]] structures (in particular, see [[root-mean-square deviation (bioinformatics)]]).&lt;br /&gt;
&lt;br /&gt;
The algorithm only computes the rotation matrix, but it also requires the computation of a translation vector. When both the translation and rotation are actually performed, the algorithm is sometimes called partial [[Procrustes superimposition]] (see also [[orthogonal Procrustes problem]]).&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
The algorithm starts with two sets of paired points, &amp;#039;&amp;#039;P&amp;#039;&amp;#039; and &amp;#039;&amp;#039;Q&amp;#039;&amp;#039;. Each set of points can be represented as an &amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;amp;times;3 [[matrix (mathematics)|matrix]]. The first row is the coordinates of the first point, the second row is the coordinates of the second point, the &amp;#039;&amp;#039;N&amp;#039;&amp;#039;th row is the coordinates of the &amp;#039;&amp;#039;N&amp;#039;&amp;#039;th point.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{pmatrix}&lt;br /&gt;
x_1 &amp;amp; y_1 &amp;amp; z_1 \\&lt;br /&gt;
x_2 &amp;amp; y_2 &amp;amp; z_2 \\&lt;br /&gt;
\vdots &amp;amp; \vdots  &amp;amp;  \vdots \\&lt;br /&gt;
x_N &amp;amp; y_N &amp;amp; z_N \end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The algorithm works in three steps: a translation, the computation of a covariance matrix, and the computation of the optimal rotation matrix.&lt;br /&gt;
&lt;br /&gt;
=== Translation ===&lt;br /&gt;
Both sets of coordinates must be translated first, so that their [[centroid]] coincides with the origin of the [[coordinate system]]. This is done by subtracting from the point coordinates the coordinates of the respective centroid.&lt;br /&gt;
&lt;br /&gt;
=== Computation of the covariance matrix ===&lt;br /&gt;
The second step consist of calculating a [[covariance matrix]] &amp;#039;&amp;#039;A&amp;#039;&amp;#039;. In matrix notation,&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; A = P^TQ \, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or, using summation notation,&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; A_{ij} = \sum_{k = 1}^N P_{ki} Q_{kj}, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Computation of the optimal rotation matrix ===&lt;br /&gt;
It is possible to calculate the optimal rotation &amp;#039;&amp;#039;U&amp;#039;&amp;#039; based on the matrix formula &amp;lt;math&amp;gt; U = (A^T A)^{1/2}A^{-1}  &amp;lt;/math&amp;gt; but implementing a numerical solution to this formula becomes complicated when all special cases are accounted for (for example, the case of &amp;#039;&amp;#039;A&amp;#039;&amp;#039; not having an inverse).&lt;br /&gt;
&lt;br /&gt;
If [[singular value decomposition]] (SVD) routines are available, the optimal rotation, &amp;#039;&amp;#039;U&amp;#039;&amp;#039;, can be calculated using the following simple algorithm.&lt;br /&gt;
&lt;br /&gt;
First, calculate the SVD of the covariance matrix &amp;#039;&amp;#039;A&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; A = VSW^T \, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, decide whether we need to correct our rotation matrix to ensure a right-handed coordinate system&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; d = \operatorname{sign}(\det(W V^T)) \, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, calculate our optimal rotation matrix, &amp;#039;&amp;#039;U&amp;#039;&amp;#039;, as&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; U = W \begin{pmatrix}&lt;br /&gt;
1 &amp;amp; 0 &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 1 &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 0 &amp;amp; d \end{pmatrix} V^T &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Coutsias, Seok, and Dill&amp;lt;ref name=Coutsias2004&amp;gt;{{cite journal | author = Coutsias EA, Seok C, Dill KA | title = Using quaternions to calculate RMSD | journal = J Comput Chem | volume = 25 | issue = 15 | pages = 1849–1857 | year = 2004 | pmid = 15376254 | doi = 10.1002/jcc.20110}}&amp;lt;/ref&amp;gt; have found an equivalent method that uses [[quaternion]]s.&lt;br /&gt;
&lt;br /&gt;
=== Generalizations ===&lt;br /&gt;
&lt;br /&gt;
The algorithm was described for points in a three-dimensional space. The generalization to &amp;#039;&amp;#039;D&amp;#039;&amp;#039; dimensions is immediate.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
This SVD algorithm is described in more detail at http://cnx.org/content/m11608/latest/&lt;br /&gt;
&lt;br /&gt;
A [[Matlab]] function is available at http://www.mathworks.com/matlabcentral/fileexchange/25746-kabsch-algorithm&lt;br /&gt;
&lt;br /&gt;
A free [[PyMol]] plugin easily implementing Kabsch is [http://www.pymolwiki.org/index.php/Cealign Cealign]. [[Visual Molecular Dynamics|VMD]] uses the Kabsch algorithm for its alignment.&lt;br /&gt;
&lt;br /&gt;
A [[Python_(programming_language)|Python]] script is available at http://github.com/charnley/rmsd&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
[[Wahba&amp;#039;s problem|Wahba&amp;#039;s Problem]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&lt;br /&gt;
* Kabsch, Wolfgang, (1976) &amp;quot;A solution for the best rotation to relate two sets of vectors&amp;quot;, &amp;#039;&amp;#039;Acta Crystallographica&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;32&amp;#039;&amp;#039;&amp;#039;:922. {{doi|10.1107/S0567739476001873}} with a correction in Kabsch, Wolfgang, (1978) &amp;quot;A discussion of the solution for the best rotation to relate two sets of vectors&amp;quot;, &amp;quot;Acta Crystallographica&amp;quot;, &amp;quot;A34&amp;quot;, 827–828 {{doi|10.1107/S0567739478001680}}&lt;br /&gt;
&lt;br /&gt;
* Lin Ying-Hung, Chang Hsun-Chang, Lin Yaw-Ling (2004) &amp;quot;A Study on Tools and Algorithms for 3-D Protein Structures Alignment and Comparison&amp;quot;, &amp;#039;&amp;#039;International Computer Symposium&amp;#039;&amp;#039;, December 15–17, Taipei, Taiwan.&lt;br /&gt;
&lt;br /&gt;
[[Category:Bioinformatics algorithms]]&lt;/div&gt;</summary>
		<author><name>en&gt;Brad7777</name></author>
	</entry>
</feed>