Calculator

2024-05-13 18:48
文章标签 calculator

本文主要是介绍Calculator,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



合并了《Calculator V1.8.6.0(2013-10-31 10:33)》、《山寨版Matlab——Calculator V5.5beta(5.5版本更新 By2013/11/21 )2013-12-4 22:37》这几篇QQ日志。

如果A是一个m*n的矩阵,而B是一个p*q的矩阵,克罗内克积AⓧB则是一个mp*nq的分块矩阵。
矩阵的克罗内克积对应于线性映射的抽象张量积。并矢积是克罗内克积的特殊情况。克罗内克积是张量积的特殊形式,因此满足双线性与结合律,不符合交换律。
3行2列矩阵a与2行2列矩阵b的克罗内克积为6行4列的矩阵c
2行2列矩阵a与2行2列矩阵的克罗内克积为4行4列的矩阵c
如果A(m行n列),B(p行q列),C(n行c列),D(q行d列)是4个矩阵,且矩阵乘积AC(m行c列)和BD(p行d列)存在,那么:(AⓧB) (CⓧD)=
ACⓧBD=mp行cd列的矩阵=mp行nq列矩阵乘以nq行cd列矩阵
混合积的性质:它混合了通常的矩阵乘积和克罗内克积
AⓧB是可逆的当且仅当A(m行m列)和B(p行p列)是可逆的,其逆矩阵为:(AⓧB)^(-1)=A^(-1)ⓧB^(-1) =(mp行mp列)
如果A是n行n列矩阵,B是m行m列矩阵,I_k表示k行k列单位矩阵,那么我们可以定义克罗内克和⊕为:A⊕B=AⓧI_m+I_nⓧB=nm行nm列的矩阵
克罗内克积转置运算符合分配律:
如果A(m行n列),B(p行q列),(AⓧB)^(T)=A^(T)ⓧB^(T)=(mp行nq列)^(T)=nq行mp列的矩阵
rank(AⓧB)=rank(A)+rank(B)
功能:对矩阵进行Kronecker张量积.
格式:Kron(a,b)
说明:如果a是m*n的,b是p*q的,则kron(a,b)是大小(m*p)*(n*q)的矩阵
例子:
a=[1 2
3 1]
a =
[ 1.00000000000000    2.00000000000000
  3.00000000000000    1.00000000000000 ]
b=[0 3
2 1]
b =
[ 0.00000000000000    3.00000000000000
  2.00000000000000    1.00000000000000 ]
c=Kron(a,b)
c =
[ 0.00000000000000    3.00000000000000    0.00000000000000    6.00000000000000
  2.00000000000000    1.00000000000000    4.00000000000000    2.00000000000000
  0.00000000000000    9.00000000000000    0.00000000000000    3.00000000000000
  6.00000000000000    3.00000000000000    2.00000000000000    1.00000000000000 ]

a=[1
2
3]
a =
[ 1.00000000000000
  2.00000000000000
  3.00000000000000 ]
b=[4 5 6]
b =
[ 4.00000000000000    5.00000000000000    6.00000000000000 ]
c=Kron(a,b)
c =
[ 4.00000000000000    5.00000000000000    6.00000000000000
  8.00000000000000    10.0000000000000    12.0000000000000
  12.0000000000000    15.0000000000000    18.0000000000000 ]
d=mul(a,b)
d =
[ 4.00000000000000    5.00000000000000    6.00000000000000
  8.00000000000000    10.0000000000000    12.0000000000000
  12.0000000000000    15.0000000000000    18.0000000000000 ]

功能:求矩阵的2范数.谱范数.
格式:Cond2(a)
说明:a是任意维数的矩阵.本函数执行原理是,返回对称矩阵a'*a的最大特征值的平方根.其中a'是a的转置.
a=[1 -2
-3 4]
a =
[ 1.00000000000000   -2.00000000000000
 -3.00000000000000    4.00000000000000 ]
cond2(a)
ans =
[ 5.46498570421904 ]
矩阵A的2范数就是 A的转置乘以A矩阵特征根 最大值的开根号
如A={ 1 -2
-3 4 }
那么A的2范数就是msgbox (15+221^0.5)^0.5 '=5.46498570421904


范数是一种实泛函,满足非负性、齐次性、三角不等式
要理解矩阵的算子范数,首先要理解向量范数的内涵。矩阵的算子范数,是由向量范数导出的。
范数理论是矩阵分析的基础,度量向量之间的距离、求极限等都会用到范数,范数还在机器学习、模式识别领域有着广泛的应用。
矩阵范数反映了线性映射把一个向量映射为另一个向量,向量的"长度"缩放的比例。
由矩阵算子范数的定义形式可知,矩阵A把向量x映射成向量Ax,取其在向量x范数为1所构成的闭集下的向量Ax范数最大值作为矩阵A的范数,即矩阵对向量缩放的比例的上界,矩阵的算子范数是相容的。由几何意义可知,矩阵的算子范数必然大于等于矩阵谱半径(最大特征值的绝对值),矩阵算子范数对应一个取到向量Ax范数最大时的向量x方向,谱半径对应最大特征值下的特征向量的方向。而矩阵的奇异值分解SVD,分解成左右各一个酉阵,和拟对角矩阵,可以理解为对向量先作旋转、再缩放、最后再旋转,奇异值,就是缩放的比例,最大奇异值就是谱半径的推广,所以,矩阵算子范数大于等于矩阵的最大奇异值,酉阵在此算子范数的意义下,范数大于等于1。此外,不同的矩阵范数是等价的。

功能:方阵求逆,其采用的是LU分解算法
格式:inv(a)//a为方阵变量
a=[0.2368 0.2471 0.2568 1.2671
1.1161 0.1254 0.1397 0.149
0.1582 1.1675 0.1768 0.1871
0.1968 0.2071 1.2168 0.2271]
a =
[ 0.23680000000000     0.24710000000000     0.25680000000000     1.26710000000000
  1.11610000000000     0.12540000000000     0.13970000000000     0.14900000000000
  0.15820000000000     1.16750000000000     0.17680000000000     0.18710000000000
  0.19680000000000     0.20710000000000     1.21680000000000     0.22710000000000 ]
b=inv(a)
b =
[ -0.0859207504780      0.93794426823404     -0.0684372042645      -0.0796077151837
  -0.1055899132073      -0.0885243235004      0.90598255638825     -0.0991908105397
  -0.1270733117900      -0.1113511370480      -0.1169667064884      0.87842529094384
  0.85160581464323     -0.1354556628418      -0.1401825503018      -0.1438074804470 ]
ublas求矩阵的逆的输出及源代码:
mtxA矩阵[4,4]((0.2368,0.2471,0.2568,1.2671),(1.1161,0.1254,0.1397,0.149),(0.1582
,1.1675,0.1768,0.1871),(0.1968,0.2071,1.2168,0.2271))
mtxA逆矩阵[4,4]((-0.0859208,0.937944,-0.0684372,-0.0796077),(-0.10559,-0.0885243
,0.905983,-0.0991908),(-0.127073,-0.111351,-0.116967,0.878425),(0.851606,-0.1354
56,-0.140183,-0.143807))
mtxA逆矩阵的逆矩阵 [4,4]((0.2368,0.2471,0.2568,1.2671),(1.1161,0.1254,0.1397,0.1
49),(0.1582,1.1675,0.1768,0.1871),(0.1968,0.2071,1.2168,0.2271))
// REMEMBER to update "lu.hpp" header includes from boost-CVS
#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/vector_proxy.hpp>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/triangular.hpp>
#include <boost/numeric/ublas/lu.hpp>
#include <boost/numeric/ublas/io.hpp>
#include <boost/numeric/ublas/vector.hpp>
#include <iostream>
namespace ublas = boost::numeric::ublas;
//! \brief 求矩阵的逆
//! \param input[in] 被求矩阵
//! \param inverse[out] 逆矩阵
/* Matrix inversion routine.
Uses lu_factorize and lu_substitute in uBLAS to invert a matrix */
template<class T>
bool InvertMatrix (const ublas::matrix<T>& input, ublas::matrix<T>& inverse) {
       using namespace boost::numeric::ublas;
       typedef permutation_matrix<std::size_t> pmatrix;
       // create a working copy of the input
       matrix<T> A(input);
       // create a permutation matrix for the LU-factorization
       pmatrix pm(A.size1());
       // perform LU-factorization
       int res = lu_factorize(A,pm);
       if( res != 0 ) return false;
       // create identity matrix of "inverse"
       inverse.assign(ublas::identity_matrix<T>(A.size1()));
       // backsubstitute to get the inverse
       lu_substitute(A, pm, inverse);
       return true;
}

int main()
{
       namespace ublas = boost::numeric::ublas;
       ublas::matrix<double> mTmp(4,4);
/*
    ' 原矩阵
    mtxA(1, 1) = 0.2368:    mtxA(1, 2) = 0.2471:    mtxA(1, 3) = 0.2568:    mtxA(1, 4) = 1.2671
    mtxA(2, 1) = 1.1161:    mtxA(2, 2) = 0.1254:    mtxA(2, 3) = 0.1397:    mtxA(2, 4) = 0.149
    mtxA(3, 1) = 0.1582:    mtxA(3, 2) = 1.1675:    mtxA(3, 3) = 0.1768:    mtxA(3, 4) = 0.1871
    mtxA(4, 1) = 0.1968:    mtxA(4, 2) = 0.2071:    mtxA(4, 3) = 1.2168:    mtxA(4, 4) = 0.2271
*/
#if 1
        //! \brief 求逆矩阵
        ublas::matrix<double> mtxA(4,4), MAInv(4,4);      
  mtxA(0, 0) = 0.2368;    mtxA(0, 1) = 0.2471;    mtxA(0, 2) &

这篇关于Calculator的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/986528

相关文章

Basic Calculator 总结

Basic Calculator 思路:stack中间存数,遇见+,-都当符号位,push num或者-num进去;最后相加;重要的是如何处理括号,那么这里一种方法是用递归调用;count左右括号,如果为0,那么就是一个反括号的位置了,那么 //(      ) //j......i; substring(j + 1, i); 这题的通用解法,可以扩展到二三题; class Solutio

Basic Calculator

题意: 写一个简单的计算器,此计算器只有加法,减法及括号操作 分析: 开两个栈,一个村操作数,一个村操作符,其中+与-同级,当一个操作符要进栈时,判断操作符栈顶元素,若是同级,则让操作数栈出栈两个数,操作符栈出栈栈顶元素,然后将计算出的结果存入操作数栈,待进栈操作符进栈;当遇到左括号时,果断进栈,遇到右括号,则先计算括号中的结果,然后对应的左括号出栈; 最终使得操作符栈为空,计算出的结果即

Mediapipe 在RK3399PRO上的初探(二)(自定义Calculator)

PS:要转载请注明出处,本人版权所有。 PS: 这个只是基于《我自己》的理解, 如果和你的原则及想法相冲突,请谅解,勿喷。 环境说明 Ubuntu 18.04gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)RK3399PRO 板卡 前言   本文有一篇前置文章为《Mediapipe 在RK3399PRO上的初探(一)(编译、运行CPU和GPU

UVa 11549 Calculator Conundrum / floyd判圈算法

题意是输入n k 然后只能显示k的前n位 然后k等于前n位的平方如此反复 求最大出现的数字 可以用map 或者set 新学了一个floyd判圈算法 就是比如2个赛跑 第二个比第一个速度快1倍 圆形跑道可以追上第一个人 这里就另k1做一次next  k2做2次next 如果k1 == k2 就break  说明出现循环了 代码是书上的   #include <cstdio>#

UVA - 11549 Calculator Conundrum

题意:一个计算器只会显示n位数字,输入一个K,反复平方,溢出的时候只会显示前n位数字,求这样下去能得到的最大值是多少,显然这是会出现循环的时候,所以用到了Floyd判圈算法 #include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <set>

Qt xml学习之calculator-qml

1.功能说明:制作简易计算器 2.使用技术:qml,scxml 3.项目效果: 4.qml部分: import Calculator 1.0 //需要引用对应类的队友版本import QtQuick 2.12import QtQuick.Window 2.12import QtQuick.Controls 1.4import QtScxml 5.8 // 引入QScxmlStat

方便自己查对蓝牙设备类型 Class of Device (CoD) Calculator

http://www.ampedrftech.com/cod.htm http://blog.csdn.net/shichaog/article/details/53455169

利用栈/递归求解算术表达式 LeetCode 224. Basic Calculator

概括一句话就是: 遇到)或者优先级比即将读入元素低的符号,都要把栈弹出到不能再次弹出为止 符号和运算符可以分为两个栈  运算符的优先级   优先级运算符1括号()2负号-3乘方**4乘*,除/,求余%5加+,减-6小于<,小于等于<=,大于>,大于等于>=7等于==,不等于!=8逻辑与&&9逻辑或|| 大致的规律是,一元运算符 > 二元运算符 > 多元运算符。利用堆栈解析算术表达式的过程

Linux Mint (应用软件:Calculator)

我们在编程时,有时会对二进制或者十六进制数字进行计算,简单的数字口算就可以,复杂的数字就需要动笔了。要是能有一个计算二进制或者十六进制数字的计算器就好了。其实已经有这样的计算器了,只是以前没有发现而已,LinuxMint默认安装了一个名叫Calculator的计算器,它就具有这样的功能,接下来,我们看看如何使用该功能。 在开始菜单->附件中找到计算器,并且启动该程序,启动后的界面如下:

Front-End and Back-End Separated Calculator

文章目录 Introduction1.Personal Information2.PSP Table3.Planning and Executing Stages3.1 Frontend Design3.2Frontend codes3.3 Backend Design3.4 Backend codes4.Calculator Display Personal Learnings