數值分析第七章作業 二分法和牛頓法實作非線性方程組的數值解法
二分法求解
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)