matlab实现牛顿迭代法求解非线性方程组

2023-05-16

http://hi.baidu.com/aillieo/blog/item/0800e2a10ac9a59647106493.html

已知非线性方程组如下
3*x1-cos(x2*x3)-1/2=0

x1^2-81*(x2+0.1)^2+sin(x3)+1.06=0

exp(-x1*x2)+20*x3+(10*pi-3)/3=0

求解要求精度达到0.00001

————————————————————————————————

首先建立函数fun

储存方程组编程如下fun.m保存到工作路径中:

function f=fun(x);

%定义非线性方程组如下

%变量x1 x2 x3

%函数f1 f2 f3

syms x1 x2 x3

f1=3*x1-cos(x2*x3)-1/2;

f2=x1^2-81*(x2+0.1)^2+sin(x3)+1.06;

f3=exp(-x1*x2)+20*x3+(10*pi-3)/3;

f=[f1 f2 f3];

————————————————————————————————

建立函数dfun

用来求方程组的雅克比矩阵dfun.m保存到工作路径中:

function df=dfun(x);

%用来求解方程组的雅克比矩阵储存在dfun

f=fun(x);

df=[diff(f,'x1');diff(f,'x2');diff(f,'x3')];

df=conj(df');

————————————————————————————————

编程牛顿法求解非线性方程组将newton.m保存到工作路径中:

function x=newton(x0,eps,N);

con=0;

%其中x0为迭代初值eps为精度要求N为最大迭代步数con用来记录结果是否收敛

for i=1:N;

    f=subs(fun(x0),{'x1' 'x2' 'x3'},{x0(1) x0(2) x0(3)});

    df=subs(dfun(x0),{'x1' 'x2' 'x3'},{x0(1) x0(2) x0(3)});

    x=x0-f/df;

    for j=1:length(x0);

        il(i,j)=x(j);

    end

    if norm(x-x0)<eps

        con=1;

        break;

    end

    x0=x;

end

 

%以下是将迭代过程写入txt文档文件名为iteration.txt

fid=fopen('iteration.txt','w');

fprintf(fid,'iteration');

for j=1:length(x0)

    fprintf(fid,'         x%d',j);

end

for j=1:i

    fprintf(fid,'\n%6d     ',j);

    for k=1:length(x0)

        fprintf(fid,' %10.6f',il(j,k));

    end

end

if con==1

    fprintf(fid,'\n计算结果收敛!');

end

if con==0

    fprintf(fid,'\n迭代步数过多可能不收敛!');

end

fclose(fid);

————————————————————————————————

运行程序

matlab中输入以下内容

newton([0.1 0.1 -0.1],0.00001,20)

————————————————————————————————

输出结果

ans =

 

    0.5000    0.0000   -0.5236

 

——————————————————————————————————————————————————

iteration中查看迭代过程

 

iteration         x1         x2         x3

     1        0.490718   0.031238  -0.519661

     2        0.509011   0.003498  -0.521634

     3        0.500928   0.000756  -0.523391

     4        0.500227   0.000076  -0.523550

     5        0.500019   0.000018  -0.523594

     6        0.500005   0.000002  -0.523598

     7        0.500000   0.000000  -0.523599

计算结果收敛

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

matlab实现牛顿迭代法求解非线性方程组 的相关文章

随机推荐

  • mysql: [ERROR] mysql: unknown option

    前提条件 xff1a 1 开启用户远程连接权限 2 防火墙或安全组开通3306端口 如果上面两条都OK 那就是网络出口限制了 xff0c 换个热点或者其它单独网络试试
  • 【odroid-xu3】 ODROID-XU3硬件连接和烧写过程

    主要介绍硬件环境和系统的烧写 xff0c 有什么问题后面再补充吧 xff0c 实际上官方提供的工具向用户屏蔽了好多细节 开发板 xff0c 如果不自己来定制系统 xff0c 也就没有什么意思了 这个odroid xu3本身提供了丰富的资源和
  • ERROR 1805 (HY000): Column count of mysql.user is wrong. Expected 45, found 43. The table is probabl

    执行grant命令报错如标题 解决办法 xff1a 升级MySQL xff0c 如下命令输入密码即可 mysql upgrade p
  • The JAVA_HOME environment variable is not defined correctly,

    linux安装maven查看版本时提示如标题 xff1a root 64 iZ2zeiyfk6wfvd1y5al5maZ middleware mvn version The JAVA HOME environment variable i
  • zabbix重启服务器后Service Unavailable

    查看错误日志 xff1a tail f var log httpd error log 日志提示不存在php目录下的zabbix sock文件 xff1b 再查看端口 xff1a 发现php的9000端口没起来 xff1b 解决办法 xff
  • linux安装anaconda3

    wget https repo anaconda com archive Anaconda3 2020 11 Linux x86 64 sh sh Anaconda3 2020 11 Linux x86 64 sh xff08 一路回车和y
  • linux安装zookeeper单点

    需要有jdk环境 安装java yum list java 1 8 yum install java 1 8 0 openjdk y 下载地址 http zookeeper apache org wget tar zvxf zookeepe
  • CAN总线网络的传输模式

    CAN总线网络的传输模式根据触发条件的不同 xff0c 在车身CAN网络中可分为事件型 周期性及混合型三种传输模式 xff1b 1 事件型传输模式 xff1a 随着类型或数据的转变及时发送的消息 此类型消息的好处是极少占用总线资源 xff0
  • matlab中m文件的命名规则

    matlab的m文件的命名规则 xff1a 1 文件名命名要用英文字符 xff0c 首字符不能是数字或下划线 xff1b 2 文件名不能与matlab的内部函数名相同 m文件名的命名尽量不要是简单的英文单词 xff0c 最好是由大小写英文
  • 2014去哪儿校招笔试

    共 3 43 2 43 2 个题 开发 前3 个必做 xff0c 其他选做 测试或web 开发 前 2 个必做 43 另外 2 个必做 1 字符串split 43 翻转 2 实现 访问历史记录 xff0c insert next pre 3
  • MicroStrategy笔试

    1 coding判定二叉树是否是有序二叉树 2 一个有序数组A xff08 buffer 足够大 xff09 xff0c 和一个有序数组 B xff0c 设计算法 xff0c merge 两个数组后有序 xff0c 不使用任何额外的内存空间
  • 欢迎使用CSDN-markdown编辑器

    能力培养 与team leader讨论 xff0c 大抵将能力培养分成三类 业务能力 解决具体反馈的问题 xff1b 总结通用的解决方案 xff1b 从根本上改善根本问题技术能力 设计架构的能力 xff0c 注重性能的改善泛化能力 明确问题
  • 一些5G整理

    鲁棒性 设计 相对于终端成本 xff0c 网络掉线的损失是行业客户是不可接受的 xff0c 所以行业终端鲁棒性设计很重要 这里的鲁棒性是指排除了前述的散热 环境可靠性等自身设计后面对其他突发未知情况的还能可靠应用的能力 业内对于鲁棒性的设计
  • ES设置多个自定义分词器,每个分词器使用不同的词库

    ES中如何设置自定义分词器并且每个分词器使用自己定义的词库 xff1f 1 首先在ansj cfg yml中配置 然后在ansj library properties文件中添加词典放置路径 ansj library properties和l
  • 开发原则

    1 提供完整的数据 xff0c 不需要调用者进行额外的处理 2 测试 xff0c 保证比较对象要都是真实正确的 3 以业务需求为驱动 xff0c 兼顾系统架构升级
  • Windows下多台电脑共享剪切板的方法

    转自于 http www microsoft com china MSDN library WebServices WebServices WebServices mspx mfr 61 true
  • Cisco Packet Tracer模拟器使用

    第一篇 熟悉界面 一 设备的选择与连接 在界面的左下角一块区域 xff0c 这里有许多种类的硬件设备 xff0c 从左至右 xff0c 从上到下依次为路由器 交换机 集线器 无线设备 设备之间的连线 xff08 Connections xf
  • 各种路由器接口与连接方法

    转自于 http bbs pcsoft com cn thread 138952 1 4 html 路由器所在的网络位置比较复杂 xff0c 既可是内部子网边缘 xff0c 也可位于内 外部网络边缘 同时为了实现强大的适用性 xff0c 它
  • line vty 0 4 什么意思

    转自于 http hi baidu com rxlly blog item 9072bc397ae18bde7c1e71f6 html line vty 0 4是不是指启用5个telnet会话的意思 xff1f 那line vty 0 0是
  • matlab实现牛顿迭代法求解非线性方程组

    http hi baidu com aillieo blog item 0800e2a10ac9a59647106493 html 已知非线性方程组如下 3 x1 cos x2 x3 1 2 61 0 x1 2 81 x2 43 0 1 2