Matlab迭代算法实现

这篇具有很好参考价值的文章主要介绍了Matlab迭代算法实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

牛顿迭代法

雅可比迭代法


高斯赛德迭代法


超松弛迭代法(SOR)


共轭迭代法

牛顿迭代法

代码实现案例:

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

Jacobi 迭代法函数

代码实现案例:

function [x,y] = Jacobi(n, A ,b)

    %y = zeros(1000,1);
    eps = 1.0e-6;
    D = diag(diag(A));
    L = -tril(A, -1);
    U = -triu(A, 1);

    B = D\(L+U);
    f = D\b;

    count = 1;

    x0 = zeros(n,1);
    x = B*x0 + f;

    tic;
    while norm(x-x0)> eps
        x0 = x;
        %y(count) = norm(x-A\b);
        x = B*x0 + f;
        count = count + 1;
        if count > 2000
            disp('error:该矩阵不收敛');
            return;
        end
    end
    toc;
    y = toc;
    disp(count);
end

Gauss-Seidel 迭代法函数

代码实现案例:

function [x, y]= Gauss_Seidel(n, A ,b)

    %y = zeros(1000,1);
    eps = 1.0e-6;
    D = diag(diag(A));
    L = -tril(A, -1);
    U = -triu(A, 1);

    B = (D - L)\U;
    f = (D - L)\b;

    count = 1;
    x0 = zeros(n,1);
    x = B*x0 + f;

    tic;
    while norm(x-x0) > eps

        x0 = x;
       % y(count) = norm(x-A\b);
        x = B*x0 + f;
        count = count + 1;

        if count > 2000
            disp('error:该矩阵不收敛');
            return;
        end
    end
    toc;
    y = toc;
    disp(count);
end

逐次超松弛迭代法函数

代码实现案例:

function [x, y] = SOR(n, A ,b, w)

    y = zeros(1000,1);
    eps = 1.0e-6;
    D = diag(diag(A));
    L = -tril(A, -1);
    U = -triu(A, 1);

    B = (D - w*L) \ ((1-w) * D + w*U);
    f = w * inv(D - w*L) * b;

    count = 1;

    x0 = zeros(n,1);
    x = B*x0 + f;

    tic;
    while norm(x-x0) > eps

        x0 = x;
        y(count) = norm(x-A\b);
        x = B*x0 + f;
        count = count + 1;

        if count > 2000
            disp('error:该矩阵不收敛');
            return;
        end
    end
    toc;
    y = toc;
    disp(count);
end

共轭梯度法函数

代码实现案例:文章来源地址https://www.toymoban.com/news/detail-626880.html

function [x, y] = CG(n, A , b)

    y = zeros(1000,1);
    eps = 1.0e-6;
    x0 = zeros(n,1);
    r0 = b - A * x0;
    p0 = r0;

    count = 1;

    tic;
    while norm(p0) > eps
        a = r0'*r0/(p0'*A*p0);
        x = x0 + a*p0;
        r = r0 - a*A*p0;
        B = r'*r/(r0'*r0);
        p = r + B*p0;

        p0 = p;
        r0 = r;
        x0 = x;
       % y(count) = norm(x-A\b);
        count = count + 1;

        if count > 2000
            disp('error:该矩阵不收敛');
            return;
        end
    end
    toc;
    y = toc;

    disp(count);
end

到了这里,关于Matlab迭代算法实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包