当前位置: 首页 > news >正文

数值分析总结

数值分析总结思维导图

Docs

相关代码的使用和注释

       列主元Gauss消元法

%%列主元高斯消元法
function x=Gauss_lzy(A,b)%A为方程组系数矩阵,b为方程组的右侧向量,x为方程组的解
[n,m]=size(A);%%得到矩阵A的行和列的宽度
nb=length(b);%%方程组右侧向量的长度
if n~=m%%如果系数矩阵的行数和方程组右侧向量的长度不相等,错误error('%系数矩阵必须是方的');
end
if m~=nb%%方程的变量数和方程右侧向量的长度不相等,错误error('%b的维数与方程的行数不匹配!');
end
for k=1:n-1%%执行n-1次选主元的过程,就可以选完所有,最后剩下的一个直接处理,也表示列%选主元a_max=0;%%先定义一个最大值for i=k:n%%从当前行开始到最后一行选主元if abs(A(i,k))>a_max%%如果遇到比当前最大值大的直接记录作为主元a_max=abs(A(i,k));r=i;%%同时记录下它的行数endendif a_max<1e-15%%如果记录的主元小于1e-5,错误error('%系数矩阵奇异,无法匹配方程组');end%交换两行if r>k%%如果主元所在的行不是当前行,需要交换左侧和右侧for j=k:nz=A(k,j);A(k,j)=A(r,j);A(r,j)=z;endz=b(k);b(k)=b(r);b(r)=z;end%消元过程for i=k+1:n%%从当前行的下一行开始消元m=A(i,k)/A(k,k);for j=k+1: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
x=zeros(size(b));
for k=n:-1:1%%从最后一行开始回代for j=k+1:nb(k)=b(k)-A(k,j)*x(j);endx(k)=b(k)/A(k,k);
end

       Jacobi迭代法

%%Jacobi迭代法
function x=Jacobi(A,b,x0,eps)
D=diag(diag(A));%%将矩阵A的对角元素提取出来
D=inv(D);%%转置
L=tril(A,-1);%%提取矩阵A的下三角
U=triu(A,1);%%提取矩阵A的上三角
B=-D*(L+U);%%雅可比迭代公式
f=D*b;
k=0;
x0=x0;
x=B*x0+f;%%迭代公式
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%%没有到达指定的误差值之前执行循环,不断迭代x0=x;x=B*x0+f;k=k+1;fprintf('%2d %4.0f %4.0f %4.0f\n',k,x0);
end

       Gauss-Seidel迭代法

%%Gauss-seidel迭代法
function x=GaussSeidel(A,b,x0)%%和Jacobi迭代同样的思路,只是公式发生了变化
D=diag(diag(A));
L=tril(A,-1);
C=inv(D+L);
U=triu(A,1);
B=-C*U;
f=C*b;
i=0;
x0=x0;
x=B*x0+f;
fprintf('k x1_(k) x2_(k) x3_(k)\n');
fprintf('%2d %4.0f %4.0f %4.0f\n',k,x0);
for i=1:10x0=x;x=B*x0+f;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 = k+1:nm = A(i, k) / A(k, k);for j = k+1: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 = k+1:nb(k) = b(k) - A(k, j) * x(j);endx(k) = b(k) / A(k, k);end
end

          Newton法

%%Newton法
function x=Newton(fname,dfname,x0,e,N)
%%fname和dfname分别表示f(x)及其导函数的M函数句柄或内嵌函数表达式
if nargin<5,N=500;
end
if nargin<4,e=1e-4;
end
x=x0;
x0=x+2*e;
k=0;
while abs(x0-x)>e&k<N%%大于误差允许值且没有达到迭代次数,继续迭代k=k+1;x0=x;x=x0-feval(fname,x0)/feval(dfname,x0);%%Newton公式fprintf('It.no=%2d x[%2d]=%12.9f\n',k,k,x);
end
if k==N,fprintf('已经达到迭代次数');
end

          Lagrange插值

%%Lagrange插值
function yy=Lagrange(x,y,xi)
m=length(x);%%自变量的长度
n=length(x);%%因变量的长度
if m~=nerror('向量x与y的长度必须一致');
end
s=0;
for i=1:nz=ones(1,length(xi));%%建立一个预备数组for j=1:nif j~=iz=z.*(xi-x(j))/(x(i)-x(j));//%%Lagrange插值公式end
end
s=s+z*y(i);
end
yy=s;

相关文章:

  • SpringCloud核心组件
  • 使用 TypeScript 改进异步操作和错误处理的策略
  • QT基础开发笔记
  • 【Cisco Packet Tracer】DHCP/FTP/WEB/DNS实验
  • (十三)Flask之特殊装饰器详解
  • 高防cdn防护原理是什么,是否可以防护服务器吗
  • kubernetes使用nfs创建pvc部署mysql stateful的方法
  • Intellij IDEA 的安装和使用以及配置
  • 简化版Transformer
  • 高效学习 React 框架AntDesign Pro
  • 2023.11.29 -hmzx电商平台建设项目 -核销主题阶段总结
  • XUbuntu22.04之OBS30.0设置录制音频降噪(一百九十六)
  • 基于SpringBoot母婴商城
  • 【面经八股】搜广推方向:面试记录(二)
  • 1、Linux_介绍和安装
  • [deviceone开发]-do_Webview的基本示例
  • 【Amaple教程】5. 插件
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • Golang-长连接-状态推送
  • JAVA 学习IO流
  • Js基础知识(一) - 变量
  • Nacos系列:Nacos的Java SDK使用
  • Spring核心 Bean的高级装配
  • SQLServer之创建显式事务
  • SwizzleMethod 黑魔法
  • uva 10370 Above Average
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 对象引论
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 前端知识点整理(待续)
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 深入浏览器事件循环的本质
  • 为视图添加丝滑的水波纹
  • 硬币翻转问题,区间操作
  • 云大使推广中的常见热门问题
  • 怎么将电脑中的声音录制成WAV格式
  • 怎样选择前端框架
  • scrapy中间件源码分析及常用中间件大全
  • ​Java并发新构件之Exchanger
  • #Z0458. 树的中心2
  • (1)(1.9) MSP (version 4.2)
  • (过滤器)Filter和(监听器)listener
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (四)模仿学习-完成后台管理页面查询
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)EOS中账户、钱包和密钥的关系
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core WebAPI中封装Swagger配置
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .net对接阿里云CSB服务
  • .NET下ASPX编程的几个小问题