matlab 求方程的根,二分发求方程根的MATLAB程序

function [x_middle,y_middle,n_reality] = binary(f_name,x_start,x_end,tolerance,n_limit)

%%

% 二分法求解方程f_name = 0根的MATLAB实现

% f_name为迭代函数

% x_start为开始迭代区间的左端点

% x_end为开始迭代区间的右端点

% tolerance为函数迭代的精度要求

% n_limit为函数的最大迭代次数

%%

% x_middle为函数迭代最后结果

% y_middle为最后迭代结果的函数值

% n_reality为最后迭代次数

%%

format long; % 计算结果保留到小数点后14位

fprintf('\n二分法求方程: %s = 0 的近似根\n',f_name);

fprintf(' n x_start x_end x_middle Y_x_start=f(x_start)');

fprintf(' Y_x_end=f(x_end) abs(Y_x_end-Y_x_start)\n');

Y_x_start = feval(f_name,x_start); % 求方程f_name在x_start处的值

Y_x_end = feval(f_name,x_end); % 求方程f_name在x_end处的值

%%

n_reality = 0;

if(Y_x_start * Y_x_end > 0) % 首先判断是否满足使用二分法的条件

disp('不满足条件 f(x_start)*f(x_end)<=0');

else

while 1 % 执行while循环

n_reality = n_reality + 1;

x_middle = (x_start + x_end)/2; % 计算x_start和x_end的中点

y_middle = feval(f_name,x_middle); % 计算x_middle的函数值

fprintf('%3.0f %10.14f,%10.14f,',n_reality,x_start,x_end);

fprintf('%10.14f, %10.14f, %10.14f, ',x_end,Y_x_start,Y_x_end);

fprintf('%12.14f\n',abs(Y_x_end-Y_x_start));

if(abs(x_end - x_start) <= tolerance) % 如果满足精度要求,输出结果,跳出while循环

fprintf('在精度不超过%.14f的条件下,方程:%s = 0 的根为 %.14f\n迭代次数为:%d\n',...

tolerance,f_name,x_middle,n_reality);

break;

elseif(n_reality > n_limit) % 如果迭代次数超过限制,输出提示语,结束循环

disp('迭代次数超界');

break;

elseif(Y_x_start * y_middle <= 0) % 如果Y_x_start的值和y_middle的值异号

x_end = x_middle; % 把x_middle的值赋给x_end;

Y_x_end = y_middle; % 把y_middle的值赋给Y_x_end;

else % 否则

x_start = x_middle; % 把x_middle的值赋给x_start

Y_x_start = y_middle; % 把y_middle的值赋给Y_x_start;

end

end

end

disp('二分法结束');

end

%%

% 二分法的优点:

% 1.方法简单可靠,易于在计算机上实现

% 2.对函数f_name的要求不高,只要连续即可

% 二分法的缺点:

% 1.二分法用于计算精度要求较高的的近似根时,所费时间较长,收敛速度慢,在使用范围上有局限

% 2.不能用于求复根或偶数重根

%%

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值