舍入误差怎么处理呢?
usrbin吧
全部回复
仅看楼主
level 7
一开始还可以忍受,但是步骤一多,差得就大了。
U大神,蛋蛋,各位朋友,有空的话帮忙看看[扯花]
https://tieba.baidu.com/f?kz=1088832637

2011年05月24日 11点05分 1
level 6
看着头大。。。
2011年05月24日 11点05分 2
level 7
[汗]贴子很长,但思路不复杂
2011年05月24日 11点05分 3
level 7
不用检查程序,程序应该没问题的。就是不知道这种误差逐渐累加的情况怎么处理。
2011年05月24日 11点05分 4
level 11
误差是没办法避免的,可以考虑更好的矩阵分解算法
2011年05月24日 11点05分 5
level 13
减少运算次数,避免绝对值相近的两数相减什么的(废话..)[囧]
2011年05月24日 11点05分 6
level 7
嗯,我再试试。
2011年05月24日 11点05分 7
level 9
要不换一种计算方法吧。试试QR分解或SOR分解
2011年05月24日 16点05分 8
level 14
一般解线性性方程组有以下几种:(以下为Matlab程序)
(1)高斯消元法
function x=SolveIPTriangle(A,b)
%求上三角形系数矩阵的线性方程组 Ax=b的解
%线性方程组的系数矩阵:A
%线性方程组的解: x
N=size(A);
n=N(1);
for i=n:-1:1
    if(i<n)
        s=A(i,(i+1):n)*x((i+1):n,1);
    else
        s=0;
    end
    x(i,1)=(b(i)-s)/A(i,i);
end
(2)高斯顺序消去法
function [x,XA]=GaussXQByOrder(A,b)
%高斯顺序消去法求线性方程组 Ax=b的解
%线性方程组的系数矩阵:A
%线性方程组的解:x
%消去后的系数矩阵:XA
N=size(A);
n=N(1);
for i=1:(n-1)
    for j=(i+1):n
        if(A(i,i)==0)
            disp('对角线元素为0!');
            return;
        end
        l=A(j,i);
        m=A(i,i);
        A(j,1:n)=A(j,1:n)-l*A(i,1:n)/m;             %消元方程
        b(j)=b(j)-l*b(i)/m;
    end
end
x=SolveUpTriangle(A,b);            %通用的求上三角系数矩阵线性方程组的函数
XA=A;                              %消元后的系数矩阵

2011年05月25日 10点05分 9
level 14
(3)高斯主元消去法
3.1 高斯按列主元消去法
function [x,XA]=GaussXQLineMain(A,b)
%高斯按列主元消去法求线性方程组 Ax=b 的解
%线性方程组中的系数矩阵:A
%线性方程组中的常数向量:b
%线性方程组的解:x
%消元后的系数矩阵: XA
N=size(A);
n=N(1);
index=0;
for i=1:(n-1)
    me=max(abs(A(1:n,i)));      %选取列主元
    for k=i:n
        if(abs(A(k,i))==me)
            index=k;           %保存列主元所在的行
            break;
        end
    end
    temp=A(i,1:n);
    A(i,1:n)=A(index,1:n);
    A(index,1:n)=temp;
    bb=b(index);
    b(index)=b(i);
    b(i)=bb;
    for j=(i+1):n
        if(A(i,i)==0)
            disp('对角元素为0!');
            return;
        end
        l=A(j,i);
        m=A(i,i);
        A(j,1:n)=A(j,1:n)-l*A(i,1:n)/m;
        b(j)=b(j)-l*b(i)/m;                    %消元
    end
end
x=SolveUPTriangle(A,b);
XA=A;
3.2高斯全主元消去法
function [x,XA]=GaussXQALLMain(A,b)
%高斯全主元消去法求线性方程组Ax=b的解
%线性方程组的系数矩阵:A
%线性方程组中的常数向量:b
%线性方程组的解:x
%校园后的系数矩阵:XA
N=size(A);
n=N(1);
index_1=0;
index_r=0;                 %记录未知数顺序的向量
order =1:n;
for i=1:(n-1)
    me =max(max(abs(A(i:n,i:n))));
    for k=i:n
        for r=i:n
            if(abs(A(k,r))==me)
                index_l=k;
                index_r=r;               %保存主元所在的行和列
                k=n;
                break;
            end
        end
    end
    temp=A(i,1:n);
    A(i,1:n)=A(index_l,1:n);
    A(index_l,1:n)=temp;
    bb=b(index_l);
    b(index_l)=b(i);
    b(i)=bb;              %交换主行
    temp=A(1:n,i);
    A(1:n,i)=A(1:n,index_r);
    A(1:n,index_r)=temp;   %交换主列
    pos=order(i);
    order(i)=order(index_r);
    order(index_r)=pos;     %主列的交换会造成未知数程序的变化
    for j=(i+1):n
        if(A(i,i)==0)
            disp('对角元素为0!');
            return;
        end
        l=A(j,i);
        m=A(i,i);
        A(j,l:n)=A(j,l:n)-l*A(i,l:n)/m;
        b(j)=b(j)-l*b(i)/m;
    end
end
x=SolveUPTriangle(A,b);
y=zeros(n,1);
for i=1:n
    for j=1:n
        if(order(j)==i)
            y(i)=y(j);
        end
    end
end
x=y;
XA=A;
    
2011年05月25日 11点05分 10
level 14
高斯的这套消去法,还有一个Gauss-Jordan法,本质上是一样的,算法很简单,但是精确度很低,尤其在误差和矩阵的扰动上会出现很严重的问题,一般不是要求精度和误差度很高的,同时不是未知变量很多的情况下可以运用
PS:现在有点事情,至于其他的方法,有时间在补充,闪人[我跑]
2011年05月25日 11点05分 11
level 7
[Kiss]谢谢,慢慢消化一下。
2011年05月25日 11点05分 12
level 5
[Kiss]
2011年05月26日 15点05分 13
1