求解Scilab中的线性方程组

问题描述 投票:0回答:2

我想解决以下系统Ax=b,其中A的尺寸为mn (m>n)b m1x n,[ C0]。在Scilab下求解之后,我发现向量x的某些分量很复杂,我发现这很奇怪,因为有人告诉我向量1必须是实数。您如何解释?

这是我的代码:

x
math scilab
2个回答
3
投票

function [x] = sys_()
    [fid1,err1] = mopen("D:\Documents\sys_surdet\Donnees_test_A.txt","r");
    [fid2,err2] = mopen("D:\Documents\sys_surdet\Donnees_test_B.txt","r");
    A = mfscanf(-1,fid1,'%f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f');
    b = mfscanf(-1,fid2,'%f');
    A=10^(-A/10);
    b=10^(b/10);
    col = size(A);
    j = zeros(col(1,1),1);
    x = zeros(col(1,2),1);
    if rank(A)==col(1,2) then
        x=(A'*A)\(A'*b);
    else
        x=-1;
    end
    mclose(fid1);
    mclose(fid2);
endfunction

似乎是将数据从分贝转换回标准单位。与Matlab等类似,这是一次在整个矢量或矩阵上完成的。您是否确定此时A和b不是复数值?

A=10^(-A/10);

b=10^(b/10);

这是用于求解方程组多于变量的方程组的标准正则方程。 (除其他事项外)它是最小二乘解x。在SCILAB中,只需使用

即可获得相同的结果
x=(A'*A)\\(A'*b);

这通常与解决方案有所不同

x=A\b;

您的方程组可能在数值上接近奇异点(检查奇异值接近0),或者可能没有解。

在SCILAB中,您可以通过以下方式获取有关方程组的更多信息:>

x=pinv(A)*b;

cond(A'*A)

更多信息,请参见SCILAB关于线性代数的帮助部分。


1
投票

我不知道这些是关于什么的:

© www.soinside.com 2019 - 2024. All rights reserved.