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

【数值分析】非线性方程与方程组的数值解法的经典算法(附MATLAB代码)

1. 二分法

算法原理:确定 f(x) 的有根区间 [a,b] 后,反复二分区间并缩小有根区间长度;当区间长度或中点函数值满足精度时停止。

算法步骤

a. 给定有根区间 [a,b] 及精度 ​;

b. 若 ,取 ​,结束;

c. 取 ,若 ​,结束;

d. 若 f(a)⋅f(x)<0,则 b=x,否则 a=x,转 b。

MATLAB 程序

function [x, it] = bisect(fun, a, b, ep1, ep2)
if nargin < 4ep1 = 1e-5;    ep2 = 1e-5;
end
fa = feval(fun, a);    fb = feval(fun, b);
if fa * fb > 0x = [fa, fb];    it = 0;    return;
end
k = 1;
while abs(b - a)/2 > ep1x = (a + b)/2;    fx = feval(fun, x);if abs(fx) < ep2    return;    endif fx * fa < 0b = x;    fb = fx;elsea = x;    fa = fx;endk = k + 1;
end
it = k;

数值实验

例 1:求  在 (1.0,1.5) 内的实根。

>> fun = inline('x^3 - x - 1');    [x, it] = bisect(fun, 1, 1.5)

2. 不动点迭代法

算法原理:由迭代函数 φ(x) 及初始值 ​,通过  迭代,直到满足精度或达到最大迭代次数。

算法步骤

a. 给定 φ(x)、初始值 ​、精度 ε、最大迭代次数 it_max;

b. 计算 

c. 若 ,结束;

d. 否则 k=k+1,转 b(若达最大次数则结束)。

MATLAB 程序

function [x, it] = iterate(phi, x0, ep, it_max)
if nargin < 4    it_max = 100;    end
if nargin < 3    ep = 1e-5;    end
k = 1;
while k < it_maxx1 = feval(phi, x0);if abs(x0 - x1) < ep    break;    endk = k + 1;    x0 = x1;
end
x = x1;    it = k;

数值实验

例 2:求在  附近的根(迭代函数 )。

>> phi = inline('(x + 1)^(1/3)');    [x, it] = iterate(phi, 1.5)

3. 斯特芬森迭代法

算法原理:用加速公式  迭代,加速收敛。

算法步骤

a. 给定 φ(x)、初始值 ​、精度 ε、最大迭代次数 it_max;

b. 计算

c. 计算 ​;

d. 若 ,结束;

e. 否则 k=k+1,转 b(若达最大次数则结束)。

MATLAB 程序

function [x, it] = steffensen(phi, x0, ep, it_max)
if nargin < 4    it_max = 100;    end
if nargin < 3    ep = 1e-5;    end
k = 1;
while k < it_maxx1 = x0;    y = feval(phi, x0);    z = feval(phi, y);    x0 = x0 - (y - x0)^2 / (z - 2 * y + x0);if abs(x0 - x1) < ep    break;    endk = k + 1;
end
x = x0;    it = k;

数值实验

例 3:求  在  附近的根(迭代函数 )。

>> phi = inline('x^3 - 1');    [x, it] = steffensen(phi, 1.5)

4. 牛顿法

算法原理:由初始值 ,通过 ​ 迭代,直到满足精度或达到最大迭代次数。

算法步骤

a. 给定初始值 ​、精度 ε、最大迭代次数 it_max;

b. 计算 

c. 若 ,结束;

d. 否则 k=k+1,转 b(若达最大次数则结束)。

MATLAB 程序

function [x, it] = Newton(fun, x0, ep, it_max)
if nargin < 4    it_max = 100;    end
if nargin < 3    ep = 1e-5;    end
k = 1;
while k < it_maxx1 = x0;    f = feval(fun, x0);    x0 = x0 - f(1)/f(2);if abs(x0 - x1) < ep    break;    endk = k + 1;
end
x = x0;    it = k;

说明:调用前需将 f(x) 和 f′(x) 以向量形式赋值给 fun

数值实验

例 4:求  在  附近的根。

>> fun = inline('[x^3 - x - 1, 3 * x^2 - 1]');    [x, it] = Newton(fun, 1.5)

总结

本文介绍了四种数值求解非线性方程的算法及其MATLAB实现。二分法通过不断缩小有根区间来逼近根;不动点迭代法利用迭代函数逐步逼近解;斯特芬森迭代法采用加速公式提高收敛速度;牛顿法结合函数值和导数信息快速收敛。每种算法都给出了原理说明、实现步骤和MATLAB程序,并通过数值实验验证了有效性。这些方法适用于不同精度要求和收敛特性的非线性方程求解问题。

http://www.dtcms.com/a/483222.html

相关文章:

  • 文件外链网站智慧团建官网登录入口电脑版
  • 如何在Windows上为Java配置多个版本的环境变量
  • 如何将自己做的网站放到网上去如何做电商创业
  • 杭州市建设信用网郑州优化网站关键词
  • 农业与供应链类 RWA 落地研究报告
  • p2p理财网站开发cms和wordpress
  • 合肥seo整站优化网站做跳转付款
  • 物联网的调试
  • React项目开发(代码架构/规范怎么做)?
  • 做视频网站要准备哪些资料广告设计与制作好找工作吗
  • 双token登录
  • [Backstage] 认证请求的流程 | JWT令牌
  • 简述网站规划的一般步骤马鞍山集团网站设计
  • 使用 Rufus 制作启动盘安装 Windows 与 Ubuntu 系统全流程教程(图文详解+避坑指南)
  • 网站建设项目清单价格海口网站建设哪家最好
  • 网站接入服务商网站app建设图片素材
  • 3ds Max从入门到精通:建模、动画与渲染完整实战教程
  • 建设工程项目编号在什么网站查网站建设方案的内容
  • 做网站 多少钱全国优秀施工企业查询
  • 【免费】轻量级服务器centos监控程序+内存+cpu+nginx+适合小型站长使用
  • 青岛模板建站代理模板建站公司
  • 瑞芯微算法环境搭建(1)------编译ffmpeg
  • python策略网站怎么做seo策略工具
  • 建立了公司网站网络营销心得体会
  • 从 C 到 C++:容器适配器 std::stack 与 std::queue 详解
  • 工信部网站备案查询 验证码错误2019年建设银行安徽招聘网站
  • wordpress网站如何搬家wordpress开发入门视频教程
  • 电子商务网站建设与管理思考与练习做暧视频免费网站
  • 建站公司兴田德润网页制作模板 html
  • Spring Boot 3零基础教程,深度理解 Spring Boot 自动配置原理,笔记11