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、求解結果