matlab 中的 n 线性方程组

发布于 2024-08-12 07:58:47 字数 1539 浏览 6 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

长伴 2024-08-19 07:58:47

您可以将 n 次线性方程写为一个矩阵方程来求解。在这里你可以找到很好的例子:
http://blogs.mathworks .com/pick/2007/09/13/matlab-basics-video-solving-linear-equations/(视频!)

另请参阅这些页面:
http://en.wikipedia.org/wiki/System_of_linear_equations
http://en.wikipedia.org/wiki/Matrix_equation

You can write n-linear equations as one matrix equation to solve it. Here you can find great example:
http://blogs.mathworks.com/pick/2007/09/13/matlab-basics-video-solving-linear-equations/ (video!)

See also these pages:
http://en.wikipedia.org/wiki/System_of_linear_equations
http://en.wikipedia.org/wiki/Matrix_equation

﹏雨一样淡蓝的深情 2024-08-19 07:58:47

您可以通过多种方式求解线性系统,具体取决于是否存在唯一解。

一种简单的方法是将其简化为简化梯形形式(rref)。

考虑系统:

 x + 5y = 4
2x -  y = 1

您可以将系数矩阵 A 和 RHS、B 写成如下:(' 是转置运算符)

>> A = [1 5; 2 -1]

A =

     1     5
     2    -1

>> B = [4 1]'

B =

     4
     1

您可以将其写为增广矩阵 (A|B):

>> horzcat(A,B)

ans =

     1     5     4
     2    -1     1

然后找到 REF(A|B)

>> rref(ans)

ans =

    1.0000         0    0.8182
         0    1.0000    0.6364

因此 x ~ .8182, y ~ .6364。

You can solve a linear system in various ways, depending on whether there exists a unique solution or not.

A simple way is by reducing it to reduced-echelon form (rref).

Consider the system:

 x + 5y = 4
2x -  y = 1

You can write the coefficient matrix A, and the RHS, B as follows: (' is the transpose operator)

>> A = [1 5; 2 -1]

A =

     1     5
     2    -1

>> B = [4 1]'

B =

     4
     1

You can write it as an augmented matrix (A|B):

>> horzcat(A,B)

ans =

     1     5     4
     2    -1     1

And then find the REF(A|B)

>> rref(ans)

ans =

    1.0000         0    0.8182
         0    1.0000    0.6364

And hence x ~ .8182, y ~ .6364.

自此以后,行同陌路 2024-08-19 07:58:47

在 MATLAB 中求解线性方程的绝对最快方法就是在表格上设置方程

AX = B

,然后通过求解。

X = A\B

您可以通过问题

help mldivide

查找有关矩阵除法及其限制的更多信息。

The absolutely fastest way to solve linear equations in MATLAB is simply to setup your equation on the form

AX = B

and then solve by

X = A\B

You can issue

help mldivide

to find more information on matrix division and what limitations it has.

梦太阳 2024-08-19 07:58:47

迭代法 Guase Seidel 的代码
tol 是容错能力
x0 是解的第一个猜测


 function seidel(A,b,x0,tol,itmax)
%Solve the system  Ax=b using the Gauss-Seidel iteration method.
clc
% =======================================================
% Programmer : A. Ziaee mehr
%

help seidel
n=length(b);
x=zeros(n,1);
%fprintf('\n')
disp('The augumented matrix is = ')
Augm=[A b]
Y=zeros(n,1);
Y=x0;   
for  k=1:itmax +1
    for ii=1:n
        S=0;
        for jj=1:ii-1
            S=S+A(ii,jj)*x(jj);
        end
        for jj=ii+1:n
            S=S+A(ii,jj)*x0(jj);
        end
        if (A(ii,ii)==0)
            break
        end
        x(ii)=(-S+b(ii))/A(ii,ii);
    end
    err=abs(norm(x-x0));
    rerr=err/(norm(x)+eps);
    x0=x;
    Y=[Y x];
    if(rerr<tol)
        break;
    end
end
% Print the results
if (A(ii,ii)==0)
    disp('division by zero')
elseif (k==itmax+1)
    disp('No convergence')
else
    %fprintf('\n')
    disp('The solution vector are : ')
    fprintf('\n')
    disp('iter    0       1            2          3           4    ... ');
    fprintf('\n')
    for ii=1:n
        fprintf('%1.0f= ',ii);
        fprintf('%10.6f ',Y(ii,1:k+1));
        fprintf('\n')
    end
    fprintf('\n')
    disp(['The method converges after ',num2str(k),' iterations to'])
    x
end

A Code for iterative method Guase Seidel
tol is error tolerance
x0 is first guess for solution


 function seidel(A,b,x0,tol,itmax)
%Solve the system  Ax=b using the Gauss-Seidel iteration method.
clc
% =======================================================
% Programmer : A. Ziaee mehr
%

help seidel
n=length(b);
x=zeros(n,1);
%fprintf('\n')
disp('The augumented matrix is = ')
Augm=[A b]
Y=zeros(n,1);
Y=x0;   
for  k=1:itmax +1
    for ii=1:n
        S=0;
        for jj=1:ii-1
            S=S+A(ii,jj)*x(jj);
        end
        for jj=ii+1:n
            S=S+A(ii,jj)*x0(jj);
        end
        if (A(ii,ii)==0)
            break
        end
        x(ii)=(-S+b(ii))/A(ii,ii);
    end
    err=abs(norm(x-x0));
    rerr=err/(norm(x)+eps);
    x0=x;
    Y=[Y x];
    if(rerr<tol)
        break;
    end
end
% Print the results
if (A(ii,ii)==0)
    disp('division by zero')
elseif (k==itmax+1)
    disp('No convergence')
else
    %fprintf('\n')
    disp('The solution vector are : ')
    fprintf('\n')
    disp('iter    0       1            2          3           4    ... ');
    fprintf('\n')
    for ii=1:n
        fprintf('%1.0f= ',ii);
        fprintf('%10.6f ',Y(ii,1:k+1));
        fprintf('\n')
    end
    fprintf('\n')
    disp(['The method converges after ',num2str(k),' iterations to'])
    x
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文