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

news/2024/12/5 0:10:53/

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

图片

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 >= Maxiterationdisp('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<=maxKerr=abs(P(k)-P(k-1));    %err表示相邻的迭代值的差值if(err<perror)fprintf('迭代%d次即可满足允许误差值退出\n',k-1);break;endk=k+1;P(k)=subs(f,x,P(k-1));end         %共迭代了k-1次if(k-1==maxK) disp("超过最大迭代次数!");endp=P(k); k=k-1;Y=P;
end

图片

图片

图片

 


http://www.ppmy.cn/news/1552416.html

相关文章

redis都有哪些用法

1. 缓存&#xff08;Caching&#xff09;&#xff1a; • Redis常被用作缓存层&#xff0c;存储那些频繁访问但更新不频繁的数据&#xff0c;以减少数据库的访问压力&#xff0c;提高数据读取速度。 • LRU&#xff08;Least Recently Used&#xff09;淘汰策略&#xff1a;Red…

【SpringBoot】整合篇

1、log4j2 第一步&#xff0c;导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions><!-- 去掉springboot默认配置 --> <exclusion> <…

113. UE5 GAS RPG 实现传送点切换地图

接着我们优化体验相关&#xff0c;首先实现检查点可以在选中点击后&#xff0c;可以自动移动到目标检查点。然后增加一个可以提示玩家已经探索过相关区域的光柱&#xff0c;最后增加一个传送点&#xff0c;可以通过传送点传送到其它关卡。 实现点击自动移动到检查点 先实现点…

milvus 通俗易懂原理

向量值如何生成的 Milvus 是一个开源的向量数据库&#xff0c;专门用于处理高维向量的存储、搜索和分析。向量值本身通常来自于某些机器学习或深度学习模型的输出&#xff0c;尤其是在自然语言处理&#xff08;NLP&#xff09;、计算机视觉&#xff08;CV&#xff09;、推荐系…

数据结构有哪些?

常见的数据结构包括&#xff1a;数组、链表、栈、队列、树、堆、散列表&#xff08;哈希表&#xff09;等。‌ ‌数组‌&#xff1a;按照索引查询元素的速度很快&#xff0c;但大小固定&#xff0c;添加和删除元素需要移动其他元素&#xff0c;且只能存储一种类型的数据。‌链…

Spring Cloud Alibaba(六)

目录&#xff1a; 分布式链路追踪-SkyWalking为什么需要链路追踪什么是SkyWalkingSkyWalking核心概念什么是探针Java AgentJava探针日志监控实现之环境搭建Java探针日志监控实现之探针实现编写探针类TestAgent搭建 ElasticsearchSkyWalking服务环境搭建搭建微服务微服务接入Sky…

SVM支持向量机分类——基于Python实现

SVM支持向量机分类 1.描述统计 from numpy import * from scipy import * from pandas import * import matplotlib.pyplot as pltimport seaborn as sns glassread_csv(../data/第5章数据/Glass.csv,sep,) glass.head() glass[Type].value_counts()Type 2 76 1 70 7 …

流量特征分析

菜刀&#xff1a; PHP&#xff1a; 请求头中&#xff1a;ua头为百度&#xff0c;火狐 请求体中传递的payload为base64编码&#xff0c;有assert、eval、base64等特征字符 &#xff0c;并且存在固定的字符串QGluaV9同时z0是菜刀默认的连接参数。 JSP&#xff1a; 主要在iA…