<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://tomwiki.com/index.php?action=history&amp;feed=atom&amp;title=PENOPT</id>
	<title>PENOPT - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://tomwiki.com/index.php?action=history&amp;feed=atom&amp;title=PENOPT"/>
	<link rel="alternate" type="text/html" href="http://tomwiki.com/index.php?title=PENOPT&amp;action=history"/>
	<updated>2026-10-31T19:53:28Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>http://tomwiki.com/index.php?title=PENOPT&amp;diff=2587&amp;oldid=prev</id>
		<title>Elias at 21:00, 19 January 2012</title>
		<link rel="alternate" type="text/html" href="http://tomwiki.com/index.php?title=PENOPT&amp;diff=2587&amp;oldid=prev"/>
		<updated>2012-01-19T21:00:51Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 17:00, 19 January 2012&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l31&quot;&gt;Line 31:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 31:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Using the Matlab Interface==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Using the Matlab Interface==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The main routines in the two-layer design of the interface are shown in &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;xr id=&amp;quot;tab&lt;/del&gt;:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;interfaceRoutines&amp;quot; /&amp;gt;&lt;/del&gt;. Page and section references are given to detailed descriptions on how to use the routines.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The main routines in the two-layer design of the interface are shown in &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[#Table&lt;/ins&gt;: &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;The interface routines.]]&lt;/ins&gt;. Page and section references are given to detailed descriptions on how to use the routines.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;====Table: The interface routines.====&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;figtable id=&quot;tab:interfaceRoutines&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{|class=&amp;quot;wikitable&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{|class=&amp;quot;wikitable&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|+&amp;lt;caption&gt;The interface routines.&amp;lt;/caption&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-valign=&quot;top&quot;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;!Function||Description&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;!Function||Description&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-valign=&amp;quot;top&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-valign=&amp;quot;top&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l47&quot;&gt;Line 47:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 46:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|[[#penfeas_sdp|penfeas_sdp]]||The layer two TOMLAB interface routine that calls &amp;#039;&amp;#039;pen.m&amp;#039;&amp;#039;. Converts the input &amp;#039;&amp;#039;P rob &amp;#039;&amp;#039;format before calling &amp;#039;&amp;#039;pensdp.dll &amp;#039;&amp;#039;and converts back to the output &amp;#039;&amp;#039;Result &amp;#039;&amp;#039;structure.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|[[#penfeas_sdp|penfeas_sdp]]||The layer two TOMLAB interface routine that calls &amp;#039;&amp;#039;pen.m&amp;#039;&amp;#039;. Converts the input &amp;#039;&amp;#039;P rob &amp;#039;&amp;#039;format before calling &amp;#039;&amp;#039;pensdp.dll &amp;#039;&amp;#039;and converts back to the output &amp;#039;&amp;#039;Result &amp;#039;&amp;#039;structure.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/figtable&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The PENOPT control parameters are possible to set from Matlab.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The PENOPT control parameters are possible to set from Matlab.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Elias</name></author>
	</entry>
	<entry>
		<id>http://tomwiki.com/index.php?title=PENOPT&amp;diff=2405&amp;oldid=prev</id>
		<title>Elias at 10:53, 15 December 2011</title>
		<link rel="alternate" type="text/html" href="http://tomwiki.com/index.php?title=PENOPT&amp;diff=2405&amp;oldid=prev"/>
		<updated>2011-12-15T10:53:57Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;http://tomwiki.com/index.php?title=PENOPT&amp;amp;diff=2405&amp;amp;oldid=1157&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Elias</name></author>
	</entry>
	<entry>
		<id>http://tomwiki.com/index.php?title=PENOPT&amp;diff=1157&amp;oldid=prev</id>
		<title>Elias: Created page with &quot;==Introduction==  ===Overview===  Welcome to the TOMLAB /PENOPT User&#039;s Guide. TOMLAB /PENOPT includes either PENSDP or PENBMI (depends on the license) and interfaces between The ...&quot;</title>
		<link rel="alternate" type="text/html" href="http://tomwiki.com/index.php?title=PENOPT&amp;diff=1157&amp;oldid=prev"/>
		<updated>2011-10-13T12:55:05Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==Introduction==  ===Overview===  Welcome to the TOMLAB /PENOPT User&amp;#039;s Guide. TOMLAB /PENOPT includes either PENSDP or PENBMI (depends on the license) and interfaces between The ...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
Welcome to the TOMLAB /PENOPT User&amp;#039;s Guide. TOMLAB /PENOPT includes either PENSDP or PENBMI (depends on the license) and interfaces between The MathWorks&amp;#039; MATLAB and the solver packages from PENOPT GbR. The package includes one of the following solvers:&lt;br /&gt;
&lt;br /&gt;
PENBMI  - For large, sparse semidefinite programming problems with linear and bilinear matrix inequality constraints.&lt;br /&gt;
&lt;br /&gt;
PENSDP - For large, sparse linear  semidefinite programming problems with  linear  constraints.  It also solves feasibility problems for systems of linear matrix inequalities.&lt;br /&gt;
&lt;br /&gt;
Please  visit  [http://tomopt.com/tomlab/products/pensdp/ http://tomopt.com/tomlab/products/pensdp/],  [http://tomopt.com/tomlab/products/penbmi/ http://tomopt.com/tomlab/products/penbmi/] and [http://www.penopt.com/ http://www.penopt.com] for more information.&lt;br /&gt;
&lt;br /&gt;
For PENBMI two  different  input  formats may be used for the  problem formulation:  The PENBMI Structural Format, an extension of the PENSDP format for linear problems, and the TOMLAB  format for semidefinite prob- lems. Apart from solving the  BMI  problem,  the  user can check feasibility  of the  system of linear  and bilinear matrix inequalities.&lt;br /&gt;
&lt;br /&gt;
For PENSDP three  different  input  formats may be used for problem  formulation:  The standard  sparse SDPA format used in SDPLIB, the PENSDP Structural Format, and the TOMLAB format for semidefinite problems.&lt;br /&gt;
&lt;br /&gt;
Problems defined in SeDuMi Matlab format may easily be converted to SDPA format and solved by TOMLAB /PENSDP. The conversion routine, called writesdp, was written by Brian Borcher.&lt;br /&gt;
&lt;br /&gt;
Apart from solving the SDP problem, the user can check feasibility of the system of linear matrix inequalities. The interface between TOMLAB /PENOPT, Matlab and TOMLAB  consists of two layers.  The first layer gives direct access from Matlab   to PENOPT, via calling a Matlab function that calls a pre-compiled MEX file (DLL under Windows, shared library in UNIX)  that defines and solves the problem in PENOPT. The second layer is a Matlab function that takes the input in the TOMLAB format, and calls the first layer function.  On return the function creates the output in the TOMLAB format.&lt;br /&gt;
&lt;br /&gt;
===Contents of this Manual===&lt;br /&gt;
&lt;br /&gt;
*[[#Using the Matlab Interface]] gives the basic information needed to run the Matlab interface.&lt;br /&gt;
&lt;br /&gt;
*[[#PENOPT Solver Reference]] provides all the solver references for PENBMI and PENSDP.&lt;br /&gt;
&lt;br /&gt;
===Prerequisites===&lt;br /&gt;
&lt;br /&gt;
In this manual we assume that  the user is familiar with  semidefinite programming, TOMLAB  and the Matlab language.&lt;br /&gt;
&lt;br /&gt;
==Using the Matlab Interface==&lt;br /&gt;
&lt;br /&gt;
The main routines in the two-layer design of the interface are shown in &amp;lt;xr id=&amp;quot;tab:interfaceRoutines&amp;quot; /&amp;gt;. Page and section references are given to detailed descriptions on how to use the routines.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;figtable id=&amp;quot;tab:interfaceRoutines&amp;quot;&amp;gt;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&amp;lt;caption&amp;gt;The interface routines.&amp;lt;/caption&amp;gt;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
!Function||Description&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[#penbmiTL|penbmiTL]]||The layer two interface routine called by the TOMLAB driver routine &amp;#039;&amp;#039;tomRun&amp;#039;&amp;#039;.  This routine then calls &amp;#039;&amp;#039;penbmi.m&amp;#039;&amp;#039;, which in turn calls &amp;#039;&amp;#039;penbmi.dll&amp;#039;&amp;#039;.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[#penfeas_bmi|penfeas_bmi]]||The layer two TOMLAB interface routine that calls &amp;#039;&amp;#039;pen.m&amp;#039;&amp;#039;. Converts the input &amp;#039;&amp;#039;P rob &amp;#039;&amp;#039;format before calling &amp;#039;&amp;#039;penbmiQ.dll &amp;#039;&amp;#039;and converts back to the output &amp;#039;&amp;#039;Result &amp;#039;&amp;#039;structure.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[#pensdpTL|pensdpTL]]||The layer two interface routine called by the TOMLAB driver routine &amp;#039;&amp;#039;tomRun&amp;#039;&amp;#039;.  This routine then calls &amp;#039;&amp;#039;pensdp.m&amp;#039;&amp;#039;, which in turn calls &amp;#039;&amp;#039;pensdp.dll&amp;#039;&amp;#039;.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|[[#penfeas_sdp|penfeas_sdp]]||The layer two TOMLAB interface routine that calls &amp;#039;&amp;#039;pen.m&amp;#039;&amp;#039;. Converts the input &amp;#039;&amp;#039;P rob &amp;#039;&amp;#039;format before calling &amp;#039;&amp;#039;pensdp.dll &amp;#039;&amp;#039;and converts back to the output &amp;#039;&amp;#039;Result &amp;#039;&amp;#039;structure.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/figtable&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The PENOPT control parameters are possible to set from Matlab.&lt;br /&gt;
&lt;br /&gt;
They can be set as inputs to the interface routine &amp;#039;&amp;#039;penbmiTL&amp;#039;&amp;#039; for example and the others.  The user sets fields in a structure called &amp;#039;&amp;#039;Prob.PENOPT&amp;#039;&amp;#039;. The following example shows how to set the maximum number of overall iterations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Prob.PENOPT.ioptions(2) = 200; % Setting maximum number of iterations&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==PENOPT Solver Reference==&lt;br /&gt;
&lt;br /&gt;
The PENOPT solvers are a set of solvers that were developed by the PENOPT GbR. Table 2 lists the solvers included in TOMLAB /PENOPT. The solvers are called using a set of MEX-file interfaces developed as part of TOMLAB. All functionality of the PENOPT solvers are available and changeable in the TOMLAB framework in Matlab.&lt;br /&gt;
&lt;br /&gt;
Detailed descriptions of the TOMLAB  /PENOPT solvers are given in the following sections.  Also see the M-file help for each solver.&lt;br /&gt;
&lt;br /&gt;
Additional solvers reference guides for the TOMLAB  /PENOPT solvers are available for download from the TOM- LAB home page [http://tomopt.com/ http://tomopt.com]. Extensive TOMLAB m-file help is also available, for example &amp;#039;&amp;#039;help penbmiTL &amp;#039;&amp;#039;in Matlab will display the features of the PENBMI solver using the TOMLAB  format.&lt;br /&gt;
&lt;br /&gt;
TOMLAB /PENOPT solves&lt;br /&gt;
&lt;br /&gt;
The linear semi-definite programming problem with linear&lt;br /&gt;
matrix inequalities is defined as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{array}{rccccl}&lt;br /&gt;
\min\limits_{x} &amp;amp; \multicolumn{5}{l}{f(x) = {c^T}x} \\&lt;br /&gt;
&amp;amp; \\&lt;br /&gt;
s/t &amp;amp; x_{L}   &amp;amp; \leq &amp;amp; x  &amp;amp; \leq &amp;amp; x_{U}  \\&lt;br /&gt;
&amp;amp; b_{L}   &amp;amp; \leq &amp;amp; Ax &amp;amp; \leq &amp;amp; b_{U} \\&lt;br /&gt;
&amp;amp; \multicolumn{5}{r}{Q^{i}_0 + \Sum{k=1}{n} Q^{i}_{k}x_{k} \preccurlyeq 0,\qquad i=1,\ldots,m.} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;c, x, x_L, x_U \in \MATHSET{R}^n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;A \in \MATHSET{R}^{m_l \times n}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;b_L,b_U \in \MATHSET{R}^{m_l}&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;Q^{i}_{k}&amp;lt;/math&amp;gt; are symmetric matrices of similar dimensions in each constraint &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;. If there are several LMI constraints, each may have it&amp;#039;s own dimension.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;linear semi-definite programming problem with linear matrix inequalities&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;sdp&amp;#039;&amp;#039;&amp;#039;) is defined as are symmetric matrices of similar dimensions in each constraint &amp;#039;&amp;#039;i&amp;#039;&amp;#039;. If there are several LMI constraints, each may have it&amp;#039;s own dimension.&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;linear semi-definite programming problem with bilinear matrix inequalities&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;bmi&amp;#039;&amp;#039;&amp;#039;) is defined similarly to but with the matrix following inequality constraints&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Q^{i}_0 + \Sum{k=1}{n} Q^{i}_{k}x_{k} + \Sum{k=1}{n}\Sum{l=1}{n} x_{k}x_{l}K^{i}_{kl} \preccurlyeq 0 \\&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The MEX solvers &amp;#039;&amp;#039;pensdp&amp;#039;&amp;#039; and &amp;#039;&amp;#039;penbmi&amp;#039;&amp;#039; treat &amp;#039;&amp;#039;&amp;#039;sdp&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;bmi&amp;#039;&amp;#039;&amp;#039; problems, respectively. These are available in the TOMLAB /PENSDP and TOMLAB /PENBMI toolboxes.&lt;br /&gt;
&lt;br /&gt;
The MEX-file solver &amp;#039;&amp;#039;pensdp&amp;#039;&amp;#039; available in the TOMLAB /PENSDP toolbox implements a penalty method aimed at large-scale  dense and sparse &amp;#039;&amp;#039;&amp;#039;sdp&amp;#039;&amp;#039;&amp;#039; problems. The interface to the solver allows for data input in the sparse SDPA input format as well as a TOMLAB specific format.&lt;br /&gt;
&lt;br /&gt;
The MEX-file solver &amp;#039;&amp;#039;penbmi &amp;#039;&amp;#039;available in the TOMLAB /PENBMI toolbox is similar to &amp;#039;&amp;#039;pensdp&amp;#039;&amp;#039;, with added support for the bilinear matrix inequalities.&lt;br /&gt;
&lt;br /&gt;
The add-on toolbox TOMLAB /PENOPT solves linear semi-definite programming problems with linear and bilinear matrix inequalities.  The solvers are listed in Table 2. They are written  in a combination of Matlab and C code.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&amp;lt;caption&amp;gt;Solvers in TOMLAB /PENOPT&amp;lt;/caption&amp;gt;&lt;br /&gt;
!Function||Description&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;penbmi&amp;#039;&amp;#039;||Sparse and dense linear semi-definite programming using a penalty algorithm.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;penfeas_sdp&amp;#039;&amp;#039;||Feasibility check of systems of linear matrix inequalities, using &amp;#039;&amp;#039;pensdp&amp;#039;&amp;#039;.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;pensdp&amp;#039;&amp;#039;||Sparse and dense linear semi-definite programming using a penalty algorithm.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;penfeas_sdp&amp;#039;&amp;#039;||Feasibility check of systems of linear matrix inequalities, using &amp;#039;&amp;#039;pensdp&amp;#039;&amp;#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==PENBMI==&lt;br /&gt;
&lt;br /&gt;
TOMLAB /PENBMI was developed in co-operation with PENOPT GbR. The following pages describe the solvers and the feasibility checks.&lt;br /&gt;
&lt;br /&gt;
===penfeas_bmi===&lt;br /&gt;
&lt;br /&gt;
====Purpose====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;penfeas_bmi&amp;#039;&amp;#039; checks the feasibility of a system of bilinear matrix inequalities (BMI):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
A^{0}_i +&lt;br /&gt;
\Sum{k=1}{n} A^{(i)}_k x_k +&lt;br /&gt;
\Sum{k=1}{n}\Sum{l=1}{n} x_{k} x_{l} K^{(i)}_{kl}&lt;br /&gt;
\preccurlyeq  0, \qquad k=1,2,\ldots,m&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with symmetric matrices &amp;lt;math&amp;gt;A_{k}^{i}, K_{kl}^{i} \in \RR^{d_l \times d_l},\,k,l=1,\ldots,n,\,i=1,\ldots,m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Calling Syntax====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ifeas, feas, xfeas] = penfeas bmi(p, x_0, options)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Description of Inputs====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Input||Description&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;p&amp;#039;&amp;#039;||PENBMI format structure, e.g. from &amp;#039;&amp;#039;sdpa2pen&amp;#039;&amp;#039;.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;x_0&amp;#039;&amp;#039;||Inital guess of the feasible point.  Default = 0.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;options&amp;#039;&amp;#039;||Optional 3 &amp;#039;&amp;#039;×&amp;#039;&amp;#039; 1 vector.  May be omitted, in which case the defaults below are used.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;options(1)&amp;#039;&amp;#039;||Output level of PENBMI  solver.  Default = 0.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;options(2)&amp;#039;&amp;#039;||Upper bound on &amp;lt;math&amp;gt;\|x\|_{\infty}&amp;lt;/math&amp;gt;. Default = 1000.&lt;br /&gt;
&lt;br /&gt;
If &amp;#039;&amp;#039;&amp;lt; &amp;#039;&amp;#039;0, no box bounds are applied.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;options(3)&amp;#039;&amp;#039;||Weighting parameter in the objective function.  Default 10&amp;lt;sup&amp;gt;-4&amp;lt;/sup&amp;gt; .&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Description of Outputs====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Output||Description&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;ifeas&amp;#039;&amp;#039;||Feasibility of the system:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|0||System is strictly feasible&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|1||System is feasible but not necessarily strictly feasible&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|-1||System is probably infeasible&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;feas&amp;#039;&amp;#039;||Value of the minimized maximal eigenvalue of BMI.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;xfeas&amp;#039;&amp;#039;||Feasible point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Algorithm====&lt;br /&gt;
&lt;br /&gt;
The feasibility of the system of BMI&amp;#039;s is checked by solving the following &amp;#039;&amp;#039;&amp;#039;bmi&amp;#039;&amp;#039;&amp;#039; problem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{array}{ccccccl}&lt;br /&gt;
\min_limits_{x\in\RR^{n},\lambda\in\RR} &amp;amp;&lt;br /&gt;
\multicolumn{6}{l}{f(x,\lambda) = \lambda + w \|x\|_2^2} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{array}{ccccccl}&lt;br /&gt;
\mbox{s.t.} &amp;amp; - \xbound &amp;amp; \leq &amp;amp; x &amp;amp; \leq &amp;amp; \xbound \\&lt;br /&gt;
&amp;amp; \multicolumn{5}{l}{A_0^i + \Sum{k=1}{n} A_{k}^{i} x_{k}&lt;br /&gt;
\preccurlyeq \lambda I_{n \times n},} &amp;amp; i=1,\ldots,m \\&lt;br /&gt;
\end{array}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;#039;&amp;#039;x&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;bound&amp;lt;/sub&amp;gt;is taken from input argument &amp;#039;&amp;#039;options(2)&amp;#039;&amp;#039;, or &amp;lt;math&amp;gt;\infty&amp;lt;/math&amp;gt; if &amp;#039;&amp;#039;options(2) &amp;lt; &amp;#039;&amp;#039;0.&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;math&amp;gt;\lambda &amp;lt; 0&amp;lt;/math&amp;gt;, the system is strictly feasible; when &amp;lt;math&amp;gt;\lambda=0&amp;lt;/math&amp;gt;, the system is feasible but has no interior point.  When &amp;lt;math&amp;gt;\lambda&amp;gt;0&amp;lt;/math&amp;gt; for any &amp;#039;&amp;#039;x&amp;lt;sub&amp;gt;bound&amp;lt;/sub&amp;gt;&amp;#039;&amp;#039;, the system may be infeasible.&lt;br /&gt;
&lt;br /&gt;
As the semidefinite problem solved is nonconvex and &amp;#039;&amp;#039;penbmiQ &amp;#039;&amp;#039;is a local method, it cannot be guaranteed that the solution &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; is a global minimum. Consequently, the (local) optimum &amp;lt;math&amp;gt;\lambda_{toc}&amp;lt;/math&amp;gt; found by &amp;#039;&amp;#039;penbmiQ &amp;#039;&amp;#039;may be a positive number (indicating infeasibility), although the system is feasible (i.e., the global optimum &amp;lt;math&amp;gt;\lambda_{glob} &amp;lt; 0&amp;lt;/math&amp;gt;).  In such a case, the user may try various initial  points &amp;#039;&amp;#039;x &amp;#039;&amp;#039;_0, and also different weighting parameter &amp;#039;&amp;#039;w &amp;#039;&amp;#039;(&amp;#039;&amp;#039;option(3)&amp;#039;&amp;#039;).&lt;br /&gt;
&lt;br /&gt;
In practice, the conditions  on feasibility  are as follows: &amp;lt;math&amp;gt;\lambda &amp;lt; -10^{-6}&amp;lt;/math&amp;gt; means  strict  feasibility, &amp;lt;math&amp;gt;|\lambda|&amp;lt;10^{-6}&amp;lt;/math&amp;gt; means feasibility (not strict) and &amp;lt;math&amp;gt;\lambda &amp;gt; 10^{-6}&amp;lt;/math&amp;gt; indicates infeasibility.  The user can decide by the actual value of the output parameter &amp;#039;&amp;#039;feas &amp;#039;&amp;#039;(including the optimal &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
For the case when the BMI system is unbounded, we have to add artificial bounds on &amp;#039;&amp;#039;x&amp;#039;&amp;#039;, otherwise PENBMI might diverge. Of course, it may happen that the feasible point lies outside these bounds. In this case &amp;#039;&amp;#039;penfeas_bmi&amp;#039;&amp;#039; claims infeasibility,  although the system is  actually feasible. When in doubts, the  user  may try  to gradually increase &amp;#039;&amp;#039;x&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;bound&amp;lt;/sub&amp;gt; (parameter &amp;#039;&amp;#039;options(2)&amp;#039;&amp;#039;).&lt;br /&gt;
&lt;br /&gt;
On the other hand, for very ill-conditioned and unbounded systems, the default bound 1000 may be too large and PENBMI may not converge. In this case, the user is advised either to increase the weighting parameter &amp;#039;&amp;#039;w &amp;#039;&amp;#039;(to 0&amp;#039;&amp;#039;.&amp;#039;&amp;#039;01 and bigger) or to decrease the bound (parameter &amp;#039;&amp;#039;options(2)&amp;#039;&amp;#039;) to a smaller number (100-1).&lt;br /&gt;
&lt;br /&gt;
====M-files  Used====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;pen.m&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
====MEX-files Used====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;penbmiQ&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
====See Also====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;penfeas sdp.m&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
===penbmiTL===&lt;br /&gt;
&lt;br /&gt;
====Purpose====&lt;br /&gt;
&lt;br /&gt;
Solve (linear) semi-definite programming problems.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;penbmiTL &amp;#039;&amp;#039;solves problems of the form&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{array}{ccccccl}&lt;br /&gt;
\min\limits_{x} &amp;amp; \multicolumn{5}{l}{f(x) = c^{T} x} &amp;amp; \\&lt;br /&gt;
s/t &amp;amp; x_L &amp;amp; \leq &amp;amp; x  &amp;amp; \leq &amp;amp; x_U &amp;amp; \\&lt;br /&gt;
{}  &amp;amp; b_L &amp;amp; \leq &amp;amp; Ax &amp;amp; \leq &amp;amp; b_U &amp;amp; \\&lt;br /&gt;
\multicolumn{7}{l}&lt;br /&gt;
{&lt;br /&gt;
Q^{(0)}_i +&lt;br /&gt;
\Sum{k=1}{n} Q^{(i)}_k x_k +&lt;br /&gt;
\Sum{k=1}{n}\Sum{l=1}{n} x_{k} x_{l} K^{(i)}_{kl}&lt;br /&gt;
 \preceq  0, \qquad k=1,2,\ldots,m&lt;br /&gt;
}&lt;br /&gt;
\end{array}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;x,x_L,x_U \in \Rdim{n},\, A \in \Rdim{m_l \times n},\, b_L,b_U&lt;br /&gt;
\in \Rdim{m_l}&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;Q^{(i)}_k&amp;lt;/math&amp;gt; are sparse or dense symmetric&lt;br /&gt;
matrices.  The matrix sizes may vary between different matrix&lt;br /&gt;
inequalities but must be the same in each particular constraint.&lt;br /&gt;
&lt;br /&gt;
====Calling Syntax====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Result = tomRun(&amp;#039;penbmi&amp;#039;,Prob,...)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Description of Inputs====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Prob&amp;#039;&amp;#039; Problem description structure. The following fields are used:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Input||Description&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;QP.c&amp;#039;&amp;#039;||Vector with coefficients for linear objective function.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;A&amp;#039;&amp;#039;||Linear constraints matrix.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;b_L&amp;#039;&amp;#039;||Lower bound for linear constraints.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;b_U&amp;#039;&amp;#039;||Upper bound for linear constraints.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;x_L&amp;#039;&amp;#039;||Lower bound on variables.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;x_U&amp;#039;&amp;#039;||Upper bound on variables.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;x_0&amp;#039;&amp;#039;||Starting point.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;PENOPT&amp;#039;&amp;#039;||Structure with special fields for SDP parameters. Fields used are:&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;LMI&amp;#039;&amp;#039;||Structure array with matrices for the linear terms of the matrix  inequalities.&lt;br /&gt;
&lt;br /&gt;
See &amp;#039;&amp;#039;Examples  &amp;#039;&amp;#039;on page 17 for a discussion of how to set this correctly.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;ioptions&amp;#039;&amp;#039;||8 &amp;#039;&amp;#039;× &amp;#039;&amp;#039;1 vector with options, defaults in ().  Any element set to a value less than zero will be replaced by a default value, in some cases fetched  from standard Tomlab parameters.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;ioptions(1)&amp;#039;&amp;#039;||0/1: use default/user defined values for options.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;ioptions(2)&amp;#039;&amp;#039;||Maximum  number  of iterations  for  overall  algorithm  (50).	If  not  given, &amp;#039;&amp;#039;Prob.optParam.MaxIter&amp;#039;&amp;#039; is used.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;ioptions(3)&amp;#039;&amp;#039;||Maximum number of iterations in unconstrained  optimization (100).  If not given, &amp;#039;&amp;#039;Prob.optParam.MinorIter &amp;#039;&amp;#039;is used.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;ioptions(4)&amp;#039;&amp;#039;||Output level: 0/(1)/2/3 = silent / summary / brief / full.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;ioptions(5)&amp;#039;&amp;#039;||(0)/1:  Check density of Hessian / Assume dense.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;ioptions(6)&amp;#039;&amp;#039;||(0)/1:  (Do not) use linesearch  in unconstrained minimization. &lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;ioptions(7)&amp;#039;&amp;#039;||(0)/1:  (Do not) write solution vector to output file. &lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;ioptions(8)&amp;#039;&amp;#039;||(0)/1:  (Do not) write computed multipliers to output file.&lt;br /&gt;
|}&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;foptions&amp;#039;&amp;#039;||1 &amp;#039;&amp;#039;× &amp;#039;&amp;#039;7 vector with options, defaults in ().&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitablew&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;foptions(1) &amp;#039;&amp;#039;||Scaling factor linear constraints; must be positive. (1.0).&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|foptions(2)||Restriction for multiplier  update; linear constraints (0.7). &lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|foptions(3)||Restriction for multiplier  update; matrix constraints (0.1).&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;foptions(4)&amp;#039;&amp;#039;||Stopping  criterium   for   overall  algorithm   (10&amp;lt;sup&amp;gt;-7&amp;lt;/sup&amp;gt;). Tomlab equivalent: &amp;#039;&amp;#039;Prob.optParam.eps_f&amp;#039;&amp;#039;.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;foptions(5)&amp;#039;&amp;#039;||Lower bound for the penalty parameters (10&amp;#039;&amp;#039;-&amp;#039;&amp;#039;6 ).||&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;foptions(6)&amp;#039;&amp;#039;||Lower bound for the multipliers (10&amp;lt;sup&amp;gt;-14&amp;lt;/sup&amp;gt;).&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;foptions(7)&amp;#039;&amp;#039;||Stopping criterium for unconstrained minimization (10&amp;lt;sup&amp;gt;-2&amp;lt;/sup&amp;gt;).&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Description of Outputs====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Result	&amp;#039;&amp;#039;Structure with result from optimization. The following fields are changed:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Output||Description&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;x_k&amp;#039;&amp;#039;||Optimal point.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;f_k	&amp;#039;&amp;#039;||Function value at optimum.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;g_k	&amp;#039;&amp;#039;||Gradient value at optimum, &amp;#039;&amp;#039;c&amp;#039;&amp;#039;.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;v_k	&amp;#039;&amp;#039;||Lagrange multipliers.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;x_0	&amp;#039;&amp;#039;||Starting point.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;f_0	&amp;#039;&amp;#039;||Function value at start.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;xState 	&amp;#039;&amp;#039;||State of each variable, described in the TOMLAB User&amp;#039;s Guide.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;Iter 	&amp;#039;&amp;#039;||Number of iterations.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;ExitFlag 	&amp;#039;&amp;#039;||0: OK.&lt;br /&gt;
&lt;br /&gt;
1: Maximal number of iterations reached.&lt;br /&gt;
&lt;br /&gt;
2: Unbounded feasible region.&lt;br /&gt;
&lt;br /&gt;
3: Rank problems.  Can not find any solution point.&lt;br /&gt;
&lt;br /&gt;
4: Illegal &amp;#039;&amp;#039;x 0&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
5: No feasible point &amp;#039;&amp;#039;x 0 &amp;#039;&amp;#039;found.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;Inform&amp;#039;&amp;#039;||If &amp;#039;&amp;#039;ExitF lag &amp;gt; &amp;#039;&amp;#039;0, &amp;#039;&amp;#039;I nf orm &amp;#039;&amp;#039;= &amp;#039;&amp;#039;ExitF lag&amp;#039;&amp;#039;.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;QP.B&amp;#039;&amp;#039;||Optimal active set.  See input variable &amp;#039;&amp;#039;QP.B&amp;#039;&amp;#039;.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;Solver&amp;#039;&amp;#039;||Solver used.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;SolverAlgorithm&amp;#039;&amp;#039;||Solver algorithm used.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;FuncEv&amp;#039;&amp;#039;||Number of function evaluations.  Equal to &amp;#039;&amp;#039;Iter&amp;#039;&amp;#039;. &amp;#039;&amp;#039;ConstrEv	&amp;#039;&amp;#039;Number of constraint evaluations.  Equal to &amp;#039;&amp;#039;Iter&amp;#039;&amp;#039;. &amp;#039;&amp;#039;Prob	&amp;#039;&amp;#039;Problem structure used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;pensdp&amp;#039;&amp;#039; implements a penalty algorithm based on the PBM method of Ben-Tal and Zibulevsky.  It is possible to give input data in three different formats:&lt;br /&gt;
&lt;br /&gt;
*Standard  sparse SPDA format&lt;br /&gt;
*PENSDP Structural format&lt;br /&gt;
*Tomlab Quick format&lt;br /&gt;
&lt;br /&gt;
In all three cases, problem setup is done via &amp;#039;&amp;#039;sdpAssign&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
====See Also====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;sdpAssign.m&amp;#039;&amp;#039;, &amp;#039;&amp;#039;sdpa2pen.m&amp;#039;&amp;#039;, &amp;#039;&amp;#039;sdpDemo.m&amp;#039;&amp;#039;, &amp;#039;&amp;#039;tomlab/docs/penbmi.pdf&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
====Warnings====&lt;br /&gt;
&lt;br /&gt;
Currently &amp;#039;&amp;#039;penbmi &amp;#039;&amp;#039;does not work well solving problems of &amp;#039;&amp;#039;&amp;#039;sdp &amp;#039;&amp;#039;&amp;#039;type.&lt;br /&gt;
&lt;br /&gt;
====Examples====&lt;br /&gt;
&lt;br /&gt;
Setting the LMI constraints is best described by an example. Assume 3 variables &amp;#039;&amp;#039;x &amp;#039;&amp;#039;= (&amp;#039;&amp;#039;x&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, &amp;#039;&amp;#039;x&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; , &amp;#039;&amp;#039;x&amp;#039;&amp;#039;&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;) and 2 linear matrix inequalities of sizes 3 &amp;#039;&amp;#039;× &amp;#039;&amp;#039;3 and 2 &amp;#039;&amp;#039;× &amp;#039;&amp;#039;2 respectively, here given on block-diagonal form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left(&lt;br /&gt;
\begin{array}{c|c}&lt;br /&gt;
\begin{array}{ccc} 0  \\ &amp;amp; 0 \\ &amp;amp;&amp;amp; 0\end{array}&lt;br /&gt;
\\ \hline&lt;br /&gt;
&amp;amp; \begin{array}{cc} 0 \\ &amp;amp; 1 \end{array}&lt;br /&gt;
\end{array}&lt;br /&gt;
\right) +&lt;br /&gt;
\left(&lt;br /&gt;
\begin{array}{c|c}&lt;br /&gt;
\begin{array}{ccc} 2 &amp;amp; -1 &amp;amp; 0 \\ &amp;amp; 2 &amp;amp; 0 \\ &amp;amp;&amp;amp; 2\end{array}&lt;br /&gt;
\\ \hline &amp;amp; \begin{array}{cc} 1 \\ &amp;amp; -1 \end{array}&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)x_1&lt;br /&gt;
\\ +&lt;br /&gt;
\left(&lt;br /&gt;
\begin{array}{c|c}&lt;br /&gt;
\begin{array}{ccc} 0  \\ &amp;amp; 0 \\ &amp;amp;&amp;amp; 0\end{array}&lt;br /&gt;
\\ \hline &amp;amp; \begin{array}{cc} 3 \\ &amp;amp; -3 \end{array}&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)x_2 +&lt;br /&gt;
\left(&lt;br /&gt;
\begin{array}{c|c}&lt;br /&gt;
\begin{array}{ccc} 2 &amp;amp; 0 &amp;amp;-1 \\ &amp;amp; 2 &amp;amp; 0 \\ &amp;amp;&amp;amp; 2\end{array}&lt;br /&gt;
\\ \hline &amp;amp; \begin{array}{cc} 0 \\ &amp;amp; 0 \end{array}&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)x_3  \preceq 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;LMI&amp;#039;&amp;#039; structure could then be initialized with the following commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%  Constraint 1&lt;br /&gt;
&amp;gt;&amp;gt; LMI(1,1).Q0 = [];&lt;br /&gt;
&amp;gt;&amp;gt; LMI(1,1).Q  = [2 -1  0 ; ...&lt;br /&gt;
                  0  2  0 ; ...&lt;br /&gt;
                  0  0  2];&lt;br /&gt;
&amp;gt;&amp;gt; LMI(1,2).Q  = [];&lt;br /&gt;
&amp;gt;&amp;gt; LMI(1,3).Q  = [2  0 -1 ; ...&lt;br /&gt;
                  0  2  0 ; ...&lt;br /&gt;
                  0  0  2];&lt;br /&gt;
&lt;br /&gt;
%  Constraint 2, diagonal matrices only&lt;br /&gt;
&amp;gt;&amp;gt; LMI(2,1).Q0 = diag( [0, 1] );&lt;br /&gt;
&amp;gt;&amp;gt; LMI(2,1).Q  = diag( [1,-1] );&lt;br /&gt;
&amp;gt;&amp;gt; LMI(2,2).Q  = diag( [3,-3] );&lt;br /&gt;
&amp;gt;&amp;gt; LMI(2,3).Q  = [ ];&lt;br /&gt;
&lt;br /&gt;
%  Use LMI in call to sdpAssign:&lt;br /&gt;
&amp;gt;&amp;gt; Prob=sdpAssign(c,LMI,...)&lt;br /&gt;
&lt;br /&gt;
%  ... or set directly into Prob.PENSDP.LMI field:&lt;br /&gt;
&amp;gt;&amp;gt; Prob.PENSDP.LMI = LMI;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some points of interest:&lt;br /&gt;
&lt;br /&gt;
*The &amp;#039;&amp;#039;LMI&amp;#039;&amp;#039; structure must  be of correct  size. This is important  if a LMI constraint  has zero matrices  for the highest numbered variables. If the above example had zero coefficient matrices for &amp;#039;&amp;#039;x&amp;#039;&amp;#039;3 , the user would have to set LMI(1,3).Q = [] explicitly, so that the &amp;#039;&amp;#039;LMI &amp;#039;&amp;#039;structure array is really 2 &amp;#039;&amp;#039;× &amp;#039;&amp;#039;3. (LMI(2,3).Q would automatically become empty in this case, unless set otherwise  by the user).&lt;br /&gt;
&lt;br /&gt;
*MATLAB sparse format is allowed and encouraged.&lt;br /&gt;
&lt;br /&gt;
*Only the upper triangular part of each matrix is used (symmetry is assumed).&lt;br /&gt;
&lt;br /&gt;
Input in Sparse SDPA Format is handled by the conversion routine &amp;#039;&amp;#039;sdpa2pen&amp;#039;&amp;#039;.  For example, the problem defined in &amp;#039;&amp;#039;tomlab/examples/arch0.dat-s &amp;#039;&amp;#039;can be solved using the following statements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt; p = sdpa2pen(&amp;#039;arch0.dat-s&amp;#039;)&lt;br /&gt;
  p =&lt;br /&gt;
vars: 174&lt;br /&gt;
fobj: [1x174 double]&lt;br /&gt;
constr: 174&lt;br /&gt;
ci: [1x174 double]&lt;br /&gt;
bi_dim: [1x174 double]&lt;br /&gt;
bi_idx: [1x174 double]&lt;br /&gt;
bi_val: [1x174 double]&lt;br /&gt;
mconstr: 1&lt;br /&gt;
ai_dim: 175&lt;br /&gt;
ai_row: [1x2874 double]&lt;br /&gt;
ai_col: [1x2874 double]&lt;br /&gt;
ai_val: [1x2874 double]&lt;br /&gt;
msizes: 161&lt;br /&gt;
ai_idx: [175x1 double]&lt;br /&gt;
ai_nzs: [175x1 double]&lt;br /&gt;
x0: [1x174 double]&lt;br /&gt;
ioptions: 0&lt;br /&gt;
foptions: []&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt; Prob   = sdpAssign(p);          % Can call sdpAssign with only &amp;#039;p&amp;#039; structure&lt;br /&gt;
&amp;gt;&amp;gt; Result = tomRun(&amp;#039;pensdp&amp;#039;,Prob); % Call tomRun to solve problem&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==PENSDP==&lt;br /&gt;
&lt;br /&gt;
TOMLAB /PENSDP was developed in co-operation with PENOPT GbR. The following pages describe the solvers and the feasibility checks.&lt;br /&gt;
&lt;br /&gt;
===penfeas_sdp===&lt;br /&gt;
&lt;br /&gt;
====Purpose====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;penfeas_sdp &amp;#039;&amp;#039;checks the feasibility of a system of linear matrix inequalities (LMI):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
A_0^i + \Sum{k=1}{n} A_{k}^{i} x_{k} \preccurlyeq 0, \qquad i=1,\ldots,m&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with symmetric matrices &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
A_{k}^{i} \in \RR^{d_l \times d_l}, \, k=1,\ldots,n, i=1,\ldots,m&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
x \in \RR^{n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Calling Syntax====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ifeas, feas, xfeas] = penfeas sdp(p, options)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Description of Inputs====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Input||Description&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;p&amp;#039;&amp;#039;||PENSDP format structure, e.g. from &amp;#039;&amp;#039;sdpa2pen&amp;#039;&amp;#039;.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;options&amp;#039;&amp;#039;||Optional 2 &amp;#039;&amp;#039;× &amp;#039;&amp;#039;1 vector. May be omitted, in which case the defaults below are used.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;options(1)&amp;#039;&amp;#039;||Output level of PENSDP solver. Default = 0.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;options(2)&amp;#039;&amp;#039;||Upper bound on  &amp;#039;&amp;#039;x  8 &amp;#039;&amp;#039;. Default = 1000.&lt;br /&gt;
&lt;br /&gt;
If &amp;#039;&amp;#039;&amp;lt; &amp;#039;&amp;#039;0, no box bounds are applied.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Description of Outputs====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Output||Description&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;ifeas&amp;#039;&amp;#039;||Feasibility of the system:&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|0||System is strictly feasible&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|1||System is feasible but not necessarily strictly feasible&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|-1||System is probably infeasible&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;feas&amp;#039;&amp;#039;||Value of the minimized maximal eigenvalue of LMI.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;xfeas&amp;#039;&amp;#039;||Feasible point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Algorithm====&lt;br /&gt;
&lt;br /&gt;
The feasibility of the system of LMI&amp;#039;s is checked by solving the following &amp;#039;&amp;#039;&amp;#039;sdp &amp;#039;&amp;#039;&amp;#039;problem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{array}{ccccccl}&lt;br /&gt;
\min\limits_{x\in\RR^{n},\lambda\in\RR} &amp;amp;&lt;br /&gt;
\multicolumn{6}{l}{f(x,\lambda) = \lambda} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{array}{ccccccl}&lt;br /&gt;
\mbox{s.t.} &amp;amp; - \xbound &amp;amp; \leq &amp;amp; x &amp;amp; \leq &amp;amp; \xbound \\&lt;br /&gt;
&amp;amp; \multicolumn{5}{l}{A_0^i + \Sum{k=1}{n} A_{k}^{i} x_{k}&lt;br /&gt;
\preccurlyeq \lambda I_{n \times n},} &amp;amp; i=1,\ldots,m \\&lt;br /&gt;
\end{array}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;#039;&amp;#039;xbound&amp;#039;&amp;#039; is taken from input argument &amp;#039;&amp;#039;options(2)&amp;#039;&amp;#039;, or &amp;lt;math&amp;gt;\infty if \VAR{options(2)} &amp;lt;0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;math&amp;gt;\lambda &amp;lt; 0&amp;lt;/math&amp;gt;, the system is strictly feasible; when &amp;#039;&amp;#039;? &amp;#039;&amp;#039;= 0, the system is feasible but has no interior point.  &lt;br /&gt;
&lt;br /&gt;
When &amp;lt;math&amp;gt;\lambda=0&amp;lt;/math&amp;gt; for any &amp;lt;math&amp;gt;x_{bound}&amp;lt;/math&amp;gt;, the system is infeasible.&lt;br /&gt;
&lt;br /&gt;
In practice, the conditions  on feasibility  are as follows: &lt;br /&gt;
&amp;lt;math&amp;gt;\lambda &amp;lt; -10^{-6}&amp;lt;/math&amp;gt;  means  strict  feasibility,  &lt;br /&gt;
&amp;lt;math&amp;gt;|\lambda|&amp;lt;10^{-6}&amp;lt;/math&amp;gt; means feasibility (not strict) and &lt;br /&gt;
&amp;lt;math&amp;gt;\lambda &amp;gt; 10^{-6}&amp;lt;/math&amp;gt; indicates infeasibility.  &lt;br /&gt;
&lt;br /&gt;
The user can decide by the actual value of the output parameter &amp;#039;&amp;#039;feas &amp;#039;&amp;#039;(including the optimal &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
For the case when the LMI system is unbounded, we have to add artificial bounds on &amp;#039;&amp;#039;x&amp;#039;&amp;#039;, otherwise PENSDP might diverge.  Of course, it may happen that the feasible point lies outside these bounds. In this case &amp;#039;&amp;#039;penfeas  sdp &amp;#039;&amp;#039;claims infeasibility,  although the system is  actually feasible. When in doubts, the  user  may try  to gradually increase &amp;#039;&amp;#039;x&amp;#039;&amp;#039;bound  (parameter &amp;#039;&amp;#039;options(2)&amp;#039;&amp;#039;).  On the other hand, for very ill-conditioned and unbounded systems, the default bound 1000 may be too large and PENSDP may not converge. In this case,  the  user is advised to decrease parameter &amp;#039;&amp;#039;options(2) &amp;#039;&amp;#039;to a smaller number (100-1).&lt;br /&gt;
&lt;br /&gt;
====M-files Used====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;pen.m&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
====MEX-files Used====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;pensdp&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
====See Also====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;penfeas bmi.m&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
===pensdpTL===&lt;br /&gt;
&lt;br /&gt;
====Purpose====&lt;br /&gt;
&lt;br /&gt;
Solve (linear) semi-definite programming problems.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;pensdpTL  &amp;#039;&amp;#039;solves problems of the form&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{array}{ccccccl}&lt;br /&gt;
\min\limits_{x} &amp;amp; \multicolumn{5}{l}{f(x) = c^{T} x} &amp;amp; \\&lt;br /&gt;
\\&lt;br /&gt;
s/t &amp;amp; x_L &amp;amp; \leq &amp;amp; x  &amp;amp; \leq &amp;amp; x_U &amp;amp; \\&lt;br /&gt;
{}  &amp;amp; b_L &amp;amp; \leq &amp;amp; Ax &amp;amp; \leq &amp;amp; b_U &amp;amp; \\&lt;br /&gt;
\\&lt;br /&gt;
&amp;amp; \multicolumn{3}{l}{Q^{(0)}_i + \sum_{k=1}^{n}  Q^{(i)}_k x_k}&lt;br /&gt;
&amp;amp; \preceq &amp;amp; 0, &amp;amp;  k=1,2,\ldots,m_{LMI} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;x,x_L,x_U \in \Rdim{n},\, A \in \Rdim{m_l \times n},\, b_L,b_U&lt;br /&gt;
\in \Rdim{m_l}&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;Q^{(i)}_k&amp;lt;/math&amp;gt; are sparse or dense symmetric matrices. The matrix sizes may vary between different linear matrix inequalities (&amp;#039;&amp;#039;LMI&amp;#039;&amp;#039;) but must be the same in each particular constraint.&lt;br /&gt;
&lt;br /&gt;
====Calling Syntax====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Result = tomRun(&amp;#039;pensdp&amp;#039;,Prob,...)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Description of Inputs====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Prob	&amp;#039;&amp;#039;Problem description structure. The following fields are used:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Input||Description&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;QP.c&amp;#039;&amp;#039;||Vector with coefficients for linear objective function.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;A 	&amp;#039;&amp;#039;||Linear constraints matrix.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;b_L 	&amp;#039;&amp;#039;||Lower bound for linear constraints.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;b_U 	&amp;#039;&amp;#039;||Upper bound for linear constraints.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;x_L 	&amp;#039;&amp;#039;||Lower bound on variables.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;x_U 	&amp;#039;&amp;#039;||Upper bound on variables.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;x_0	&amp;#039;&amp;#039;||Starting point.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;PriLevOpt	 &amp;#039;&amp;#039;||Print level in &amp;#039;&amp;#039;pensdpTL &amp;#039;&amp;#039;and MEX  interface.  The print level in the solver is controlled by &amp;#039;&amp;#039;PENOPT.ioptions(4)&amp;#039;&amp;#039;.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;PENOPT 	&amp;#039;&amp;#039;||Structure with special fields for SDP parameters. Fields used are:&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;LMI 	&amp;#039;&amp;#039;||Structure array with matrices for the linear matrix inequalities.  See &amp;#039;&amp;#039;Examples&amp;#039;&amp;#039; on page 17 for a discussion of how to set this correctly.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;ioptions	&amp;#039;&amp;#039;||8 &amp;#039;&amp;#039;× &amp;#039;&amp;#039;1 vector with options, defaults in ().  Any element set to a value less than zero will be replaced by a default value, in some cases fetched  from standard Tomlab parameters.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;ioptions(1) 	&amp;#039;&amp;#039;||0/1: use default/user defined values for options.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;ioptions(2) 	&amp;#039;&amp;#039;||Maximum  number  of iterations  for  overall  algorithm  (50).	If  not  given,&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Prob.optParam.MaxIter &amp;#039;&amp;#039;is1u5sed.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;ioptions(3)&amp;#039;&amp;#039;||Maximum number of iterations in unconstrained  optimization (100).  If not given, &amp;#039;&amp;#039;Prob.optParam.MinorIter &amp;#039;&amp;#039;is used.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;ioptions(4)&amp;#039;&amp;#039;||Output  level:  0/(1)/2/3 = silent/summary/brief/full. Tomlab  parameter: &amp;#039;&amp;#039;Prob.PriLevOpt&amp;#039;&amp;#039;.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;ioptions(5)&amp;#039;&amp;#039;||(0)/1:  Check density of Hessian / Assume dense.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;ioptions(6)&amp;#039;&amp;#039;||(0)/1:  (Do not) use linesearch  in unconstrained minimization. &amp;#039;&amp;#039;ioptions(7) 	&amp;#039;&amp;#039;(0)/1:  (Do not) write solution vector to output file. &amp;#039;&amp;#039;ioptions(8)	&amp;#039;&amp;#039;(0)/1:  (Do not) write computed multipliers to output file.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;foptions&amp;#039;&amp;#039;||7 &amp;#039;&amp;#039;× &amp;#039;&amp;#039;1 vector with optimization parameters, defaults in ():&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;foptions(1)&amp;#039;&amp;#039;||Scaling factor linear constraints; must be positive.  (1.0).&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;foptions(2)&amp;#039;&amp;#039;||Restriction for multiplier update; linear constraints (0.7).&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;foptions(3)&amp;#039;&amp;#039;||Restriction for multiplier update; matrix constraints (0.1).&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;foptions(4)&amp;#039;&amp;#039;||Stopping criterium for overall algorithm (10&amp;lt;sup&amp;gt;-7&amp;lt;/sup&amp;gt;). Tomlab equivalent: &amp;#039;&amp;#039;Prob.optParam.eps_f&amp;#039;&amp;#039;.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;foptions(5)&amp;#039;&amp;#039;||Lower bound for the penalty parameters (10&amp;lt;sup&amp;gt;-6&amp;lt;/sup&amp;gt;).&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;foptions(6)&amp;#039;&amp;#039;||Lower bound for the multipliers (10&amp;lt;sup&amp;gt;-14&amp;lt;/sup&amp;gt;).&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;foptions(7)&amp;#039;&amp;#039;||Stopping criterium for unconstrained minimization (10&amp;lt;sup&amp;gt;-2&amp;lt;/sup&amp;gt;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Description of Outputs====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Result	&amp;#039;&amp;#039;Structure with result from optimization. The following fields are changed:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Output||Description&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;x_k&amp;#039;&amp;#039;||Optimal point.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;f_k&amp;#039;&amp;#039;||Function value at optimum.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;g_k&amp;#039;&amp;#039;||Gradient value at optimum, &amp;#039;&amp;#039;c&amp;#039;&amp;#039;.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;v_k&amp;#039;&amp;#039;||Lagrange multipliers.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;x_0&amp;#039;&amp;#039;||Starting point.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;f_0&amp;#039;&amp;#039;||Function value at start.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;xState&amp;#039;&amp;#039;||State of each variable, described in the TOMLAB User&amp;#039;s Guide.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;Iter&amp;#039;&amp;#039;||Number of iterations.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;ExitFlag&amp;#039;&amp;#039;||0: OK.&lt;br /&gt;
&lt;br /&gt;
1: Maximal number of iterations reached.&lt;br /&gt;
&lt;br /&gt;
2: Unbounded feasible region.&lt;br /&gt;
&lt;br /&gt;
3: Rank problems.  Can not find any solution point.&lt;br /&gt;
&lt;br /&gt;
4: Illegal &amp;#039;&amp;#039;x 0&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
5: No feasible point &amp;#039;&amp;#039;x 0 &amp;#039;&amp;#039;found.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;Inform&amp;#039;&amp;#039;||If &amp;#039;&amp;#039;ExitF lag &amp;gt; &amp;#039;&amp;#039;0, &amp;#039;&amp;#039;I nf orm &amp;#039;&amp;#039;= &amp;#039;&amp;#039;ExitF lag&amp;#039;&amp;#039;.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;QP.B&amp;#039;&amp;#039;||Optimal active set.  See input variable &amp;#039;&amp;#039;QP.B&amp;#039;&amp;#039;.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;Solver&amp;#039;&amp;#039;||Solver used.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;SolverAlgorithm&amp;#039;&amp;#039;||Solver algorithm used.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&amp;#039;&amp;#039;FuncEv&amp;#039;&amp;#039;||Number of function evaluations.  Equal to &amp;#039;&amp;#039;Iter&amp;#039;&amp;#039;. &amp;#039;&amp;#039;ConstrEv	&amp;#039;&amp;#039;Number of constraint evaluations.  Equal to &amp;#039;&amp;#039;Iter&amp;#039;&amp;#039;. &amp;#039;&amp;#039;Prob	&amp;#039;&amp;#039;Problem structure used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;pensdp &amp;#039;&amp;#039;implements a penalty algorithm based on the PBM method of Ben-Tal and Zibulevsky.  It is possible to give input data in three different formats:&lt;br /&gt;
&lt;br /&gt;
*Standard  sparse SPDA format&lt;br /&gt;
*PENSDP Structural format&lt;br /&gt;
*Tomlab Quick format&lt;br /&gt;
&lt;br /&gt;
In all three cases, problem setup is done via &amp;#039;&amp;#039;sdpAssign&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
====See Also====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;sdpAssign.m&amp;#039;&amp;#039;, &amp;#039;&amp;#039;sdpa2pen.m&amp;#039;&amp;#039;, &amp;#039;&amp;#039;sdpDemo.m&amp;#039;&amp;#039;, &amp;#039;&amp;#039;tomlab/docs/pensdp.pdf&amp;#039;&amp;#039;,  &amp;#039;&amp;#039;penfeas sdp.m&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
====Examples====&lt;br /&gt;
&lt;br /&gt;
Setting the LMI constraints is best described by an example. Assume 3 variables &amp;lt;math&amp;gt;x=(x_1,x_2,x_3)&amp;lt;/math&amp;gt; and 2 linear matrix inequalities of sizes 3 &amp;#039;&amp;#039;× &amp;#039;&amp;#039;3 and 2 &amp;#039;&amp;#039;× &amp;#039;&amp;#039;2 respectively, here given on block-diagonal form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left(&lt;br /&gt;
\begin{array}{c|c}&lt;br /&gt;
\begin{array}{ccc} 0  \\ &amp;amp; 0 \\ &amp;amp;&amp;amp; 0\end{array}&lt;br /&gt;
\\ \hline&lt;br /&gt;
&amp;amp; \begin{array}{cc} 0 \\ &amp;amp; 1 \end{array}&lt;br /&gt;
\end{array}&lt;br /&gt;
\right) +&lt;br /&gt;
\left(&lt;br /&gt;
\begin{array}{c|c}&lt;br /&gt;
\begin{array}{ccc} 2 &amp;amp; -1 &amp;amp; 0 \\ &amp;amp; 2 &amp;amp; 0 \\ &amp;amp;&amp;amp; 2\end{array}&lt;br /&gt;
\\ \hline &amp;amp; \begin{array}{cc} 1 \\ &amp;amp; -1 \end{array}&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)x_1&lt;br /&gt;
\\ +&lt;br /&gt;
\left(&lt;br /&gt;
\begin{array}{c|c}&lt;br /&gt;
\begin{array}{ccc} 0  \\ &amp;amp; 0 \\ &amp;amp;&amp;amp; 0\end{array}&lt;br /&gt;
\\ \hline &amp;amp; \begin{array}{cc} 3 \\ &amp;amp; -3 \end{array}&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)x_2 +&lt;br /&gt;
\left(&lt;br /&gt;
\begin{array}{c|c}&lt;br /&gt;
\begin{array}{ccc} 2 &amp;amp; 0 &amp;amp;-1 \\ &amp;amp; 2 &amp;amp; 0 \\ &amp;amp;&amp;amp; 2\end{array}&lt;br /&gt;
\\ \hline &amp;amp; \begin{array}{cc} 0 \\ &amp;amp; 0 \end{array}&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)x_3  \preceq 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;LMI&amp;#039;&amp;#039; structure should then be initialized with the following commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%  Constraint 1&lt;br /&gt;
&amp;gt;&amp;gt; LMI(1,1).Q0 = [];&lt;br /&gt;
&amp;gt;&amp;gt; LMI(1,1).Q  = [2 -1  0 ; ...&lt;br /&gt;
                  0  2  0 ; ...&lt;br /&gt;
                  0  0  2];&lt;br /&gt;
&amp;gt;&amp;gt; LMI(1,2).Q  = [];&lt;br /&gt;
&amp;gt;&amp;gt; LMI(1,3).Q  = [2  0 -1 ; ...&lt;br /&gt;
                  0  2  0 ; ...&lt;br /&gt;
                  0  0  2];&lt;br /&gt;
&lt;br /&gt;
%  Constraint 2, diagonal matrices only&lt;br /&gt;
&amp;gt;&amp;gt; LMI(2,1).Q0 = diag( [0, 1] );&lt;br /&gt;
&amp;gt;&amp;gt; LMI(2,1).Q  = diag( [1,-1] );&lt;br /&gt;
&amp;gt;&amp;gt; LMI(2,2).Q  = diag( [3,-3] );&lt;br /&gt;
&amp;gt;&amp;gt; LMI(2,3).Q  = [ ];&lt;br /&gt;
&lt;br /&gt;
%  Use LMI in call to sdpAssign:&lt;br /&gt;
&amp;gt;&amp;gt; Prob=sdpAssign(c,LMI,...)&lt;br /&gt;
&lt;br /&gt;
%  ... or set directly into Prob.PENSDP.LMI field:&lt;br /&gt;
&amp;gt;&amp;gt; Prob.PENSDP.LMI = LMI;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some points of interest:&lt;br /&gt;
&lt;br /&gt;
*The &amp;#039;&amp;#039;LMI&amp;#039;&amp;#039; structure must  be of correct  size. This is important  if a LMI constraint  has zero matrices  for the highest numbered variables. If the above example had zero coefficient matrices for &amp;#039;&amp;#039;x&amp;#039;&amp;#039;3 , the user would have to set LMI(1,3).Q = [] explicitly, so that the &amp;#039;&amp;#039;LMI &amp;#039;&amp;#039;structure array is really 2 &amp;#039;&amp;#039;× &amp;#039;&amp;#039;3. (LMI(2,3).Q would automatically become empty in this case, unless set otherwise  by the user).&lt;br /&gt;
*MATLAB sparse format is allowed and encouraged.&lt;br /&gt;
*Only the upper triangular part of each matrix is used (symmetry is assumed).&lt;br /&gt;
&lt;br /&gt;
Input in Sparse SDPA Format is handled by the conversion routine &amp;#039;&amp;#039;sdpa2pen&amp;#039;&amp;#039;.  For example, the problem defined in &amp;#039;&amp;#039;tomlab/examples/arch0.dat-s &amp;#039;&amp;#039;can be solved using the following statements:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt; p = sdpa2pen(&amp;#039;arch0.dat-s&amp;#039;)&lt;br /&gt;
  p =&lt;br /&gt;
     vars: 174&lt;br /&gt;
     fobj: [1x174 double]&lt;br /&gt;
     constr: 174&lt;br /&gt;
     ci: [1x174 double]&lt;br /&gt;
     bi_dim: [1x174 double]&lt;br /&gt;
     bi_idx: [1x174 double]&lt;br /&gt;
     bi_val: [1x174 double]&lt;br /&gt;
     mconstr: 1&lt;br /&gt;
     ai_dim: 175&lt;br /&gt;
     ai_row: [1x2874 double]&lt;br /&gt;
     ai_col: [1x2874 double]&lt;br /&gt;
     ai_val: [1x2874 double]&lt;br /&gt;
     msizes: 161&lt;br /&gt;
     ai_idx: [175x1 double]&lt;br /&gt;
     ai_nzs: [175x1 double]&lt;br /&gt;
     x0: [1x174 double]&lt;br /&gt;
     ioptions: 0&lt;br /&gt;
     foptions: []&lt;br /&gt;
&lt;br /&gt;
  &amp;gt;&amp;gt; Prob=sdpAssign(p);            % Can call sdpAssign with only &amp;#039;p&amp;#039; structure&lt;br /&gt;
  &amp;gt;&amp;gt; Result=tomRun(&amp;#039;pensdp&amp;#039;,Prob); % Call tomRun to solve problem&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Elias</name></author>
	</entry>
</feed>