Matlab 实现 数值计算方法 二分法
2015-05-28 08:33
696 查看
给本科生助课,需要用到二分法,所以就编写了一下二分法的matlab代码,while循环、for循环都用到了;
个人认为这两段程序编写的比较细致,该涉及到的输入输出都有。都是比较简单的知识,所以给大家分享出来,供交流讨论:
第一个:
第二个:
执行示例:(1和2的执行一致)
In Command Window:
>> [i,x,fx]=erfenfa_new_use2(@(x)x^3+4*x^2-10,1,2,5e-4)
The result:
二分法运算次数i=10;方程的根x=1.3647;f(x)=-0.0080
i =
10
x =
1.3647
fx =
-0.0080
注:个人手敲,link:http://blog.csdn.net/jfsufeng/article/details/46116501 点击打开链接
有问题请与我联系:jfsufeng@foxmail.com
个人认为这两段程序编写的比较细致,该涉及到的输入输出都有。都是比较简单的知识,所以给大家分享出来,供交流讨论:
第一个:
%% erfenfa new use one % Author:jfsufeng@foxmail.com % Version: % Date&Time: % Description: function [i,x,fx]=erfenfa_new_use1(f,bot,top,err) %输入:f为要求解的方程函数表达式,bot为求解区间的下界,top为求解区间的上界,err为所要求的误差范围 %输出:i为二分法求解的次数,x为最终的根,fx为方程的根x对应的函数值(精度要求内接近于零或等于零) if f(bot)*f(top)>0 disp('\n注意:f(bot)*f(top)>0,无法继续运算,请重新调整区间端点bot和top.\n'); return end %wucha=abs(top_new-bot_new)/2; % put that into for loop || while loop n=ceil((log(top-bot)- log(err))/log(2))-1; %n为二分法运算总的次数;ceil是上取整 ,相对应的floor是下取整 for i=0:1:n % 步长默认为1,中间的1加不加都可以 x=(bot+top)/2; fx=f(x); if fx==0 bot=x; top=x; elseif f(bot)*fx<0 top=x; else bot=x; end % if abs(top-bot)<=err % 结合题意,加不加1/2都行,只是有着多二分运算一次的影响 % %此外,实际这里的if判断err的语句part,针对for循环是无必要的 % break % 这里用break,不用return % end end fprintf('\nThe result:\n二分法运算次数i=%d;方程的根x=%.4f;f(x)=%.4f\n',i,x,fx);%保留4位小数
第二个:
%% erfenfa new use two % Author:jfsufeng@foxmail.com % Version: % Date&Time: % Description: function [i,x,fx]=erfenfa_new_use2(f,bot,top,err) %输入:f为要求解的方程函数表达式,bot为求解区间的下界,top为求解区间的上界,err为所要求的误差范围 %输出:i为二分法求解的次数,x为最终的根,fx为方程的根x对应的函数值(精度要求内接近于零或等于零) if f(bot)*f(top)>0 disp('\n注意:f(bot)*f(top)>0,无法继续运算,请重新调整区间端点bot和top.\n'); return end i=ceil((log(top-bot)- log(err))/log(2))-1; %n为二分法运算总的次数;ceil是上取整 ,相对应的floor是下取整 while abs(top-bot)>err x=(bot+top)/2; fx=f(x); if fx==0 bot=x; top=x; elseif f(bot)*fx<0 top=x; else bot=x; end end fprintf('\nThe result:\n二分法运算次数i=%d;方程的根x=%.4f;f(x)=%.4f\n',i,x,fx);%保留4位小数
执行示例:(1和2的执行一致)
In Command Window:
>> [i,x,fx]=erfenfa_new_use2(@(x)x^3+4*x^2-10,1,2,5e-4)
The result:
二分法运算次数i=10;方程的根x=1.3647;f(x)=-0.0080
i =
10
x =
1.3647
fx =
-0.0080
注:个人手敲,link:http://blog.csdn.net/jfsufeng/article/details/46116501 点击打开链接
有问题请与我联系:jfsufeng@foxmail.com
相关文章推荐
- 计算方法中方程的近似解法中二分法matlab实现
- 计算方法单点截弦matlab实现
- 计算方法双点截弦法matlab实现
- 数值计算方法与算法:C语言实现利用Gauss消元法解方程组
- 不用递归的方法计算米粒的个数和每个米粒的面积,matlab实现
- (数值计算方法)matlab的使用
- (数值计算方法)matlab的使用
- 用蒙特卡罗方法计算区域面积以matlab实现
- 数值计算-线性方程组求解(1)-LU分解-MATLAB实现
- 数值计算-线性方程组求解(2)-追赶法解三对角矩阵-MATLAB实现
- 数值计算方法python实现
- 山东大学数值计算实验一(matlab实现)
- Matlab 数值计算----二分法求非线性方程组
- XTUExper数值计算方法 C语言实现
- 数值计算方法:二分法求解方程的根(伪代码 python c/c++)
- MATLAB 数值计算练习代码
- MATLAB中均值、方差、均方差的计算方法
- 数值作业:变步长梯形求积算法计算积分C语言实现
- 数值作业:龙贝格算法计算积分C语言实现
- Python实现计算两个时间之间相差天数的方法