【发布时间】:2009-11-26 11:07:18
【问题描述】:
我在matlab中设置n-线性方程时遇到了一些麻烦。我不知道如何在matlab中声明。我需要matlab代码来设置n-线性方程..
【问题讨论】:
-
不要复制你的 cmets,如果合适的话,添加一个作业标签。
标签: matlab math linear-equation
我在matlab中设置n-线性方程时遇到了一些麻烦。我不知道如何在matlab中声明。我需要matlab代码来设置n-线性方程..
【问题讨论】:
标签: matlab math linear-equation
您可以将 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
【讨论】:
您可以通过多种方式求解线性系统,具体取决于是否存在唯一解。
一种简单的方法是将其简化为简化梯队形式 (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。
【讨论】:
在 MATLAB 中求解线性方程组绝对最快的方法就是在表格中设置方程组
AX = B
然后解决
X = A\B
你可以发出
help mldivide
查找有关矩阵除法及其限制的更多信息。
【讨论】:
迭代方法的代码 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
【讨论】: