我正在编译并尝试在Private Sub crearRibbon()
Dim RibbonXml As DOMDocument60
Dim objRaizElem As IXMLDOMElement
Dim objRibbonElem As IXMLDOMElement
Dim objPestana As IXMLDOMElement
Dim objPestanas As IXMLDOMElement
Dim objGrupo As IXMLDOMElement
Dim objControl As IXMLDOMElement
Dim objRaizAtt As IXMLDOMAttribute
Dim objRibbonAtt As IXMLDOMAttribute
Dim objPestanaAtt As IXMLDOMAttribute
Dim objGrupoAtt As IXMLDOMAttribute
Dim objControlAtt As IXMLDOMAttribute
Dim strRibbon As String
Set RibbonXml = New DOMDocument60
'Raiz
Set objRaizElem = RibbonXml.createNode(1, "customUI", "http://schemas.microsoft.com/office/2006/01/customui")
RibbonXml.appendChild objRaizElem
'Ribbon
Set objRibbonElem = RibbonXml.createNode(1, "ribbons", "http://schemas.microsoft.com/office/2006/01/customui")
objRaizElem.appendChild objRibbonElem
Set objRibbonAtt = RibbonXml.createAttribute("startFromScratch")
objRibbonAtt.Text = ("True")
objRibbonElem.setAttributeNode objRibbonAtt
'Pestaña
Set objPestana = RibbonXml.createNode(1, "tabs", "http://schemas.microsoft.com/office/2006/01/customui")
objRibbonElem.appendChild objPestana
'Pestañas
Set objPestanas = RibbonXml.createNode(1, "tab", "http://schemas.microsoft.com/office/2006/01/customui")
Set objPestanas = RibbonXml.createElement("tab")
objPestana.appendChild objPestanas
Set objPestanaAtt = RibbonXml.createAttribute("id")
objPestanaAtt.Text = ("1")
objPestanas.setAttributeNode objPestanaAtt
Set objPestanaAtt = RibbonXml.createAttribute("label")
objPestanaAtt.Text = ("A Custom Tab")
objPestanas.setAttributeNode objPestanaAtt
Set objPestanaAtt = RibbonXml.createAttribute("visible")
objPestanaAtt.Text = ("true")
objPestanas.setAttributeNode objPestanaAtt
'Grupos
Set objGrupo = RibbonXml.createNode(1, "group", "http://schemas.microsoft.com/office/2006/01/customui")
'Set objGrupo = RibbonXml.createElement("group")
objPestanas.appendChild objGrupo
Set objGrupoAtt = RibbonXml.createAttribute("id")
objGrupoAtt.Text = ("dbCustomGroup")
objGrupo.setAttributeNode objGrupoAtt
Set objGrupoAtt = RibbonXml.createAttribute("label")
objGrupoAtt.Text = ("A Custom Group")
objGrupo.setAttributeNode objGrupoAtt
'Control
Set objControl = RibbonXml.createNode(1, "control", "http://schemas.microsoft.com/office/2006/01/customui")
'Set objControl = RibbonXml.createElement("control")
objGrupo.appendChild objControl
Set objControlAtt = RibbonXml.createAttribute("idMso")
objControlAtt.Text = ("Paste")
objControl.setAttributeNode objControlAtt
Set objControlAtt = RibbonXml.createAttribute("label")
objControlAtt.Text = ("Built-in Paste")
objControl.setAttributeNode objControlAtt
Set objControlAtt = RibbonXml.createAttribute("enabled")
objControlAtt.Text = ("true")
objControl.setAttributeNode objControlAtt
RibbonXml.Save ("miRibbon1.xml")
平台上使用UMfPackLU<SparseMatrix<>>
从Eigen 3.2.9
和UMFPACK v4.5
库运行TDM-GCC 5.1.0
例程。但我正在Win64
获得Appcrash
。
我需要实现的目标如下:
exception code c0000005
我在做什么(仅摘录)如下:
_ _ _ _
A = | P |, B = | R |, where P and Q are sparse and Z is 0 with 3 cols
| Q | | Z |
|_ _| |_ _|
X = A\B;
请注意#define num_t double
...
SparseMatrix<num_t,RowMajor> A(P.rows()+Q.rows(), P.cols());
A.topRows(P.rows()) = P;
A.bottomRows(Q.rows()) = Q;
Matrix<num_t, Dynamic, 3> B(P.rows()+Q.rows(), 3);
B.topLeftCorner(P.rows(), 3) = R;
B.bottomLeftCorner(Q.rows(), 3) = S;
UmfPackLU<SparseMatrix<num_t>> solver(A.transpose()*A);
auto AtB = A.transpose()*B;
X.col(0) = solver.solve(AtB.col(0)); // @@@ segmentation error here @@@
X.col(1) = solver.solve(AtB.col(1));
X.col(2) = solver.solve(AtB.col(2));
采用SparseMatrix<>
格式。
在使用RowMajor
进行调试时:我在标记为上述行的行中获得gdb
。
而不是Program received signal SIGSEGV, Segmentation fault.
,使用UmfPackLU<SparseMatrix<>>
解决,SimplicialLLT<SparseMatrix<>>
或SimplicialLDLT<SparseMatrix<>>
工作正常。
提前感谢您的帮助。
答案 0 :(得分:1)
这是Eigen 3.2.9的一个缺点,已经在3.3分支中修复了。它现在也在3.2分支中修改(changeset 1e7d97fea51d)。
您可以通过调用compute(...)
而不是构造函数来解决此问题:
UmfPackLU<SparseMatrix<num_t>> solver;
solver.compute(A.transpose()*A);
答案 1 :(得分:0)
请随时纠正/加强/确定我的答案。
我发现,我需要实例化一个明确的ColMajor
矩阵AtA
,然后再将其提供给求解器(RowMajor
不起作用),如下所示:
SparseMatrix<num_t, ColMajor> AtA = A.transpose()*A;
UmfPackLU<SparseMatrix<num_t>> solver(AtA);
由于调用Eigen
的{{1}} lazy evaluation
实施,这是否是一项要求?