Matlab迭代算法实现

2023-11-02

牛顿迭代法

雅可比迭代法


高斯赛德迭代法


超松弛迭代法(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

共轭梯度法函数

代码实现案例:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Matlab迭代算法实现 的相关文章

  • 如何在 MATLAB 中将矩阵元素除以列总和?

    有没有一种简单的方法可以将每个矩阵元素除以列和 例如 input 1 4 4 10 output 1 5 4 14 4 5 10 14 以下是执行此操作的不同方法的列表 使用bsxfun https www mathworks com he
  • 更新:随机将行添加到矩阵中,但遵循严格的规则

    以下是一个更大的矩阵的一部分 0 1 0000 1 0000 77 0000 100 0000 0 0 2500 0 1 0000 1 0000 72 0000 100 0000 0 2500 0 2500 0 1 0000 1 0000
  • 如何从 matlab 调用 Qtproject?

    我在 matlab 中有一个函数可以写入一个 file txt 我在 qt 项目中使用它 So 当我使用 unix 获取要运行的 qt 编译可执行文件时 我有一个 Matlab 文件 但出现错误 代码 unix home matt Desk
  • 像matlab一样在python中连接数组而不知道输出数组的大小

    我正在尝试在 python 中连接数组 类似于 matlab array1 zeros 3 500 array2 ones 3 700 array array1 array2 我在 python 中做了以下操作 array1 np zero
  • 考虑预分配速度[重复]

    这个问题在这里已经有答案了 我正在做以下事情 for i 1 m index 0 for j 1 n index index values i j 2 j 1 if j 1 symbol chip chip values index 1 e
  • MATLAB问题:在图块中引用变量的值[重复]

    这个问题在这里已经有答案了 可能的重复 matlab 绘图标题中的变量 https stackoverflow com questions 5629458 matlab variable in plot title 我想在图中引用 m 文件
  • matlab中优先级队列的实现方法

    matlab中有没有提供minpriorityqueue功能的库 import java util PriorityQueue import java util public class MyQueue Comparator
  • 如何从 Matlab 运行 R 脚本 [重复]

    这个问题在这里已经有答案了 我有 m 文件 我想用它来运行 R 脚本 我怎样才能做到这一点 Matlab文件 caller m some matlab code need to call a R script some matlab cod
  • 在Matlab图例中使用Latex?

    我的 matlab 不接受我的 Latex 例如 如果我使用legend b 6 rightarrow b 7 它没有向我显示箭头 我该如何解决这个问题 尝试使用 Latex 解释器 例如 legend b 6 rightarrow b 7
  • Matlab:如何读取以逗号作为小数分隔符的数字?

    我有很多 数十万 相当大 gt 0 5MB 的文件 其中数据是数字 但以逗号作为小数分隔符 使用像这样的外部工具对我来说是不切实际的sed s g 当分隔符是点时 我只使用textscan fid f f f 但我看不到更改小数点分隔符的选
  • matlab中简单正弦波的傅里叶变换

    我尝试显示简单正弦波的频谱 因为我们知道具有固定频率的单个正弦波必须在其频谱中出现峰值我编写了这段代码 但我无法得到这个峰值我的代码中有什么问题 clc nsteps 200 number of signal elements in tim
  • MATLAB 符号替换

    我知道在 MATLAB 中如果声明了 syms x y f x 2 y 2 grad gradient f 然后grad会存储值 2 x 2 y 如果我想评估梯度 2 2 I use subs f x y 2 2 这返回 4 4 我正在编写
  • 在matlab中融合2个以上的图像

    在 MATLAB 中 如何融合两个以上的图像 例如 我想要做什么imfuse但对于超过 2 个图像 使用两张图像 这是我的代码 A imread file1 jpg B imread file2 jpg C imfuse A B blend
  • 可以避免迭代元胞数组时的“s{1} 烦恼”吗?

    The s 1 标题的 烦恼 指的是下面的 for 块中的第一行 for s some cell array s s 1 unpeel the enclosing cell do stuff with s end This s s 1 业务
  • OpenCV功能类似于matlab的“查找”

    我正在寻找 openCV 中的一个函数来帮助我制作图像蒙版 例如在 MATLAB 中 B A or B 零 大小 A B A 10 c 有些功能可以让你通过mask向他们提出论据 按照您描述的方式创建面具 我认为您正在追求Cmp 或 Cmp
  • Matlab 的 fftn 在多线程下变得更慢?

    我可以访问 12 核机器和一些严重依赖 fftn 的 matlab 代码 我想加快我的代码速度 由于 fft 可以并行化 我认为更多的内核会有所帮助 但我看到的恰恰相反 这是一个例子 X peaks 1028 ncores feature
  • MATLAB 中的内存映射文件?

    我决定使用 memmapfile 因为我的数据 通常为 30Gb 到 60Gb 太大 无法放入计算机内存中 我的数据文件由两列数据组成 对应于两个传感器的输出 并且它们采用 bin 和 txt 格式 m memmapfile G E Str
  • Matlab 中的多行匿名函数? [复制]

    这个问题在这里已经有答案了 是否可以在 Matlab 中创建多行匿名函数 没有合适的例子在文档中 http www mathworks com help matlab matlab prog anonymous functions html
  • 在每次迭代中使用 for 循环的索引命名图像

    我正在使用 MATLAB 进行图像处理项目 我使用 for 循环在每次循环迭代时生成某种图像数据 图像大小不同 我的问题是如何阻止它在下一次迭代中覆盖图像 Img i j data 理想情况下我希望它有 Img 1 data for 1st
  • 将此 MATLAB 代码转换为 Python 时我做错了什么?

    我正在努力将生成波形的 MATLAB 代码转换为 Python 就上下文而言 这是原子力显微镜带激发响应的模拟 与代码错误无关 在 MATLAB 中从 r vec 生成的图形与我在 Python 中生成的图形不同 我是否正确地将 MATLA

随机推荐

  • es6中的generator函数详解

    Generator 函数的定义 语法上 Generator 函数是一个状态机 封装了多个内部状态 形式上 Generator是一个函数 不同于普通函数 是可以暂停执行的 所以函数名之前要加星号 以示区别 整个Generator函数就是一个封
  • 新手学编程必会的100个代码

    这是本文的目录 前言 1 for循环中的else条件 2 数字求和 3 随机数生成 4 将列表中的所有元素作为参数传递给函数 5 获取列表的所有中间元素 6 使用一行代码赋值多个变量 7 Python清空列表 8 通过Enum枚举同一标签或
  • 基本数据类型的包装类

    基本数据类型的包装类 基本数据类型 数值 整数int byte short long 浮点型 float double 字符 char 布尔 boolean java是面向对象的语言 所有的对象都是继承自Object 对象都有属性和方法 但
  • 告别csdn,迁移到自己的博客网站

    一年过去了 懵懵懂懂也学了一些web网安的知识 写了大概60多篇的文章吧 不过自己太懒了 就没放到csdn上 后面干脆自己搭了一个博客网站 用springboot vue写的 当然这里面参考了很多大佬的代码 无论如何 自己也还只是踏入安全圈
  • 实现数组洗牌函数

    我们可能最常使用打乱数组顺序的方法是 Array prototype sort const shuffle list gt list sort x y gt Math random 0 5 但这种方法不是完全随机的 我们可以使用 Fishe
  • Python爬取美女图片案例

    爬虫常规思路 1 分析网页 2 对网页发送请求 获取响应 3 提取解析数据 4 保存数据 本案例所用到的模块 import requests import parsel import os 一 分析网页 分析思路 这个图片网站和别的图片网站
  • linux无法启动oracle数据库,Oracle数据库无法启动?可能是Linux的锅

    近日 在初始化系统的时候 有报错 最后查的是因为部署在一台linux系统上的oracle数据库有异常 登陆到系统中 切换到oracle用户查看数据库状态时 报错现象如下 再查看磁盘空间使用情况df h查看 根目录磁盘空间已经满了 sda3磁
  • 开关电源仿真与设计基于spice 第2版 中译本_电子电路设计SIMetrix / SIMPLIS 8.4介绍及安装教程...

    SIMetrix SIMPLIS 为模拟和电力电子工程师提供专业的电路设计和仿真工具 SIMetrix和SIMPLIS是在SIMetrix开发环境中工作的独立模拟器 可提供原理图输入 波形捕获和内置脚本 SIMetrix是一种混合信号电路模
  • 【Leetcode刷题】算法:罗马数字转整数

    文章目录 一 问题 二 代码理解 一 问题 二 代码理解 class Solution def romanToInt self s str gt int answer 0 length len s d I 1 V 5 X 10 L 50 C
  • Windows小Tips:在终端中优雅使用Vim

    Vim 本是 Linux 系统上一款文本编辑器 它是操作 Linux 的一款利器 程序员熟练使用后效率会显著提升 作为同时Windows的我也希望在Windows如Linux中那般优雅使用Vim Menu 一 将VIM添加至终端 二 将Vi
  • 线性表之顺序存储结构

    线性表是n n 0 个数据类型相同的数据元素组成的有限序列 数据元素之间是一对一的关系 即每个数据元素最多有一个直接前驱和一个直接后继 线性表的顺序存储结构是指在计算机中用一组地址连续的存储单元依次存储线性表的各个数据元素 元素之间的逻辑关
  • Vue3学习记录——(1)MVC与MVVM

    1 传统的MVC模式 模型 Model 数据存储 视图 View 用户界面 控制器 Controller 业务逻辑 Model代表数据存储 主要用于实现数据的持久化 View代表用户界面 UI 主要用于实现页面的显示 Controller代
  • wpf自定义控件之依赖属性

    这篇文章的意义是 为wpf自定义控件 定义它的专属属性 这个属性不仅仅可以在c 中使用 也可以在xaml中使用 在xaml中赋值或者绑定 在wpf开发过程中 总会用到格式各样的控件 但是原生控件远远不能满足实际开发的需要 这时候wpf强大之
  • Android NDK Jni 开发语言使用C和C++的区别

    由于Android官方NDK例子大多使用C语言编写 所以当我们想用C 进行开发时 会出现种种错误 下面简单说说几点不同之处 代码中有部分不同之处 1 先来一个用C写的例子 1 hello c文件 在C中没有引用 传递的env是个两级指针 用
  • 关于C#的变量问题:1.变量的声明,赋值,作用域

    1 变量的声明 变量的使用是编写程序中的一个重要环节 首先要做到第一步就是定义变量的类型 因为你需要让编译器知道变量类型后 才能按照类型对该变量进行空间的配置 变量的定义是 在程序运行过程中 空间内的值是变化的 这个内存空间就称为变量 而声
  • Maven之 setting.xml配置文件详解

    setting xml配置文件 maven的配置文件settings xml存在于两个地方 1 安装的地方 M2 HOME conf settings xml 2 用户的目录 user home m2 settings xml 前者又被叫做
  • 面试官:说说微信小程序的支付流程?

    一 前言 微信小程序为电商类小程序 提供了非常完善 优秀 安全的支付功能 在小程序内可调用微信的API完成支付功能 方便 快捷 场景如下图所示 用户通过分享或扫描二维码进入商户小程序 用户选择购买 完成选购流程 调起微信支付控件 用户开始输
  • 腾讯面经部分题

    1 僵尸进程 在linux系统中 当用ps命令观察进程的执行状态时 经常看到某些进程的状态栏为defunct 这就是所谓的 僵尸 进程 僵尸 进程是一个早已死亡的进程 但在进程表 processs table 中仍占了一个位置 slot 由
  • Android开发 无线Wifi+WifiUtil工具类,直面秋招

    for int i 0 i lt wifiList size i ScanResult wifi wifiList get i if wifi SSID equals ssid Log i AddWifiConfig equals Wifi
  • Matlab迭代算法实现

    牛顿迭代法 雅可比迭代法 高斯赛德迭代法 超松弛迭代法 SOR 共轭迭代法 牛顿迭代法 代码实现案例 原函数输入 function y newton x y exp x 4 2 x 1 任意函数 end 保存要进行牛顿迭代的函数 牛顿迭代函