(1)编写通用列选主元消元法求解线性方程组的程序
来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/07/08 03:04:20
(1)编写通用列选主元消元法求解线性方程组的程序
(2)编写通用拟牛顿法求解非线性方程组的程序,使用(1)中的程序
(2)编写通用拟牛顿法求解非线性方程组的程序,使用(1)中的程序
![(1)编写通用列选主元消元法求解线性方程组的程序](/uploads/image/z/15243864-24-4.jpg?t=%281%29%E7%BC%96%E5%86%99%E9%80%9A%E7%94%A8%E5%88%97%E9%80%89%E4%B8%BB%E5%85%83%E6%B6%88%E5%85%83%E6%B3%95%E6%B1%82%E8%A7%A3%E7%BA%BF%E6%80%A7%E6%96%B9%E7%A8%8B%E7%BB%84%E7%9A%84%E7%A8%8B%E5%BA%8F)
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])
%高斯按列主元消去法解线性方程组 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])
matlab编写程序 高斯消元求解线性方程组
用c++编写高斯消元法求解线性方程组的计算程序,并计算下例:2X+2Y+3Z=3、4X+7Y+7Z=1、-2X+4Y+5
雅克比迭代法求解线性方程组的C语言程序?
用C#编写一个求解一元二次方程的程序
【急切求助程序】:求一个matlab程序,关于一个线性方程组求解AX=B的求解问题
1;编写一个摄氏温度与华氏温度转换的通用程序,摄氏温度(c)与华氏温度(F)转换公式如下:F=c*9/5+32
用高斯消元法解线性方程组 的MATLAB程序
用matlab编写程序,求解1/(x+5)的定积分,方法根据定积分的原始定义
求一份用MATLAB编写的计算均匀分布随机变量均值和方差的通用程序和仿真图
求解线性方程组的一般解
求解线性方程组的预处理迭代法
求解线性方程组的一道题目