牛顿法、割线法、二分法

 1 clear;clc;
 2 %% 牛顿法
 3 f=@(x)x^4-4*x^2+4;%函数
 4 df=@(x)4*x^3-8*x;%一阶导数
 5 ddf=@(x)12*x^2-8;%二阶导数
 6 N=1000;%最大迭代次数
 7 x=zeros(N,1);%储存迭代点
 8 x(1)=log(8);%初始点
 9 eps=0.00001;%容许误差
10 
11 %迭代过程
12 for k=2:1:N
13     x(k)=x(k-1)-f(x(k-1))/df(x(k-1));
14     if(abs(x(k)-x(k-1))<eps)
15         break;
16     end
17 end
18 
19 X=x(k);%迭代结果
20 K=k;%迭代步数
21 
22 %% 牛顿法修正1
23 x=zeros(N,1);%储存迭代点
24 x(1)=log(8);%初始点
25 
26 %迭代过程
27 for k=2:1:N
28     x(k)=x(k-1)-2*f(x(k-1))/df(x(k-1));
29     if(abs(x(k)-x(k-1))<eps)
30         break;
31     end
32 end
33 
34 X1=x(k);%迭代结果
35 K1=k;%迭代步数
36 
37 %% 牛顿法修正2
38 x=zeros(N,1);%储存迭代点
39 x(1)=log(8);%初始点
40 
41 %迭代过程
42 for k=2:1:N
43     x(k)=x(k-1)-f(x(k-1))*df(x(k-1))/(df(x(k-1))^2-ddf(x(k-1))*f(x(k-1)));
44     if(abs(x(k)-x(k-1))<eps)
45         break;
46     end
47 end
48 
49 X2=x(k);%迭代结果
50 K2=k;%迭代步数
牛顿法求解非线性方程组
 1 clear;clc;
 2 %% 割线法
 3 f=@(x)x^4-4*x^2+4;%函数
 4 df=@(x)4*x^3-8*x;%一阶导数
 5 N=1000;%最大迭代次数
 6 x=zeros(N,1);%储存迭代点
 7 x(1)=log(8);%初始点
 8 x(2)=x(1)-f(x(1))/df(x(1));
 9 eps=0.00001;%容许误差
10 
11 %迭代过程
12 for k=3:1:N
13     x(k)=x(k-1)-(x(k-1)-x(k-2))/(f(x(k-1))-f(x(k-2)))*f(x(k-1));
14     if(abs(x(k)-x(k-1))<eps)
15         break;
16     end
17 end
18 
19 X=x(k);%迭代结果
20 K=k;%迭代步数
21 
22 %% 修正的割线法
23 x=zeros(N,1);%储存迭代点
24 x(1)=log(8);%初始点
25 x(2)=x(1)-f(x(1))/df(x(1));
26 
27 %迭代过程
28 for k=3:1:N
29     u=x(k-2);v=x(k-1);s=u;
30     if abs(u)<abs(v)%交换
31         s=v;
32         v=u;
33         u=s;
34     end   
35     x(k)=v-(v-u)/(f(v)-f(u))*f(v);
36     if(abs(x(k)-x(k-1))<eps)
37         break;
38     end
39 end
40 
41 X1=x(k);%迭代结果
42 K1=k;%迭代步数
割线法求解非线性方程组
 1 clear;clc;
 2 %% 二分法
 3 %计算根号三,相当于计算方程"x^2-3=0"的正根
 4 f=@(x)x^2-3;
 5 a=0;b=100;%区间端点
 6 c=(a+b)/2;
 7 N=1000;%最大迭代次数
 8 eps=0.00001;%容许误差
 9 
10 % 二分法过程
11 for k=1:1:N
12     if(f(a)*f(c)<0)
13         b=c;
14         c=(a+b)/2;
15     else
16         a=c;
17         c=(a+b)/2;
18     end
19     if (abs(a-b)<eps)
20         break;
21     end
22 end
23 
24 X=c;%迭代结果
25 K=k;%迭代步数
二分法求解根号3

 另外,今天上机课写程序时,发现不同的起始点可以收敛到不同的零点。也许这是一个新的值得研究的地方。

看来,计算数学也是这样,光听理论无法实现大的突破,也没法产生好的想法,必须在实践应用中感受方法的过程,才能发现新的突破点。

posted @ 2023-11-30 12:42  来者可追2019  阅读(36)  评论(0编辑  收藏  举报