天天看点

数值分析第七章作业 二分法和牛顿法实现非线性方程组的数值解法

数值分析第七章作业 二分法和牛顿法实现非线性方程组的数值解法

二分法求解

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)
           

继续阅读