求用MATLAB编制方程求根的二分法和Newton法的 Matlab 程序!!!谢谢~

求用MATLAB编制方程求根的二分法和Newton法的 Matlab 程序。 利用所编制的程序, 求解方程 的最小正根, 要求精度 。 其中二分法的有根区间取为 【4.0,4.6】,Newton 法的初始值取为x。=4.6 。

第1个回答  2020-03-12
这个有例子
区间二分法:
与对分查找法相同
1
区间二分法求出的仅仅是方程的一个单根,如果方程有重根或者多个根时,在做区间二分法时就会出现分叉,这样方程有几个根,就会产生几个实数序列,每一个实数序列的极限便是方程的一个根
2
通常用区间二分法为一些迭代法提供靠近x^*的初始选代值;
3
区间二分法的缺点是不能求方程的复数根。
format
long
a=5;
b=6;
x1=a;
x2=b;
f1=4*cos(x1)+4*sin(x1)+0.5*x1-2;
f2=4*cos(x2)+4*sin(x2)+0.5*x2-2;
step=0.000001;
ii=0;
while
abs(x1-x2)>step
ii=ii+1;
x3=(x1+x2)/2;
f3=4*cos(x3)+4*sin(x3)+0.5*x3-2;
if
f3~=0
if
f1*f3<0
x2=x3;
else
x1=x3;
end
end
end
x3
f=[4*cos(x3)+4*sin(x3)+0.5*x3]
disp(['迭代次数:',num2str(ii),'次'])
牛顿迭代法求解:
在方程f(x)=0有实数根的情况下,若能够将方程等价地转化成x=g(x)的形式,然后取一个初始值x0代入x=g(x)的右端,算得x1=g(x0),再计算x2=g(x1),这样依次类推
x(k+1)=g(x(k))
可以得到一个序列xk,通常称g(x)为迭代函数,序列xk为由迭代函数产生得迭代序列,x0为迭代初始值。
同一个方程,不同等价形式的转换产生的迭代法可能收敛,也有可能发散.关于迭代法的敛散性判定有下面的定理(也称李普希兹(Lipschitz定理):
如果迭代函数g(x)在区间[a,b]上连续,且满足以下条件,
1
对于任意的x=[a,b],有g(x)=[a,b]
2
在区间内(a,b)内,函数g(x)满足Lipschitz条件,即存在常数L>0,使得对于任意的x,y=(a,b),都有|g(x)-g(y)|=
0.000001
x0=x1;
x1=x1-(4*(cos(x0)+sin(x0))+0.5*x0-2)/(4*(cos(x0)-sin(x0))+0.5);
end
f=4*(cos(x1)+sin(x1)+0.5*x1-2)
弦截法:
单点弦截法:
连接两个端点与作弦(a,f(a))
与(b,f(b))作弦,此弦与轴交点的横坐标设为
x1.
如果f(x1)=0,则x1即为所求根,否则选取(x1,f(x1))点和点(a,f(a))(该点的选取要满足条件f(a)与f''(x)同号,并改记为(x0,f(x0))。再做弦
此弦与轴交点的横坐标设为
x2,依次类推,其迭代格式即为
xk+1=xk-f(xk)*(xk-x0)/(f(xk)-f(x0)
双点弦截法:
无固定点
xk+1=xk-f(xk)*(xk-xk-1)/(f(xk)-f(xk-1)
format
long
nx=[];
nx(1)=5;
nx(2)=nx(1)-(2^nx(1)-nx(1)^2-1)/(2^nx(1)*log(2)-2*nx(1));
k=1;
while
abs(nx(k+1)-nx(k))>=10^(-6)
k=k+1;
nx(k+1)=nx(k)-(2^nx(k)-nx(k)^2-1)/(2^nx(k)*log(2)-2*nx(k));
end
nk=k+1;
disp(['牛顿迭代法迭代次数:',num2str(nk),blanks(4),'方程的解:',num2str(nx(nk))])
dx=[];
dx(1)=5;
dx(2)=dx(1)-(2^dx(1)-dx(1)^2-1)/((2^3-3^2-1)-(2^5-5^2-1))*(3-5);
k=1;
while
abs(dx(k+1)-dx(k))>=10^(-6)
k=k+1;
dx(k+1)=dx(k)-(2^dx(k)-dx(k)^2-1)/((2^dx(k)-dx(k)^2-1)-(2^5-5^2-1))*(
dx(k)-5);
end
disp(['单点迭代法迭代次数:',num2str(k),blanks(4),'方程的解:',num2str(dx(k))])
sx=[];
sx(1)=5;
sx(2)=3;
k=1;
while
abs(sx(k+1)-sx(k))>=0.000001
k=k+1;
sx(k+1)=sx(k)-((2^sx(k)-sx(k)^2-1)/((2^sx(k)-sx(k)^2-1)-(2^sx(k-1)-sx(k-1)^2-1)))*(sx(k)-sx(k-1));
end
sk=k+1;
disp(['双点迭代法迭代次数:',num2str(sk),blanks(4),'方程的解:',num2str(sx(sk))])
x=3:0.05:5;
y=2.^x-x.^2-1;
yn=zeros(1,nk);
yd=zeros(1,sk);
subplot(1,2,1)
plot(x,y,sx,yd,'*')
title('双点弦截法')
gtext('y=2^x-x^2-1')
subplot(1,2,2)
plot(x,y,nx,yn,'*')
title('牛顿迭代法')
gtext('y=2^x-x^2-1')

求用MATLAB编制方程求根的二分法和Newton法的 Matlab 程序!!!谢谢~
disp(['迭代次数:',num2str(ii),'次'])牛顿迭代法求解:在方程f(x)=0有实数根的情况下,若能够将方程等价地转化成x=g(x)的形式,然后取一个初始值x0代入x=g(x)的右端,算得x1=g(x0),再计算x2=g(x1),这样依次类推 x(k+1)=g(x(k))可以得到一个序列xk,通常称g(x)为迭代函...

matlab用二分法,牛顿法,弦割法求方程的根
先画图看清正负!!!F = @(x)4.*cos(x)-exp(x);x0 = pi\/4;x1 = pi\/2;num = 0;while abs(F(x1))>1e-4 if F((x0+x1)\/2) >= 0 x0 = (x0+x1)\/2;else x1 = (x0+x1)\/2;end num = num+1;end disp(num)disp(x1)另外两种方法去网上一搜一大把, 自己找吧 ...

请高手高手用matlab编程实现 求二分法求方程的根
clc;clear a=0;b=1;fa=1-a-sin(a);fb=1-b-sin(b);c=(a+b)\/2;fc=1-c-sin(c);if fa*fb>0,break,end while abs(fc)>0.5*10^(-4)c=(a+b)\/2;fc=1-c-sin(c);if fb*fc>0 b=c;fb=fc;else a=c;fa=fc;end end format long fx=fc,x=c 结果:fx = -2.4149...

matlab二分法求方程的根
matlab源程序如下:function erfenfa(a,b)%a,b为区间,s=(a+b)\/2;,while b-a>1e-5 if fun(a)*fun(s)>0。 a=s; elseif fun(a)*fun(s)<0 function y=fun(x)二分法 即一分为二的方法。设[a,b]为R的紧区间, 逐次二分法就是造出如下的区间序列:a0=a,b0=b,且对任...

matlab怎么用二分法求根啊?比如说x-tan(x)=0在[4.0,4.6]上的根是多少...
程序:fun=inline('x-tan(x)');a=4;b=4.6; tol=1e-4;n=1;c=(a+b)\/2;while abs(feval(fun,c))>tol if feval(fun,a)*feval(fun,c)<0 b=c;c=(a+b)\/2;elseif feval(fun,b)*feval(fun,c)<0 a=c;c=(a+b)\/2;else y=c;tol=10000;end n=n+1;end y=c 结果:...

matlab二分法编程
在matlab中保存为:bisection.m function rtn=bisection(fx,xa,xb,n,delta)二分法解方程 fx是由方程转化的关于x的函数,有fx=0。xa 解区间上限 xb 解区间下限 解区间人为判断输入 n 最多循环步数,防止死循环。delta 为允许误差 x=xa;fa=eval(fx);x=xb;fb=eval(fx);disp(' [ n x...

用2分法求根请问在matlab 怎么用2分法求f(x)=x-cos(x)=0的根呢?区间I...
clear all% domain [a b]a = 0;b = pi\/2;% tolerancetol = 1E-4;% running timen = 1;nmax = 1E2;while n < nmax c = (a+b)\/2; fc = c-cos(c); if (abs(fc) < tol) disp(c); return; end n = n+1; if sign(fc) == sign(a-cos(a...

matlab用二分法求方程的近似根,保留小数点后四位有效数字。
function [x,fval]=myerfen()clc;f=@(x) sqrt(x^2+9)-tan(x);a=0;b=pi\/2-eps;tol=1e-4;while abs(a-b)>tol if feval(f,a)*feval(f,(a+b)\/2)>0 a=(a+b)\/2; elseif feval(f,a)*feval(f,(a+b)\/2)<0 b=(a+b)\/2; else break; endend...

matlab如何实现用二分法求代数方程在区间内的解?
1、在MATLAB中,求解符号微分方程通解的指令格式为:y=dsolve('equation','x')%equation指符号微分方程,x为符号变量。2、如:>> syms a bfun='Dy=a*x+b';y=dsolve(fun,'x')。3、符号微分方程的特解y=dsolve('equation','codition','x')%equation为符号微分方程condition为微分方程的定解...

newton法求方程的根的java程序???
牛顿迭代法就是二分法求根思想,根x在(a,b)间:1)取a,b的中c=(a+b)\/2,将根区间分两半,判断根在哪个区间。三种情况:2)f(c) <= 精度,C为求得根 3)if f(c)*f(a)<0,求根区间在[a,c],b=c,转1)4)if f(c)*f(a)>0,求根区间在[c,b],a=c,转1)double...

相似回答
大家正在搜