【问题标题】:set of n-linear equations in matlab [closed]matlab中的一组n线性方程[关闭]
【发布时间】:2009-11-26 11:07:18
【问题描述】:

我在matlab中设置n-线性方程时遇到了一些麻烦。我不知道如何在matlab中声明。我需要matlab代码来设置n-线性方程..

【问题讨论】:

  • 不要复制你的 cmets,如果合适的话,添加一个作业标签。

标签: matlab math linear-equation


【解决方案1】:

您可以将 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

【讨论】:

  • 我有 n-方程和 n-未知数。我必须做的是定义这些方程,以便在输入输入时给出输出。这是我们程序的示例输入和输出。这将有助于识别我们的问题。 A1X1 + A2X2 .... + AnXn = B1 。 . . AnXn .... = Bn 我们有 n 个未知数和 n 个方程,我必须在 matlab 中定义这些方程。
  • 所以?有什么问题?阅读 wiki... 将 n 方程转换为矩阵方程是线性代数最基本的问题之一。如果你不能这样做,那么你的问题在于数学不好,而不是matlab......
【解决方案2】:

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

一种简单的方法是将其简化为简化梯队形式 (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。

【讨论】:

  • 我有 n-方程和 n-未知数。我必须做的是定义这些方程,以便在输入输入时给出输出。这是我们程序的示例输入和输出。这将有助于识别我们的问题。 A1X1 + A2X2 .... + AnXn = B1 。 . . AnXn .... = Bn 我们有 n 个未知数和 n 个方程,我必须在 matlab 中定义这个方程。
【解决方案3】:

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

AX = B

然后解决

X = A\B

你可以发出

help mldivide

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

【讨论】:

  • 但这只有在有独特的解决方案时才有效。 (即 A 是可逆的)。
  • @Alex:是的,它会产生这样的警告。它会比 inv(A)*B 表现更好。我也检查了您的解决方案,它也遇到了同样的问题(虽然输入时间更长)。
【解决方案4】:

迭代方法的代码 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

【讨论】:

  • itmax 是防止程序进入未完成循环的最大迭代次数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-15
  • 1970-01-01
相关资源
最近更新 更多