• Matlab迭代算法实现


    牛顿迭代法

    雅可比迭代法


    高斯赛德迭代法


    超松弛迭代法(SOR)


    共轭迭代法

    牛顿迭代法

    代码实现案例:

    1. %% 原函数输入
    2. function y = newton(x)
    3. y = exp(-x/4)*(2-x)-1;%任意函数
    4. end
    5. % 保存要进行牛顿迭代的函数
    1. % 牛顿迭代函数生成
    2. function y = newton1(x)
    3. syms a;
    4. f = a - (newton(a)./diff(newton(a)));
    5. y = subs(f,x);%牛顿迭代公式
    6. end
    7. %如果直接用y和x来实现的话,在掉用原函数的时候就算出了具体数值,公式中的求导就会变为0
    8. % 无法求解,所以先用f,a来代替y和x,最后再进行替换,实现牛顿迭代公式。
    1. % 牛顿迭代
    2. x = input('x=');%开始迭代最初的x
    3. eps = input('eps=');%定义所要求解的精度
    4. syms x1;%定义两Xk+1和Xk的差,一次来限制精度的要求
    5. x1=100;
    6. syms xa;
    7. xa=x;
    8. syms xb;%记录上一个x和下一个x
    9. while x1>eps
    10. xb = xa;
    11. xa = newton1(xb);
    12. x1 = abs(xa-xb);%得到▲x
    13. end
    14. disp('该函数符合规定精度的解是:');
    15. double(xa)
    16. % xa即为所求的值

    Jacobi 迭代法函数

    代码实现案例:

    1. function [x,y] = Jacobi(n, A ,b)
    2. %y = zeros(1000,1);
    3. eps = 1.0e-6;
    4. D = diag(diag(A));
    5. L = -tril(A, -1);
    6. U = -triu(A, 1);
    7. B = D\(L+U);
    8. f = D\b;
    9. count = 1;
    10. x0 = zeros(n,1);
    11. x = B*x0 + f;
    12. tic;
    13. while norm(x-x0)> eps
    14. x0 = x;
    15. %y(count) = norm(x-A\b);
    16. x = B*x0 + f;
    17. count = count + 1;
    18. if count > 2000
    19. disp('error:该矩阵不收敛');
    20. return;
    21. end
    22. end
    23. toc;
    24. y = toc;
    25. disp(count);
    26. end

    Gauss-Seidel 迭代法函数

    代码实现案例:

    1. function [x, y]= Gauss_Seidel(n, A ,b)
    2. %y = zeros(1000,1);
    3. eps = 1.0e-6;
    4. D = diag(diag(A));
    5. L = -tril(A, -1);
    6. U = -triu(A, 1);
    7. B = (D - L)\U;
    8. f = (D - L)\b;
    9. count = 1;
    10. x0 = zeros(n,1);
    11. x = B*x0 + f;
    12. tic;
    13. while norm(x-x0) > eps
    14. x0 = x;
    15. % y(count) = norm(x-A\b);
    16. x = B*x0 + f;
    17. count = count + 1;
    18. if count > 2000
    19. disp('error:该矩阵不收敛');
    20. return;
    21. end
    22. end
    23. toc;
    24. y = toc;
    25. disp(count);
    26. end

    逐次超松弛迭代法函数

    代码实现案例:

    1. function [x, y] = SOR(n, A ,b, w)
    2. y = zeros(1000,1);
    3. eps = 1.0e-6;
    4. D = diag(diag(A));
    5. L = -tril(A, -1);
    6. U = -triu(A, 1);
    7. B = (D - w*L) \ ((1-w) * D + w*U);
    8. f = w * inv(D - w*L) * b;
    9. count = 1;
    10. x0 = zeros(n,1);
    11. x = B*x0 + f;
    12. tic;
    13. while norm(x-x0) > eps
    14. x0 = x;
    15. y(count) = norm(x-A\b);
    16. x = B*x0 + f;
    17. count = count + 1;
    18. if count > 2000
    19. disp('error:该矩阵不收敛');
    20. return;
    21. end
    22. end
    23. toc;
    24. y = toc;
    25. disp(count);
    26. end

    共轭梯度法函数

    代码实现案例:

    1. function [x, y] = CG(n, A , b)
    2. y = zeros(1000,1);
    3. eps = 1.0e-6;
    4. x0 = zeros(n,1);
    5. r0 = b - A * x0;
    6. p0 = r0;
    7. count = 1;
    8. tic;
    9. while norm(p0) > eps
    10. a = r0'*r0/(p0'*A*p0);
    11. x = x0 + a*p0;
    12. r = r0 - a*A*p0;
    13. B = r'*r/(r0'*r0);
    14. p = r + B*p0;
    15. p0 = p;
    16. r0 = r;
    17. x0 = x;
    18. % y(count) = norm(x-A\b);
    19. count = count + 1;
    20. if count > 2000
    21. disp('error:该矩阵不收敛');
    22. return;
    23. end
    24. end
    25. toc;
    26. y = toc;
    27. disp(count);
    28. end

  • 相关阅读:
    博客之QQ登录功能(二)
    ES通过Collapse实现类似SQL over开窗函数功能
    Guava-RateLimiter详解
    vscode中配置python环境
    Shell编程中Shift的用法
    shared_ptr初始化、循环引用、线程安全问题
    微信APP支付完整版
    tensorflow 中的Variable 和 get_variable
    GPT-5技术突破预测:革新NLP的未来
    ThreadLocal保存用户信息
  • 原文地址:https://blog.csdn.net/weixin_51367832/article/details/126975906