Matlab牛顿流

function [x, success] = newton_method(x0, epsilon, N)
    % 牛顿法求解非线性方程 f(x) = 0
    % 输入:
    %   x0 - 初始值
    %   epsilon - 收敛误差
    %   N - 最大迭代次数
    % 输出:
    %   x - 近似解
    %   success - 是否成功找到解
    
    % 初始化
    k = 1;
    success = false;
    
    while k <= N
        % 计算函数值和导数值
        fx = f(x0);
        dfx = df(x0);
        
        % 检查 f(x0) 是否为 0
        if fx == 0
            x = x0;
            success = true;
            disp(['找到精确解,x = ', num2str(x)]);
            return;
        end
        
        % 计算 x1 = x0 - f(x0)/f'(x0)
        x1 = x0 - fx / dfx;
        
        % 判断收敛条件 |x1 - x0| < epsilon
        if abs(x1 - x0) < epsilon
            x = x1;
            success = true;
            disp(['迭代收敛,结果为 x = ', num2str(x)]);
            return;
        end
        
        % 判断是否达到最大迭代次数
        if k == N
            disp('迭代失败,达到最大迭代次数');
            x = NaN;  % 用 NaN 表示失败
            return;
        end
        
        % 更新 x0 和 k
        x0 = x1;
        k = k + 1;
    end
end

% 定义函数 f(x)
function y = f(x)
    % 在此定义你要求解的函数
    y = x^2 - 2;  % 示例:求解 x^2 - 2 = 0 的解
end

% 定义导数函数 f'(x)
function dy = df(x)
    % 在此定义 f(x) 的导数
    dy = 2 * x;  % 示例:导数为 2*x
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值