Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 通过增加a的大小来测量求解线性系统Ax=b的计算复杂度_Algorithm_Matlab_Time Complexity - Fatal编程技术网

Algorithm 通过增加a的大小来测量求解线性系统Ax=b的计算复杂度

Algorithm 通过增加a的大小来测量求解线性系统Ax=b的计算复杂度,algorithm,matlab,time-complexity,Algorithm,Matlab,Time Complexity,我有一个线性方程 Ax=b 其中A是非奇异矩阵N×N,而x,b是向量N×1A,b已给出,我想找到x 很明显,x可以通过x=A找到^(−1) *b。我想测量N增加时的计算复杂性 在MATLAB中,我使用了代码x=A\b。我知道MATLAB会选择一个最好的算法来找到解决方案。在分析中,我知道当N增加时,计算复杂度随着N^3的增加而增加。当N增加时,如何拟合/测量上述方程的模拟和分析之间的计算复杂性 根据,对于随机矩阵A=rand(n)解算器将使用LU分解(基本上是高斯消去法),因为所有其他算法都需

我有一个线性方程

Ax=b
其中
A
是非奇异矩阵
N×N
,而
x,b
是向量
N×1
<代码>A,b已给出,我想找到x

很明显,x可以通过x=A找到^(−1) *b。我想测量
N
增加时的计算复杂性

在MATLAB中,我使用了代码x=A\b。我知道MATLAB会选择一个最好的算法来找到解决方案。在分析中,我知道当N增加时,计算复杂度随着N^3的增加而增加。当N增加时,如何拟合/测量上述方程的模拟和分析之间的计算复杂性

根据,对于随机矩阵
A=rand(n)
解算器将使用LU分解(基本上是高斯消去法),因为所有其他算法都需要某种特殊形式的矩阵

所需操作的计数顺序为N^3。但这并不能转化为N^3的运行时间,因为MATLAB中的数值线性代数例程。例如,当对某些列执行高斯消去时,行操作可以独立执行,因此可以分布在多个线程之间

下面是我如何测试线性解算器的运行时间。矩阵大小为
100:10:500
。我用相同的矩阵重复了
A\b
500次(以避免将生成这些矩阵的成本加到总数中)

我没有查看
绘图(大小、时间)
并试图找出它是三次曲线还是什么,而是取对数的比率,直接表示N的指数。在我的机器上看起来是这样的,表明大约有N^2的增长


(正如Luis Mendo所指出的,使用
timeit
而不是
tic
toc
会更好,但在我的旧版MATLAB中不可用。)

测量在不同的
N
值下运行所需的时间,存储
N
以及数组中的时间量,为了精确测量计算时间,你认为模拟会准确地显示分析结果为N^3吗?因为如果我使用Hank Sally,MATLAB会选择最好的算法。是否可以将多线程转换为适合分析和模拟?
sizes = 100:10:500;
tries = 500;
n = numel(sizes);
time = zeros(1, n);
for j = 1:n
    A = rand(sizes(j));
    b = rand(sizes(j), 1);
    tic 
    for k = 1:tries
        x = A\b;
    end
    time(j) = toc;
end
logsize = log(sizes/sizes(1));
logtime = log(time/time(1));
plot(sizes, logtime./logsize);
axis([sizes(1) sizes(end) 0 4])