建立简单的网站,电子商务工作好找吗,网页制作公司哪家比较好,藤虎网络广州网站建设数值分析总结思维导图
Docs
相关代码的使用和注释 列主元Gauss消元法
%%列主元高斯消元法
function xGauss_lzy(A,b)%A为方程组系数矩阵#xff0c;b为方程组的右侧向量#xff0c;x为方程组的解
[n,m]size(A);%%得到矩阵A的行和列的宽度
nblength(b);%%方程组右侧向量的长…数值分析总结思维导图
Docs
相关代码的使用和注释 列主元Gauss消元法
%%列主元高斯消元法
function xGauss_lzy(A,b)%A为方程组系数矩阵b为方程组的右侧向量x为方程组的解
[n,m]size(A);%%得到矩阵A的行和列的宽度
nblength(b);%%方程组右侧向量的长度
if n~m%%如果系数矩阵的行数和方程组右侧向量的长度不相等错误error(%系数矩阵必须是方的);
end
if m~nb%%方程的变量数和方程右侧向量的长度不相等错误error(%b的维数与方程的行数不匹配!);
end
for k1:n-1%%执行n-1次选主元的过程就可以选完所有最后剩下的一个直接处理也表示列%选主元a_max0;%%先定义一个最大值for ik:n%%从当前行开始到最后一行选主元if abs(A(i,k))a_max%%如果遇到比当前最大值大的直接记录作为主元a_maxabs(A(i,k));ri;%%同时记录下它的行数endendif a_max1e-15%%如果记录的主元小于1e-5错误error(%系数矩阵奇异无法匹配方程组);end%交换两行if rk%%如果主元所在的行不是当前行需要交换左侧和右侧for jk:nzA(k,j);A(k,j)A(r,j);A(r,j)z;endzb(k);b(k)b(r);b(r)z;end%消元过程for ik1:n%%从当前行的下一行开始消元mA(i,k)/A(k,k);for jk1:nA(i,j)A(i,j)-m*A(k,j);endb(i)b(i)-m*b(k);end
end
%回代过程
if abs(A(n,n))1e-15error(%系数矩阵奇异无法求解方程组);
end
xzeros(size(b));
for kn:-1:1%%从最后一行开始回代for jk1:nb(k)b(k)-A(k,j)*x(j);endx(k)b(k)/A(k,k);
endJacobi迭代法
%%Jacobi迭代法
function xJacobi(A,b,x0,eps)
Ddiag(diag(A));%%将矩阵A的对角元素提取出来
Dinv(D);%%转置
Ltril(A,-1);%%提取矩阵A的下三角
Utriu(A,1);%%提取矩阵A的上三角
B-D*(LU);%%雅可比迭代公式
fD*b;
k0;
x0x0;
xB*x0f;%%迭代公式
fprintf(k x1_(k) x2_(k) x3_(k)\n);
fprintf(%2d %4.0f %4.0f %4.0f\n,k,x0);
while norm(x-x0)eps%%没有到达指定的误差值之前执行循环不断迭代x0x;xB*x0f;kk1;fprintf(%2d %4.0f %4.0f %4.0f\n,k,x0);
end Gauss-Seidel迭代法
%%Gauss-seidel迭代法
function xGaussSeidel(A,b,x0)%%和Jacobi迭代同样的思路只是公式发生了变化
Ddiag(diag(A));
Ltril(A,-1);
Cinv(DL);
Utriu(A,1);
B-C*U;
fC*b;
i0;
x0x0;
xB*x0f;
fprintf(k x1_(k) x2_(k) x3_(k)\n);
fprintf(%2d %4.0f %4.0f %4.0f\n,k,x0);
for i1:10x0x;xB*x0f;fprintf(%2d %4.0f %4.0f %4.0f\n,k,x0);
end二分法
function x bisectionMethod(A, b, tol)[n, m] size(A);nb length(b);if n ~ merror(系数矩阵必须是方的);endif m ~ nberror(b的维数与方程的行数不匹配!);end% 定义二分法的初始下界和上界lower_bound -1e6;upper_bound 1e6;% 设置二分法的最大迭代次数max_iterations 1000;% 循环执行二分法迭代for k 1:max_iterationslambda (lower_bound upper_bound) / 2; % 计算当前迭代的 lambda 值% 解上界对应的方程组并计算残差x_upper GaussianElimination(A - lambda * eye(n), b);residual_upper norm(A * x_upper - lambda * x_upper - b);% 解下界对应的方程组并计算残差x_lower GaussianElimination(A - lower_bound * eye(n), b);residual_lower norm(A * x_lower - lower_bound * x_lower - b);% 判断是否满足终止条件if abs(residual_upper - residual_lower) tolbreak;end% 更新下界和上界if residual_upper residual_lowerupper_bound lambda;elselower_bound lambda;endend% 返回最终二分法得到的解x x_upper;
endfunction x GaussianElimination(A, b)[n, m] size(A);nb length(b);if n ~ merror(系数矩阵必须是方的);endif m ~ nberror(b的维数与方程的行数不匹配!);end% 高斯消元过程for k 1:n-1% 选主元a_max abs(A(k, k));r k;for i k:nif abs(A(i, k)) a_maxa_max abs(A(i, k));r i;endendif a_max 1e-15error(系数矩阵奇异无法匹配方程组);end% 交换两行if r ktemp A(k, :);A(k, :) A(r, :);A(r, :) temp;temp b(k);b(k) b(r);b(r) temp;end% 消元过程for i k1:nm A(i, k) / A(k, k);for j k1:nA(i, j) A(i, j) - m * A(k, j);endb(i) b(i) - m * b(k);endend% 回代过程if abs(A(n, n)) 1e-15error(系数矩阵奇异无法求解方程组);endx zeros(size(b));for k n:-1:1for j k1:nb(k) b(k) - A(k, j) * x(j);endx(k) b(k) / A(k, k);end
end Newton法
%%Newton法
function xNewton(fname,dfname,x0,e,N)
%%fname和dfname分别表示f(x)及其导函数的M函数句柄或内嵌函数表达式
if nargin5,N500;
end
if nargin4,e1e-4;
end
xx0;
x0x2*e;
k0;
while abs(x0-x)ekN%%大于误差允许值且没有达到迭代次数继续迭代kk1;x0x;xx0-feval(fname,x0)/feval(dfname,x0);%%Newton公式fprintf(It.no%2d x[%2d]%12.9f\n,k,k,x);
end
if kN,fprintf(已经达到迭代次数);
end Lagrange插值
%%Lagrange插值
function yyLagrange(x,y,xi)
mlength(x);%%自变量的长度
nlength(x);%%因变量的长度
if m~nerror(向量x与y的长度必须一致);
end
s0;
for i1:nzones(1,length(xi));%%建立一个预备数组for j1:nif j~izz.*(xi-x(j))/(x(i)-x(j));//%%Lagrange插值公式end
end
ssz*y(i);
end
yys;