切換到寬版
  • 廣告投放
  • 稿件投遞
  • 繁體中文
    • 985閱讀
    • 2回復(fù)

    [分享]matlab牛頓迭代法源碼 [復(fù)制鏈接]

    上一主題 下一主題
    離線13428299720
     
    發(fā)帖
    31
    光幣
    114
    光券
    0
    只看樓主 倒序閱讀 樓主  發(fā)表于: 2023-08-08
    代碼可以直接代入使用。 xcB\Y:   
    4EB\R"rWXf  
    1. %% 牛頓迭代法
    2. function sol = Newton_iterative(f,x0,eps,maxiter)%(符號方程、初值、精度、最大迭代次數(shù))
    3. %sol為輸出參數(shù),sol是一個結(jié)構(gòu)體,包含了迭代過程的信息
    4. %% 輸入?yún)?shù)的控制
    5.    if nargin == 3
    6.       maxiter = 100;
    7.    elseif nargin == 2
    8.       maxiter = 100;
    9.       eps = 1e-6;
    10.    elseif nargin < 2 || nargin > 4
    11.       error('錯誤');
    12.    end
    13. %% 變量的初始化:  x(k+1) = x(k) - f(x(k))/f'(x(k))
    14.    x_k1 = x0;   %x(k)表示迭代上一次的值;
    15.    x_k2 = x0;   %x(k+1)表示迭代下一次的值;
    16.    df = diff(f,symvar(f),1);   %表示方程的一階導(dǎo)數(shù);symvar(f)查找f的自變量x
    17. %% 利用牛頓迭代思想,進行數(shù)值逼近
    18.    fprintf('\n%5s %20s %25s\n', '迭代次數(shù)', '近似解', '誤差')
    19.    for k = 1:1:maxiter   %迭代次數(shù)
    20.        x_k1 = x_k2;   %迭代序列,x0,x1,x2,x3......
    21.        fx = subs(f,symvar(f),x_k1);   %求f(x(k))
    22.        dfx = subs(df,symvar(f),x_k1);
    23.        x_k2 = x_k1 - fx/dfx;
    24.        errval = abs(double(subs(f,symvar(f),x_k2)));   %每次迭代誤差大小
    25.        %迭代過程輸出
    26.        fprintf('%3d %20.15f %24.15f\n', k, x_k2, errval);
    27.        if errval <= eps   %滿足精度要求時退出迭代
    28.           break;
    29.        end
    30.    end
    31. %% 迭代收斂的問題
    32.    if k > maxiter
    33.       disp('達到最大迭代次數(shù),可能不收斂');
    34.       return
    35.    end
    36. %% 輸出參數(shù)的控制
    37.    if nargout == 1
    38.       sol.info = '迭代收斂,逼近終止';
    39.       sol.X = x_k2;
    40.       sol.norm_error = errval;
    41.       sol.iterative = k;
    42.       sol.eps = eps;
    43.       sol.success = '成功';
    44.    elseif nargout == 0
    45.       sol = [];
    46.    end
    47. end
    48. %% 關(guān)于subs
    49. %  在matlab中,subs函數(shù)是用于對符號表達式進行替換的函數(shù)。它可以用來替換符號表達式中的變量或符號,或者將符號表達式中的符號替換為具體的數(shù)值。
    50. %  new_expression = subs(expression, old, new)
    51. %  其中,expression 是要進行替換操作的符號達式,old 是要被替換的變量或符號,new 是替換后的變量或符號或數(shù)值。
    wI%M3XaBws  
     
    分享到
    發(fā)帖
    64
    光幣
    19
    光券
    0
    只看該作者 1樓 發(fā)表于: 01-06
    謝謝樓主 '.A!IGsj  
    離線xxalzdp
    發(fā)帖
    7
    光幣
    1
    光券
    0
    只看該作者 2樓 發(fā)表于: 10-29
    感謝樓主分享!