牛頓迭代法解非線性方程組(MATLAB版)


牛頓迭代法,又名切線法,這里不詳細介紹,簡單說明每一次牛頓迭代的運算:首先將各個方程式在一個根的估計值處線性化(泰勒展開式忽略高階余項),然后求解線性化后的方程組,最后再更新根的估計值。下面以求解最簡單的非線性二元方程組為例(平面二維定位最基本原理),貼出源代碼:

1、新建函數fun.m,定義方程組

 

1 function f=fun(x);
2 %定義非線性方程組如下
3 %變量x1 x2
4 %函數f1 f2
5 syms x1 x2
6 f1 = sqrt((x1-4)^2 + x2^2)-sqrt(17);
7 f2 = sqrt(x1^2 + (x2-4)^2)-5;
8 f=[f1 f2];

 

2、新建dfun.m,求出一階微分方程

 

1 function df=dfun(x);
2 f=fun(x);
3 df=[diff(f,'x1');diff(f,'x2')]; %雅克比矩陣

 

3、建立newton.m,執行牛頓迭代過程

 

 1 clear;clc
 2 format;
 3 x0=[0 0];   % 迭代初始值
 4 eps = 0.00001;  % 定位精度要求
 5 for i = 1:10
 6     f = double(subs(fun(x0),{'x1' 'x2'},{x0(1) x0(2)}));
 7     df = double(subs(dfun(x0),{'x1' 'x2'},{x0(1) x0(2)}));  % 得到雅克比矩陣
 8     x = x0 - f/df;
 9     if(abs(x-x0) < eps)
10         break;
11     end
12     x0 = x; % 更新迭代結果
13 end
14 disp('定位坐標:');
15 x
16 disp('迭代次數:');
17 i

 

結果如下:

定位坐標:

x =


    0.0000   -1.0000

迭代次數:

i =


     4

 




 


免責聲明!

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



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