标签: linear-algebra

以下代码中是否可以避免这些舍入错误?

我正在尝试在 Matlab 中编写一个程序来使用 LU 分解求解线性方程组,该分解采用高斯消元法,因此需要大量算术步骤。

答案接近正确的解决方案,但与 Python 等其他语言相比,舍入误差相当高。

例如,其中一个解恰好是 3,但我得到 2.9877。

我知道内置函数应该用于此类琐碎的事情,因为 Matlab 是一种高计算语言,但如果我仍然想用循环等来完成它,我总是会遇到舍入错误,或者有没有办法在做时减少这些错误数值计算?

我附上了代码,但它很大,不值得阅读。为了完整起见,我仍然附上了它。人们可以注意到许多算术运算的使用会引入大量舍入误差。

这些舍入误差是 Matlab 固有的且不可避免的吗?

clc
clear
%No of equations is n
n=3;
%WRITING THE Coefficients
A(1,1)=3;
A(1,2)=-0.1;
A(1,3)=-0.2;
B(1)=7.85;

A(2,1)=0.1;
A(2,2)=7;
A(2,3)=-0.3;
B(2)=-19.3;

A(3,1)=0.3;
A(3,2)=-0.2;
A(3,3)=10;
B(3)=71.4;
%Forward Elimination
for i=1:n-1
  for j=i+1:n
    fact=A(j,i)/A(i,i);
    A(j,i)=fact;
    
    A(j,j:n)=A(j,j:n)-fact*A(i,j:n);
    B(j)=B(j)-fact*B(i);
  end
end
disp(A)
% Calculating d matrix
sum=0;
D(1)=B(1);
for i=2:n
  for j=1:i-1
    sum=sum+A(i,j)*B(j);
    D(i)=B(i)-sum;
  end
end
disp("D =")
disp(transpose(D))

%Back Substitution
X(n)=D(n)/A(n,n);
for z=n-1:-1:1
  sum=0;
  for w=z+1:n
    sum=sum+A(z,w)*X(w); …
Run Code Online (Sandbox Code Playgroud)

matlab matrix linear-algebra rounding numerical-methods

0
推荐指数
1
解决办法
89
查看次数

法线矢量到一个平面

我有3个点P1(x1,y1),P2(x2,y2)和P3(x3,y3).如何找到垂直于通过这3个点的平面的矢量?

math graphics geometry linear-algebra

-1
推荐指数
1
解决办法
3547
查看次数

将对列表转换为最小可能的 DataFrame 表示?

我有一个配对项目列表,我想将它们转换成一个 Pandas DataFrame,其中每个配对项目在同一列中共享相同的数字。所以像这样:

[('A', 'B'),
('A', 'C'),
('B', 'D')]
Run Code Online (Sandbox Code Playgroud)

转化为...

  0  1
A 2  1
B 3  1
C 2  0
D 3  0
Run Code Online (Sandbox Code Playgroud)

因此,列按编码对的数量降序排列,并且它使用尽可能少的列。

是否有一种算法,最好是 numpy 或 Pandas 中的某种算法,可以做到这一点?到目前为止,我在谷歌上找不到任何东西,但我已经有一段时间没有使用线性代数了,所以我可能只是忘记了正确的使用术语。

我创建了以下(有问题的)代码来创建一个 DataFrame,但由于某种原因,它创建了与对一样多的列,这不是我想要完成的。

def create_df(ps):
    df = pd.DataFrame(index=np.unique(ps))
    cnt = 1
    for p in ps:
        col = 0
        a, b = p
        while col in df.columns and (df.at[a, col] != 0 or df.at[b, col] != 0):
            col += 1
        df.loc[a, col] = cnt
        df.loc[b, col] = cnt
        cnt += 1
    return …
Run Code Online (Sandbox Code Playgroud)

python numpy linear-algebra pandas

-1
推荐指数
1
解决办法
219
查看次数

Matlab给出了正矩阵的负特征值

我有一个6000*6000对称矩阵,所有条目都是正数.我使用matlab的eig函数来分解它的特征值和特征向量.但结果中存在负特征值.你认为这是什么问题?

谢谢.Sevil.

matlab matrix linear-algebra eigenvalue

-2
推荐指数
1
解决办法
795
查看次数

Matlab主成分分析(特征值顺序)

我想使用Matlab的"princomp"函数,但是这个函数给出了一个排序数组中的特征值.这样我就无法找出哪个列对应哪个特征值.对于Matlab,

m = [1,2,3;4,5,6;7,8,9];
[pc,score,latent] = princomp(m);
Run Code Online (Sandbox Code Playgroud)

是相同的

m = [2,1,3;5,4,6;8,7,9];
[pc,score,latent] = princomp(m);
Run Code Online (Sandbox Code Playgroud)

也就是说,交换前两列不会改变任何东西.潜在的结果(特征值)将是:(27,0,0)信息(特征值对应于哪个原始(输入)列)丢失.有没有办法告诉matlab不要对特征值进行排序?

matlab linear-algebra eigenvalue pca

-3
推荐指数
1
解决办法
2万
查看次数