求matlab编程 用二分法和牛顿迭代法求根号a

最好有详细一点的解释啊
2024-11-30 19:35:11
推荐回答(1个)
回答1:

对于求平方根,变成方程迹氏搏姿祥模式为f(x)=x^2-a,即求此方程的实根;
下面编写了两个function函核森数,可以直接调用。
二分法:
function x=sqrt_bisect(a)
f=@(x)x^2-a;
if a<0
warning(['负数不能求平方根']);
x=[];
elseif a==0|a==1
x=a;
else
if a<1
xa=a;xb=1;
else
xa=1.00;xb=a;
end
while abs(xa-xb)>1e-6
x=(xa+xb)/2;
if f(xb)*f(x)>0
xb=x;
elseif f(xa)*f(x)>0
xa=x;
else
break
end
end
end
x;

牛顿迭代法:
function x=sqrt_newton(a)
f=@(x)x^2-a;
df=diff(sym('x^2-a'));
if a<0
warning('负数没有实平方根');
x1=[];
elseif a==0;
x1=a;
else
x0=a;
x1=x0-f(x0)/subs(df,x0);
while abs(x1-x0)>1e-6
x0=x1;
x1=x0-f(x0)/subs(df,x0);
end
end
x=x1;

调用格式为:
sqrt_bisect(3)
ans =
1.7321
或者
sqrt_newton(2)
ans =
1.4142