用Matlab編寫二分法和Newton迭代法求解非線性函數


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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM