matlab求AX=B???
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab求AX=B???相关的知识,希望对你有一定的参考价值。
A是一个3行5列的矩阵,X和B是一个向量,A和B已知,用matlab编写程序求解AX=B,代码怎么写?小弟刚学matlab,谢谢指教!
Matlab提供了两种除法运算:左除(\\)和右除(/)。
1。一般情况下,x=a\\b是方程a*x =b的解,而x=b/a是方程x*a=b的解。
例:a=[1 2 3; 4 2 6; 7 4 9],b=[4; 1; 2];
x=a\\b,则显示:x=-1.5000 2.0000 0.5000;
如果a为非奇异矩阵,则a\\b和b/a可通过a的逆矩阵与b阵得到:
a\\b = inv(a)*b;
b/a = b*inv(a);
2。数组除法:
A/B表示A中元素与B中元素对应相除。
MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言的编辑模式,代表了当今国际科学计算软件的先进水平。
参考技术A x=A\B=inv(A)*Bx=A\B是方程A*X =B的解,而X=B/A是方程X*A=B的解。
注意:(1)左除A\B必须保证矩阵A、B的行数相等;右除(/):A、B两矩阵的列数相等。
(2)A可逆 参考技术B A=[];
B=[];
X=A\B;
A,B后面的方括号内输入元素值即可求解 参考技术C
matlab里面的解释
参考技术D X=B/A参考教程:
Matlab提供了两种除法运算:左除(\)和右除(/)。一般情况下,x=a\b是方程a*x =b的解,而x=b/a是方程x*a=b的解。
例:a=[1 2 3; 4 2 6; 7 4 9]
b=[4; 1; 2];
x=a\b
则显示:x=
-1.5000
2.0000
0.5000
如果a为非奇异矩阵,则a\b和b/a可通过a的逆矩阵与b阵得到:
a\b = inv(a)*b
b/a = b*inv(a)
数组除法:
A./B表示A中元素与B中元素对应相除。
求解 Ax = b ,CUDA vs Matlab [关闭]
【中文标题】求解 Ax = b ,CUDA vs Matlab [关闭]【英文标题】:Solving Ax = b , CUDA vs Matlab [closed] 【发布时间】:2019-05-22 03:55:34 【问题描述】:我在 Matlab 上做了如下测试:
n = 10000;
A = rand(n,n);
b = rand(n, 1);
tic
y = A\b;
toc
在我的 Intel i7 gen 5 机器(12 核)上,结果约为 5 秒。
然后,我尝试使用 CUDA 9.2 示例 SDK 代码来做同样的事情(请参阅 cuSolverDn_LinearSolver.cpp)。令人惊讶的是,在我的 Nvidia 970GTX 上,我得到了大约 6.5 秒的时间来获得与上述相同问题大小的解决方案!
怎么了?我提到我的矩阵是对称的、正方形的,并且 b 只有 1 列。有没有更好的方法来使用 CUDA 解决这个问题?如果我要使用更新的 GPU,我应该期待更高的性能吗?
【问题讨论】:
A = rand(n,n);
如何产生对称矩阵,正如您在问题中所说的那样?
您是否以单精度或双精度进行了实验?顺便说一句,12 核 i7 是一台相当强大的机器。
尝试使用 Matlabs gpu funcionality,看看它有多快。如果它比 cpu 代码快,那么你当然可以做得更好,如果不是,那么好处可能会被开销所抵消
在 cpp 中我使它对称,而不是在 matlab 中。我正在使用双打。
【参考方案1】:
这是我用来测试的代码
n = 10000;
A = rand(n,n,'single');
b = rand(n, 1,'single');
tic
y = A\b;
toc
A = gpuArray(A);
b = gpuArray(b);
tic
y = A\b;
toc
这是结果
Elapsed time is 2.673490 seconds.
Elapsed time is 0.553348 seconds.
我在配备 GTX 1060 GPU 的 7700 4 核笔记本电脑上运行,因此计算能力与我认为的大致相同。正如您在这种情况下所看到的,GPU 运行得更快。最可能的因素是精度。 GPU只有单精度乘法器,而CPU有双精度乘法器。如果您必须在 GPU 上进行双精度乘法,则必须使用相当多的乘法器来执行相同的操作,从而大大降低您的速度。如果我改变它,我们现在得到的变量是双精度的:
Elapsed time is 5.784525 seconds.
Elapsed time is 5.398702 seconds.
虽然 GPU 在我的计算机上仍然更快,但重点仍然在于 CPU 和 GPU 现在更接近了。
【讨论】:
在 CPU 上看到double
的速度是 single
的一半很有趣。这表明瓶颈是从内存到 CPU 的数据传输,因为 CPU 使用与双浮点数相同的表示进行单浮点计算(对于现代 CPU,通常为 10 字节,长双精度)。
我知道,我也对此感到惊讶。问题是数据传输应该小得多,因为它只有 10000 个值。我们确定现代 CPU 没有单精度内核吗?它们都是双精度的吗?
SSE/AVX 向量单元每个周期计算的浮点数是双精度数的两倍。这可能是这些操作背后的优化 BLAS 级别使用的内容
“GPU 仅具有单精度乘法器”:自费米架构(大约 10 年前)以来,所有 NVIDIA GPU 都包含双精度算术单元。但是,双精度运算的吞吐量仅为单精度运算的 1/2 到 1/64,消费级 GPU(如询问者的 GPU)处于低端。
MATLAB 将英特尔 MKL 用于其 BLAS(和 LAPACK)实现,它肯定使用支持最高的向量指令集。以上是关于matlab求AX=B???的主要内容,如果未能解决你的问题,请参考以下文章