1、二分法
原理:若 f 的值在C[a, b]中,且 f (a) · f (b) < 0,则 f 在 (a, b) 上必有一根。
实现算法流程:
2、Newton迭代法
迭代公式:
几何意义:
3、求解问题
用Newton法和二分法求
的解。
4、代码实现
1 clear;close;clc 2 a=0;b=1;%根区间 3 e=10^(-6);%根的容许误差 4 [X , N]=dichotomy(e,a,b);%二分法 5 p0=0.5;%初始值 6 N=15;%迭代次数 7 [X1]=Newdon(p0,e,N);%Newton迭代法 8 9 function [X , N]=dichotomy(deta,a,b) 10 % 函数dichotomy:二分法 11 %输入值: 12 %fun:方程函数 13 %deta:根的容许误差 14 %有根区间:[a,b] 15 %输出值 16 %X:求解到的方程的根 17 %N:总的迭代次数 18 N=1+fix(log2((b-a)/deta));%由公式7.2求得,取整数|X_N-X*|<=(b-a)/2^N<deta,求N 19 n=1; 20 f1=myfunction(a); 21 f2=myfunction(b); 22 if (f1*f2>0) 23 disp('根不在输入的区间里,请重新输入区间'); 24 else 25 while n <= N 26 x=(a+b)/2; 27 if myfunction(a)*myfunction(x)>0 28 a=x; 29 else 30 b=x; 31 end 32 n=n+1; 33 end 34 X=x; 35 fprintf('第%d次二分法求出的方程的根:\n',N); 36 fprintf('X=\n'); 37 disp(X); 38 end 39 end 40 41 function [P]=Newdon(p0,TOL,N) 42 %求方程组的解 43 %输入参数 44 %初始值:p0 45 %误差容限:TOL 46 %最大迭代次数:N 47 %输出参数: 48 %方程近似解:p 49 %或失败信息“Method failed” 50 format long; 51 n=1;%初始迭代次数 52 syms x; 53 while n<=N 54 if abs(subs(diff(myfunction(x)),x,p0))<TOL 55 P=p0; 56 break; 57 else 58 if subs(diff(myfunction(x),2),x,p0)==0 59 disp('Method failed'); 60 break; 61 else 62 p=p0-myfunction(p0)/subs(diff(myfunction(x)),x,p0); 63 p=eval(p);%将exp的值转为小数值 64 if(abs(p-p0)<TOL) 65 P=p; 66 break; 67 else 68 p0=p; 69 end 70 end 71 end 72 n=n+1; 73 end 74 % P=vpa(P,10);%将分数转为小数并保留8位小数 75 fprintf('第%d次NeWton迭代法求出的方程的根:\n',N); 76 fprintf('P=\n'); 77 disp(P); 78 end 79 80 function f=myfunction(x) 81 f=x*exp(x)-1; 82 end
5、求解结果
请发表评论