作业帮 > 综合 > 作业

(1)编写通用列选主元消元法求解线性方程组的程序

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/07/08 03:04:20
(1)编写通用列选主元消元法求解线性方程组的程序
(2)编写通用拟牛顿法求解非线性方程组的程序,使用(1)中的程序
(1)编写通用列选主元消元法求解线性方程组的程序
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;
function x=SolveUpTriangle(A,b)
%求上三角系数矩阵的线性方程组Ax=b的解
%线性方程组的系数矩阵:A
%线性方程组中的常数向量:b
%线性方程组的x
N=size(A);
n=N(1);
for i=n:-1:1
if (i
再问: 我也不知道啊…………提个问题还被老师发现了……您看看能不能写出来,其实后面还有一问 让用(2)的程序解一个非线性方程组
再答: 后面的一问,牛顿法求非线性方程有一程序: function [r,m]=mulVNewton(F,x0,A,eps) % 用拟牛顿法求非线性方程组的一组解 %方程组:F %方程组的初始x0 % 初始A矩阵:A %解的精度:eps %求得的一组r %迭代步数:m if nargin==2 A=eye(length(x0)); %A取为单位阵 eps=1.0e-4; else if nargin==3 eps=1.0e-4; end end x0 = transpose(x0); Fx = subs(F, findsym(F),x0); r=x0-A\Fx; m=1; tol=1; while tol>eps x0=r; Fx = subs(F, findsym(F),x0); r=x0-A\Fx; y=r-x0; Fr = subs(F, findsym(F),r); z= Fr-Fx; A1=A+(z-A*y)*transpose(y)/norm(y); %调整A A=A1; m=m+1; if(m>100000) %迭代步数控制 disp('迭代步数太多,可能不收敛!'); return; end tol=norm(r-x0); end 例如:求方程组0.5*sin(x)+0.1*cos(x*y)-x=0;0.5*cos(x)-0.1*sin(y)-y=0的解 调用格式:clear >> syms x y; >> z=[0.5*sin(x)+0.1*cos(x*y)-x;0.5*cos(x)-0.1*sin(y)-y]; [r,m]=mulVNewton(z,[0.5,0.5])