1条回答 默认 最新
- 技术专家团-Joel 2021-09-24 09:22关注
你好,以下代码供你参考,能注释的,都注释了
clc; clear; x0 = 0; x1 = 0.5; x2 = 1;%初始区间,自己设置 f=@(x) 3*x^2 - 2*tan(x); %创建题目要求匿名函数,方便使用 N = 100; % 最多100次 iter =1; % 初始迭代步 es = 1e-6; % 误差 e = 1; fprintf('迭代次数 x0 x1 x2 x(解) f(最小值) 误差\n') for i = 1:N % 迭代 f0 = f(x0); % 初始f0 f1 = f(x1); % f1 f2 = f(x2); % f2 x3 = (f0*(x1^2-x2^2)+f1*(x2^2-x0^2)+f2*(x0^2-x1^2))/(2*f0*(x1-x2)+2*f1*(x2-... x0)+2*f2*(x0-x1)); % 二次插值迭代函数 f3 = f(x3); % 计算f3 if f3<f1 % 比较f3和f1大小 e = abs(x3-x1); % 误差 x0 = x1; % 设置新的左端x x1 = x3; % 设置新的中间x else if f1<f3 && f3 < f2 && x3 < x2 && x3 > x1 %假如 f1 比 f3小, 找到x3位置并看取代哪个 x2 = x3; %用x3取代x2 else if f1<f3 && f3 < f0 && x3 > x0 && x3 < x1 x0=x3; % 用x3取代x0 end end end fprintf('%6d\t%f\t%f\t%f\t%f\t%f\t%e\n', i, x0, x1, x2, x3, f3, e)%输出每一步迭代结果 if e<es % 误差比较 break % 满足容差就结束 end end
结果输出
迭代次数 x0 x1 x2 x(解) f(最小值) 误差 1 0.000000 0.500000 0.550323 0.550323 -0.318533 1.000000e+00 2 0.500000 0.412041 0.550323 0.412041 -0.364786 8.795921e-02 3 0.412041 0.378927 0.550323 0.378927 -0.365581 3.311424e-02 4 0.378927 0.388860 0.550323 0.388860 -0.365810 9.933796e-03 5 0.378927 0.388860 0.390133 0.390133 -0.365810 9.933796e-03 6 0.388860 0.389493 0.390133 0.389493 -0.365810 6.329650e-04 7 0.389493 0.389493 0.390133 0.389493 -0.365810 2.129880e-08
可见到了第七次迭代,误差已经是2e-8,远小于设定的1e-6,可以结束
答题不易,有用还请题主给个采纳支持一下答主哦本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 2无用
悬赏问题
- ¥15 乌班图ip地址配置及远程SSH
- ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
- ¥15 PSPICE制作一个加法器
- ¥15 javaweb项目无法正常跳转
- ¥15 VMBox虚拟机无法访问
- ¥15 skd显示找不到头文件
- ¥15 机器视觉中图片中长度与真实长度的关系
- ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
- ¥15 R语言卸载之后无法重装,显示电脑存在下载某些较大二进制文件行为,怎么办
- ¥15 java 的protected权限 ,问题在注释里