求助:一个三元一次方程的解法,其中方程数大于三,并说明残差的计算,最好有MATLAB源程序.

比如:
x+y+z=1;
x+2y+3z=4;
5x+6y+7z=8;
9x+10y+11z=12;
的方程组的解.
谢谢
如果这个方程的秩为4,
那么结果怎样,
MATLAB程序怎样写,

les.m文件:

function [x,res]=les(A,b)
% [x,res]=les(A,b)
% 解线性方程组,A为未知数系数矩阵,b为常数项列向量。
% 返回值,若解不唯一,返回基础解系,若无解,返回残差最小的一组特例。
% res为残差。

b=b(:); % 化成列向量
n=min(size(A,1),length(b)); % 求方程个数
A=A(1:n,:); b=b(1:n); % 去掉多余行

B=[A,b]; % 构成增广矩阵
ra=rank(A);
rb=rank(B); % 求秩

if ra==rb & ra==n % rank(A)=rank(B)=n %有唯一解
x=A\b;
res=norm(b-A*x)/norm(b); % 若res<eps的话,很接近0了,基本可以看做res=0
elseif ra==rb % rank(A)=rank(B)<n %解不唯一
x0=A\b; % 特解
res=norm(b-A*x0)/norm(b);
disp(['特解:']);
disp(x0);
x=null(A,'r'); % 求基础解系

s=[];
for k=1:length(x)-ra
str=['k',num2str(k)];
s=[s;sym(str)];
end
disp('通解:');
disp(x*s+x0); % 显示通解

else % rank(A)<rank(B) % 无解。
warning('线性方程组无解。函数返回值不是方程组的解,是残差最小的一组特例。');
x=A\b;
res=norm(b-A*x)/norm(b);
end
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-01-13
方程组对应的增广矩阵
A=
1,1,1,1
1,2,3,4
5,6,7,8
9,10,11,12

经过初等行变换可以化为
A1=
1,0,-1,-2
0,1,2,3
0,0,0,0
0,0,0,0

rank(A1)=2
令z=k
则x=k-2, y=3-2k

所以方程组的解为
x=k-2
y=3-2k
z=k
其中k为任意实数

残差不是统计学中的么...和三元一次方程是啥关系?

秩为4时无界.
Matlab的话, 更方便, 前三个组成方程组直接用克莱姆法则, 然后结果代入第四个验算. 因为秩为4, 所以代入以后等式不成立, 方程组无解
第2个回答  2009-01-15
好ibl
相似回答
大家正在搜