牛顿(Newton)迭代法求解非线性方程以及方程组的Matlab实现
必做题目比较简单,写得有些随意,主要还是第二个拓展题目的难度比较高
1.Newton迭代法解非线性方程
function [] = Newton_Die(x,tol,N)
f=cos(x)-x; %f(x)
df=-sin(x)-1; %f(x)的导数
for k=1:Nx_old=x;x=x_old-f/df;f=cos(x)-x; %更新f的值df=-sin(x)-1; %更新df的值fprintf('迭代次数=%d\tx=%.10f\n',k,x)if abs(x_old-x)<tolbreakendif k==Ndisp('达到最大迭代次数')end
end
end
2.Newton迭代法解非线性方程组
function [X] = Newton_Z(X,tol,N)
n = input('输入未知数的个数:');
syms x [1 n] %创建n个未知数变量
ff=cell(n,1); %初始化f(xk)——带入Xk值之前为符号表达式——cell储存
F=zeros(n,1); %初始化f(xk)——带入Xk值之后为矩阵——数组储存
Jx=cell(n,n); %初始化J(xk)——带入Xk值之前为符号表达式——cell储存
J=zeros(n,n); %初始化J(xk)——带入Xk值之后为矩阵——数组储存
for i=1:nf=input('请输入方程:');ff{i,1}=f;for j=1:nJx{i,j}=diff(f,x(j)); %求Jacobi矩阵end
end
Jx
for k=1:N %定义最大迭代次数X_old = X;for i=1:nff_cpoy=ff{i,1};for u=1:n %求f(xk)的值if u~=nff_cpoy=subs(ff_cpoy,x(u),X(u,1)); %对符号表达式逐个赋值elseF(i,1)=vpa(subs(ff_cpoy,x(u),X(u,1)));%赋值完成后传给Fendendfor j=1:nJx_copy=Jx{i,j};for v=1:n %求J(xk)的值if v~=nJx_copy=subs(Jx_copy,x(v),X(v,1));%对符号表达式逐个赋值elseJ(i,j)=vpa(subs(Jx_copy,x(v),X(v,1)));%赋值完成后传给JendendendendX = X-J\F; %Newton迭代公式fprintf('迭代次数=%d ',k)for i=1:nvalue=X(i,1);fprintf('x%d=%.8f ',i,value)endfprintf('\t')fprintf('精度:%.10f\n',norm(X_old-X, inf))if norm(X_old-X, inf)<tol %无穷范数定义终止条件breakendif k==Ndisp('达到最大迭代次数')end
end
传入题设数据有:
>> Newton_Die(0.5,1e-5,100)
迭代次数=1 x=0.7552224171
迭代次数=2 x=0.7391416661
迭代次数=3 x=0.7390851339
迭代次数=4 x=0.7390851332
Newton_Z([1;1;1],1e-5,100)
输入未知数的个数:3
请输入方程:3*x1-cos(x2*x3)-0.5
请输入方程:x1^2-81*(x2+0.1)^2+sin(x3)+1.06
请输入方程:exp(-1*x1*x2)+20*x3+(10*pi-3)/3Jx =3×3 cell 数组{[3 ]} {[x3*sin(x2*x3) ]} {[x2*sin(x2*x3)]}{[2*x1 ]} {[- 162*x2 - 81/5]} {[cos(x3) ]}{[-x2*exp(-x1*x2)]} {[-x1*exp(-x1*x2)]} {[20 ]}迭代次数=1 x1=0.91968721 x2=0.46082246 x3=-0.50338764 精度:1.5033876355
迭代次数=2 x1=0.50100049 x2=0.18743348 x3=-0.52086923 精度:0.4186867278
迭代次数=3 x1=0.50054294 x2=0.06115345 x3=-0.52200096 精度:0.1262800240
迭代次数=4 x1=0.50010444 x2=0.01161711 x3=-0.52329515 精度:0.0495363479
迭代次数=5 x1=0.50000551 x2=0.00060562 x3=-0.52358294 精度:0.0110114900
迭代次数=6 x1=0.50000002 x2=0.00000183 x3=-0.52359873 精度:0.0006037894
迭代次数=7 x1=0.50000000 x2=0.00000000 x3=-0.52359878 精度:0.0000018264
另附运行截图
牛顿(Newton)迭代法求解非线性方程以及方程组的Matlab实现相关推荐
- 求解非线性方程组的牛顿法c语言,牛顿下山法求解非线性方程(组)(C实现)...
1.算法描述 (1)符号说明与基本假设 对于非线性方程组: (1) 引入向量: 可将(1) ...
- 牛顿下山法求解非线性方程(组)(C实现)
1.算法描述 (1)符号说明与基本假设 对于非线性方程组: (1) 引入向量: 可将(1) ...
- python迭代法求解非线性方程_荐【数学知识】非线性方程求解的二分法以及牛顿迭代法...
[数学知识]非线性方程求解的二分法以及牛顿迭代法 本博客不谈及理论推导,只提供代码实现,关于理论推导,大家可以查看其它博客文章. 导入包 import sys import math import s ...
- 简单迭代法、牛顿法、弦割法、布洛依登法求解方程或方程组【Matlab】
利用迭代法求解定非线性方程及方程组,使得误差不超过10^(-8).同时应用迭代加速技术,提交迭代运算效率. 此题需要用到的MATLAB代码及附录: 附录6 二分法作根的隔离 % 附录6 二分法作根的隔 ...
- matlab 一元方程程序,用牛顿方法解一元非线性方程的根(Matlab实现)
题目:用牛顿法求方程x-cos(x)=0的实根(精确到1E-6). (1)要求用函数调用. (2)进一步研究和弦截法作比较. 算法分析: (1) 此题是利用牛顿方法解一元非线性方程的根.( ...
- 数值分析第一次作业-牛顿迭代法求解二元非线性方程组
1.问题 求解如下方程组: 2.算法 3.代码实现 # *coding:utf-8 * import math delta = 5e-6 ;eps = 1e-6 x0 = 1;y0 = 1 er = ...
- Newton迭代法求解Toeplitz矩阵逆的程序
说明: 迭代法的收敛性和矩阵的条件数相关,条件数大于1K肯定不收敛,小于100肯定收敛 100--1000则要适当选择截断的小量,采用迭代法的另一种多参数调用方式 程序清单: %%%%%%%%%%%% ...
- matlab怎么求解多元非线性方程组,利用MATLAB如何求解如下非线性方程组,
matlab会认为所有未指定为待求变量的字符比如a.b.v.w等为符号参数,比如在你的式子 [t1,t4]=solve('a*cos(w*t1)-a*cos(w*t4)+(t4-t1)*v=2*pi* ...
- python牛顿法解非线性方程组_萌新请教牛顿法求解三元非线性方程组
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 请问牛顿迭代法求解三元非线性方程组,不同迭代初值貌似有很多不同结果,如何求解到满足要求的解,0 FindRoot[{-6.565159793181527` ...
最新文章
- USB 3G驱动和USB HOST驱动加载
- shiro学习(3):用户权限
- 【平台兼容性】jeecg部署weblogic 测试,修改配置方法
- 微信找不到nfc功能_手机的NFC如何使用?3分钟教会你!
- python3操作excel(xls与xlsx版本的爱恨情仇)
- 数据结构笔记(二十三)--哈夫曼树
- ETL增量单表同步简述_根据dateTime增量
- 【转】Jenkins 构建触发器操作详解
- 怎么禁止使用计算机的软件,电脑如何禁止程序运行 一键彻底禁止电脑软件运行方法...
- 阿里巴巴是怎么处理大数据的?重磅揭秘!
- php mysql webim_webim(icomet) 使用
- 最新章节 第138章 量子生物计算机,生生不息的世界
- 利用$randon和seed可以在测试脚本里面产生测试所需的赋值
- Cryptohack-Backpack Cryptography
- OpenStreetMap在线地图数据下载(全)
- CSS基础(样式声明、引用(行内样式、内部样式、外部样式、导入样式)、样式优先级)
- java计算机毕业设计宠物领养管理系统源码+数据库+系统+lw文档+部署
- 伊丽莎白一世 读后感
- jquery个性滚动条插件jquery.mCustomScrollbar.js的使用
- andorid studio 设置