MATLAB不动点迭代法求单变量非线性方程的根程序加实例

不动点迭代法用于单变量线性方程近似根,首先确定一个方程根附近的近似初始值,采用逐次逼近的方法,使用迭代公式不断地更新这个初始值,使这个初始值不断趋近于准确值。

图片

1.不动点迭代法自定义函数

fixed_point.m是一个MATLAB函数,设置初始猜测值 x0,容忍误差 tol,以及最大迭代次数 使用迭代公式来更新 x 的估计值。重复迭代,直到连续两次迭代的结果之差的绝对值小于预设的容忍误差 tol,或者达到最大迭代次数 max_iter,函数返回迭代得到的近似解 x 及迭代次数 n。

function [ x, iteration, x_record] = fixed_point( func, x0, prec,Maxiteration )
%% 函数功能:实现不动点迭代求解单变量非线性方程的根
%输入  func 构造的非线性函数迭代方程
%      x0 表示迭代的初始点
%      prec 表示允许的误差
%      Maxiteration 表示最大的迭代次数
%输出  x表示计算出来的近似根
%      iteration表示计算的迭代次数
%      x_record表示记录的求解过程数据
%初始化
prev = x0;
x_record = 0;
%输出第一次
x_val = func(prev);
iteration = 1;
x_record =[ iteration prev x_val];
disp("迭代次数    当前的迭代点x    计算的函数值f(x)")
fprintf("%d             %f          %f\n",iteration,prev,x_val);
%循环求解根
while abs(x_val - prev) >= prec && iteration < Maxiteration %循环进行条件 误差超过误差要求与迭代次数小于最大的迭代次数
    prev = x_val;
    x_val = func(prev);
    iteration = iteration + 1;
    x_record = [x_record;iteration prev  func(prev)];%记录求解过程
    fprintf("%d             %f          %f\n",iteration,prev, func(prev));
end
x = x_val;
if iteration >= Maxiteration
    disp('Method fails to converge.');
end
end

以下是 fixed_point.m 函数的实现主程序:

clc;%清除命令行窗口命令
clear all;%清除工作窗口变量
close all;%关闭图形窗口
%方程 f(x) = x^4-x-2
func1 = @(x)(x+2).^(1/4);%函数定义 f(x)
x0 =1.5;%初始化起点
prec = 1e-5;%误差要求
Maxiteration = 10000;%最大迭代次数
[ x, iteration, x_record] = fixed_point( func1, x0, prec,Maxiteration );%调用函数
%绘制图形
figure;
xx = 0:0.001:5;
yy = func1(xx);
plot(xx,yy,'b-','linewidth',2);
xlabel('x');
ylabel('y');
grid on;
hold on;
stem(x_record(:,2),x_record(:,3),'r--','linewidth',0.2,'markerface','r');
text(1.5,1.6,"f(x) = (x+2)^{(1/4)}  g(x) = x");
%方程 f(x) = x^2-x-2
x0 =2.1;
func2 = @(x)sqrt(x+2);
[ x1, iteration1, x_record1] = fixed_point( func2, x0, prec,Maxiteration );
x0 =2.1;
func3 = @(x) x.^2-2;
[ x2, iteration2, x_record2] = fixed_point( func3, x0, prec,Maxiteration );

​​​​​​​运行结果​​​​​​​如下所示:

迭代次数    当前的迭代点x    计算的函数值f(x)1             1.500000          1.3677822             1.367782          1.3546783             1.354678          1.3533584             1.353358          1.3532255             1.353225          1.3532116             1.353211          1.353210迭代次数    当前的迭代点x    计算的函数值f(x)1             2.100000          2.0248462             2.024846          2.0062023             2.006202          2.0015504             2.001550          2.0003875             2.000387          2.0000976             2.000097          2.0000247             2.000024          2.0000068             2.000006          2.000002迭代次数    当前的迭代点x    计算的函数值f(x)1             2.100000          2.4100002             2.410000          3.8081003             3.808100          12.5016264             12.501626          154.2906435             154.290643          23803.6024846             23803.602484          566611489.2264927             566611489.226492          321048579723463104.0000008             321048579723463104.000000          103072190542452846579224618301652992.0000009             103072190542452846579224618301652992.000000          10623876463219706002836374586651791327834192003612921822814377781231616.00000010             10623876463219706002836374586651791327834192003612921822814377781231616.000000          112866751105753646515587586851442674773166866681669510786146343885715630991359278429990613046798009237082704467678620579869550476402725224448.00000011             112866751105753646515587586851442674773166866681669510786146343885715630991359278429990613046798009237082704467678620579869550476402725224448.000000          12738903505168141679847056106385738761549631092935635618087094319237259237896102383497651784136167647474224359669262487168690258586612238272761585167842701037726822868605492595904935752413872963316593658577472414911387749762233189129386530909195875908974999712454766307167315165184.00000012             12738903505168141679847056106385738761549631092935635618087094319237259237896102383497651784136167647474224359669262487168690258586612238272761585167842701037726822868605492595904935752413872963316593658577472414911387749762233189129386530909195875908974999712454766307167315165184.000000          Inf13             Inf          Inf>>

图片

2.其他实例程序

图片

clc
clear all
syms x;
f=input("请输入迭代方程(自变量为x,如1/3*(x^3+1)):  ");
p0=input("请输入不动点迭代法的初始值:");
perror=input("请输入允许的误差值:");
maxK=input("请输入最大迭代次数:");

[p,k,Y]=FPM(f,p0,perror,maxK);

DP=sprintf("使用不动点迭代法迭代%d次,计算%s=x在%g附近的解为:%g",k,f,p0,p);
disp(DP);
fprintf("迭代值如下:");
disp(Y);

function [p,k,Y]=FPM(f,p0,perror,maxK)
%p0表示迭代初始值
%f表示迭代公式函数
%maxK表示规定的最大迭代次数
%pererr表示允许误差
%k表示最终迭代的次数
%p表示最终迭代的值
%Y用来记录每次迭代过程的迭代值
    syms x;
    P(1)=p0;
    k=2;
    P(k)=subs(f,x,P(k-1));      %迭代
    while k<=maxK
        err=abs(P(k)-P(k-1));    %err表示相邻的迭代值的差值
        if(err<perror)
            fprintf('迭代%d次即可满足允许误差值退出\n',k-1);
            break;
        end
        k=k+1;
        P(k)=subs(f,x,P(k-1));
    end         %共迭代了k-1次
    if(k-1==maxK) 
        disp("超过最大迭代次数!");
    end
    p=P(k); 
    k=k-1;
    Y=P;
end

图片

图片

图片

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/926098.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

BurpSuite使用篇--抓包方法与解码器

BurpSuite是一个web渗透利器&#xff0c;可以抓包改包也可以扫描漏洞&#xff0c;将漏洞扫描和利用集成化一体&#xff0c;更可以支持外部插件拓展&#xff0c;非常牛的工具。 那我们怎么使用呢&#xff1f; 使用BurpSuite 老版本中BurpSuite需要在浏览器中配置本地代理&…

【查询目录】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…

ESP32-S3模组上跑通ES8388(8)

接前一篇文章&#xff1a;ESP32-S3模组上跑通ES8388&#xff08;7&#xff09; 二、利用ESP-ADF操作ES8388 2. 详细解析 上一回继续解析到了ESP-ADF的audio_hal层的第1个也是最为关键的函数 —— audio_hal_init()中的第5段代码&#xff0c;也就是mutex_lock函数与mutex_unlo…

bind实验

服务端 查看域名 [rootclient yum.repos.d]# hostname client 设置域名 [rootclient yum.repos.d]# hostnamectl set-hostname dns1.openlab.edu [rootclient yum.repos.d]# cd [rootclient ~]# hostname dns1.openlab.edu 安装bind包 [rootclient ~]# yum install bind -y…

【LeetCode每日一题】——717.1比特与2比特字符

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时空频度】九【代码实现】十【提交结果】 一【题目类别】 数组 二【题目难度】 简单 三【题目编号】 717.1比特与2比特字符 四【题目描述】 有两种特…

Linux学习笔记11 系统启动初始化,服务和进程管理(下)

前文 前文介绍了系统启动初始化程序&#xff0c;介绍了systemd的基础知识。这里主要看一下我们systemd的单元管理和常用的命令以及示例。 Linux学习笔记10 系统启动初始化&#xff0c;服务和进程管理&#xff08;上&#xff09;-CSDN博客 systemd单元管理 启动服务 这很常…

pnpm安装electron出现postinstall$ node install.js报错

pnpm install --registryhttp://registry.npm.taobao.org安装依赖包的时候出现了postinstall$ node install.js报错 找到install.js 找到downloadArtifact方法&#xff0c;添加如下代码 mirrorOptions:{mirror:"http://npmmirror.com/mirrors/electron/"}http://n…

程序执行堆栈执行模拟

所有的文件都是在硬盘&#xff08;磁盘&#xff09;上&#xff0c;调用时先调用javac指令的jdk编译成.class然后被java指令的jre送到内存中&#xff0c;java在内存中有自己的一片区域叫JVM&#xff0c;编译进来的文件首先进入方法区。 staitc的属性就是在进入内存的时候开辟了一…

windows平台使用C#创建系统服务

使用 C# 在 Windows 平台创建和管理系统服务 在 Windows 平台上&#xff0c;系统服务&#xff08;Windows Service&#xff09;是一种运行在后台、无需用户交互的应用程序。系统服务广泛应用于长期任务处理、网络监听、后台调度等场景。本文将详细介绍如何使用 C# 创建一个 Win…

JVM_总结详解

1、CPU和内存的交互 了解jvm内存模型前&#xff0c;了解下cpu和计算机内存的交互情况。【因为Java虚拟机内存模型定义的访问操作与计算机十分相似】 有篇很棒的文章&#xff0c;从cpu讲到内存模型:[什么是java内存模型&#xff1f;] 在计算机中&#xff0c;cpu和内存的交互最…

TLinux 3.1 (Centos 8)修改网卡设备名

原网卡设备名&#xff1a;ifcfg-enp17s 新网卡设备名&#xff1a;ifcfg-eth0 1. 修改接口配置文件名 rename /etc/sysconfig/network-scripts/ifcfg-enp17s /etc/sysconfig/network-scripts/ifcfg-eth0 2. 修改接口配置文件 vi /etc/sysconfig/network-scripts/ifcfg-eth…

ElasticSearch7.x入门教程之全文搜索(七)

文章目录 前言一、多条件查询&#xff1a;bool query二、更加精准查询&#xff1a;dis_max query总结 前言 这里再接着上一篇文章继续记录。非常感谢江南一点雨松哥的文章。 欢迎大家去查看&#xff0c;地址&#xff1a;http://www.javaboy.org 一、多条件查询&#xff1a;boo…

基于springboot 的体质测试数据分析及可视化设计LWPPT

技术可行性&#xff1a;技术背景 本企业网站在Windows操作系统中进行开发&#xff0c;并且目前PC机的性能已经可以胜任普通网站的web服务器。系统开发所使用的技术也都是自身所具有的&#xff0c;也是当下广泛应用的技术之一。 系统的开发环境和配置都是可以自行安装的&#x…

oracle小技巧-解决特殊密码字符而导致的exp错误

在使用oracle数据库的时候&#xff0c;我们经常会利用exp工具对某些表进行导出。但有些时候&#xff0c;因我们用户密码为安全性设有特殊字符&#xff0c;导致exp导出时候报&#xff1a;“EXP-00056和ORA-12154”&#xff0c;今天我们就分享下如何通过设置符号隔离的小技巧解决…

【ArcGIS Pro实操第11期】经纬度数据转化成平面坐标数据

经纬度数据转化成平面坐标数据 数据准备ArcGIS操作步骤-投影转换为 Sinusoidal1 投影2 计算几何Python 示例 另&#xff1a;Sinusoidal (World) 和 Sinusoidal (Sphere) 的主要区别参考 数据准备 数据投影&#xff1a; 目标投影&#xff1a;与MODIS数据相同&#xff08;Sinu…

病理组学分析系列教程1:使用Python-histolab进行病理图像预处理,tiles切片自动生成

首先&#xff0c;先上参考资料链接&#xff1a; 了解数字病理影像图片WSI如何切割-使用histolab 视频详细讲解使用histolab进行病理图像切分 详细介绍数字病理图像的存储格式及格式转换工具介绍 一、病理图像预处理 相信很多朋友对于WSI这种巨大的病理图像的预处理都觉得束…

kubernetes——part3-2 集群声明式文件YAML

一、YAML介绍 YAML 的意思是&#xff1a;仍是一种标记语言&#xff0c;但为了强调这种语言以数据做为中心&#xff0c;而不是以标记语言为重点。是一个可读性高&#xff0c;用来表达数据序列的格式。 二、基本语法 1.低版本缩进时不允许使用Tab键&#xff0c;只允许使用空格…

使用Postman搞定各种接口token实战

现在许多项目都使用jwt来实现用户登录和数据权限&#xff0c;校验过用户的用户名和密码后&#xff0c;会向用户响应一段经过加密的token&#xff0c;在这段token中可能储存了数据权限等&#xff0c;在后期的访问中&#xff0c;需要携带这段token&#xff0c;后台解析这段token才…

什么是换电系统?驱动新能源汽车发展的“能源驿站”

随着新能源汽车保有量上升&#xff0c;新能源汽车充换电设施需求量同步增加。由于我国土地、电力资源相对紧张&#xff0c;随着车辆保有量继续增加&#xff0c;换电模式有望成为对充电模式的良好补充&#xff0c;具备广阔的中长期发展前景。蔚来是换电领域的先行者&#xff0c;…

Power BI - Connect to SharePoint online list with Image column

1.简单介绍 当前SharePoint online list有modern和classic两种模式&#xff0c;现在使用modern模式的比较多。list中有Image类型的列&#xff0c;Power BI如何连接到SharePoint list并显示image呢 note, SharePoint list中的Image列&#xff0c;Lookup列&#xff0c;People列…