弦割法求方程根的MATLAB程序
原创
©著作权归作者所有:来自51CTO博客作者风雪夜之心的原创作品,请联系作者获取转载授权,否则将追究法律责任
function [y_start,y_end,x_reality,n_reality] = arccut(f_name,x_start,x_end,tolerance,n_limit)
%%
% 弦割法求解方程f_name = 0根的MATLAB实现
% f_name为函数名
% x_start为弦割区间的左端点
% x_end为弦割区间的右端点
% tolerance为所求的精度要求
% n_limit为函数的最大迭代次数
%%
% y_start为弦割左端点的函数值
% y_end为弦割右端点的函数值
% x_reality为
% n_reality为最后计算次数
%%
format long; % 计算结果保留到小数点后14位
fprintf('弦割法求方程: %s = 0 的近似根\n',f_name);
n_reality = 0;
%%
while 1
x_reality = x_end;
if(abs(x_end - x_start) <= tolerance) % 如果满足精度要求,输出结果,跳出while循环
fprintf('在精度不超过%.14f的条件下,方程:%s = 0 的根为 %.14f\n迭代次数为:%d\n',...
tolerance,f_name,x_reality,n_reality);
break;
elseif(n_reality > n_limit) % 如果迭代次数超过限制,输出提示语,结束循环
disp('迭代次数超界');
break;
else
n_reality = n_reality + 1;
y_start = feval(f_name,x_start);
y_end = feval(f_name,x_end);
fprintf('n_reality=%3.0f, x_end=%12.14f,y_end=%12.14f\n',n_reality,x_end,y_end);
% 弦割法
x_end = x_end - y_end / (y_end - y_start) * (x_end - x_start);
x_start = x_reality; % 这样减少了变量,程序看起来简单了,但是重复计算了第20行的值
end
end
disp('弦割法结束');
end
%%
% 弦割法的优点:
% 不必求导数(同牛顿法相比)
% 弦割法的缺点:
% 1.收敛速度(1.618)不如牛顿法(2.0)
% 2.需要提供两个初始近似根
%%
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
弦截法
弦截法求方程根,通过不断向函数值为零的点逼近,精度一定高,近似求得一元方程解
#include #define -
牛顿法求方程的根(C&Matlab&Python语言实现)
1、概述 详细知识点我在前面的牛顿迭代法开方已经总结啦,这里就稍做补充。下面我们就直接给出案例,然后分享代码和结果。
c语言 开发语言 后端 python 迭代 -
二分法求方程的根(Python)
目录1、概述2、代码3、结果1、概述
全文检索 android 微信小程序 python 二分法