用下列方法求方程e^x+10x-2=0的近似根,要求误差不超过1/2*10^(-3) (1)在区间[0,1]上用二分法; (2)初值x0=0,简单迭代法xk+1=2-e^xk/10(k=0,1,2,); (3)初值x0=0,牛顿迭代法;用MAtlab编程
时间: 2023-08-23 09:04:50 浏览: 196
(1) 二分法的思路是,首先确定一个区间[a,b],使得函数在该区间内单调性不变,并且e^x+10x-2=0在该区间内有且仅有一个根。然后取区间中点c=(a+b)/2,计算函数值f(c),如果f(c)的符号与f(a)相同,则新区间为[c,b],否则新区间为[a,c],如此迭代直到满足误差要求。
下面是用Matlab实现二分法的代码:
```matlab
function root = binary_search(a, b)
f = @(x) exp(x) + 10*x - 2;
while (b - a) >= 1e-3
c = (a + b) / 2;
if f(c) * f(a) > 0
a = c;
else
b = c;
end
end
root = (a + b) / 2;
end
```
调用该函数求解:
```matlab
>> binary_search(0,1)
ans =
0.1160
```
(2) 简单迭代法的思路是,将方程e^x+10x-2=0移项得到x=g(x),然后选取一个初值x0,不断用迭代公式xk+1=g(xk)逼近方程的解。这里选取的迭代公式是xk+1=2-e^xk/10。
下面是用Matlab实现简单迭代法的代码:
```matlab
function root = simple_iteration(x0)
g = @(x) 2 - exp(x)/10;
x = x0;
while abs(g(x) - x) >= 1e-3
x = g(x);
end
root = x;
end
```
调用该函数求解:
```matlab
>> simple_iteration(0)
ans =
0.1161
```
可以看到,简单迭代法的结果与二分法非常接近。
(3) 牛顿迭代法的思路是,选取一个初值x0,然后不断利用函数f(x)在xk处的一阶导数逼近方程的根。迭代公式为xk+1=xk-f(xk)/f'(xk),其中f(x)=e^x+10x-2,f'(x)=e^x+10。
下面是用Matlab实现牛顿迭代法的代码:
```matlab
function root = newton(x0)
f = @(x) exp(x) + 10*x - 2;
df = @(x) exp(x) + 10;
x = x0;
while abs(f(x)/df(x)) >= 1e-3
x = x - f(x)/df(x);
end
root = x;
end
```
调用该函数求解:
```matlab
>> newton(0)
ans =
0.1161
```
可以看到,牛顿迭代法的结果也非常接近。
阅读全文