1.对方程f(x)=0,先用二分法得到一个较好的初始解,再用牛顿迭代法求一个精度较高的解。
一、Matlab编程
1.先用二分法得到较好初始解
syms x;
fun=input('(输入函数形式)fx=');
a=input('(输入二分法下限)a=');
b=input('(输入二分法上限)b=');
d=input('输入误差限d=')%二分法求根
%f=inline(x^2-4*x+4);
%修改需要求解的inline函数的函数体
f=inline(fun);%修改需要求解的inline函数的函数体
e=b-a; k=0 ;
while e>d
c=(a+b)/2;
if f(a)*f(c)<0
b=c;
elseif f(a)*f(c)>0
a=c;
else
a=c;b=c
end
e=e/2; k=k+1;
end
x=(a+b)/2;
x%x为答案
k%k为次数
2.初始解作为初值,利用牛顿迭代法求精度较高的解
function [x,k]=Newtondd(f,x0,e)
%%牛顿迭代法,求f(x)=0在某个范围内的根。
%%f为f(x),x0为迭代初值(选用上述初始解),e为迭代精度,k为迭代次数
x_a=x0;
x_b=x_a-subs(f,x_a)/subs(diff(f),x_a);
k=1;
while abs(x_a-x_b)>e,
k=k+1;
x_a=x_b;
x_b=x_a-subs(f,x_a)/subs(diff(f),x_a);
end