天天看點

數值分析第七章作業 二分法和牛頓法實作非線性方程組的數值解法

數值分析第七章作業 二分法和牛頓法實作非線性方程組的數值解法

二分法求解

f =@(x) x^2 - 3*x + 2 -exp(x); % 設定求解函數
 %% 準備
a = 0; % 設定左端點
b = 1; % 設定右端點
k = 0; % 設定疊代次數
 %% 二分與判斷
 while abs(a - b)>=0.0001 %
     k = k+1; % 疊代次數+1
     c = (a+b)/2; % 取中點
     m = f(c); %二分
     if f(c) == 0 % 當中點的函數值為0時,停止疊代
         break;
     elseif f(c) * f(a) < 0 % 判斷下一次疊代的端點
         b = c;
     else
         a = c;
     end
 end
  c = (a+b)/2   % 輸出最終結果
           

牛頓法求解

clc,clear
% 本題運用符号函數的函數表達方法
syms('x');
f = @(x) x^3 +2*x^2 + 10*x -20;
%g = @(x) 3*x^2 + 4*x + 10;
g = diff(f,x);
%% 準備
x = 1.5; %設定初始值
f0 = f(x); % 求解函數值
g0 = subs(g); % 求解函數的導數值,用subs()函數求解符号函數
C = 1;% 設定絕對誤差的控制常數
r = 0.0001; % 設定最小誤差
k = 1; % 設定疊代次數
%% 疊代與控制
while  1
    x_new = x - f0/g0; % 新的解
    f0 = f(x_new); % 新解的函數值
    g0 = subs(g); % 新解的導數值
    k = k+1; % 疊代次數+1
    if abs(x_new) < C 
        det = abs(x_new -x);
    else
        det = abs(x_new -x)/abs(x_new);
    end
    if abs(det) < r
        break
    end
    x = x_new;
end
double(x_new)
           

繼續閱讀