数值分析第七章作业 二分法和牛顿法实现非线性方程组的数值解法
二分法求解
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)