第3章 Matlab非线性方程求解与迭代法.ppt

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 Matlab非线性方程求解与迭代法

第3章 非线性方程(组)求解与迭代法 伍水生 jisuanjihuagong@126.com 化学工程学院 2011-10 本章知识要点 本章的所要解决的典型问题 在945.36kPa(9.33atm)、300.2K时,容器中充以2mol氮气,试求容器体积。 已知此状态下氮气的P-V-T关系符合范德华方程,其范德华常数为a=4.17atm?L/mol2,b=0.0371L/mol 求解非线性方程的方法 二分法 基本原理 : 若 f(x) 在[a,b]上连续且单调,f(a)·f(b)0 ,则根据连续 函数的介值定理,f(x)=0在(a,b)有惟一根ξ。 function y=fun(x) y=x^3-3*x+1; 二、 牛顿法 牛顿法是求解方程f (x) = 0的一种重要的迭代法。它是一种将非线性方程f (x) = 0逐步线性化的方法,是解代数方程和超越方程的有效方法之一。 设:已知方程f (x) = 0的一个近似根x0,把f (x)在x0处作泰勒展开, clear all e=0.001;%精度 x0=1;%初值 k=1; x(k)=0.5; while abs(x(k)-x0)e x0=x(k); k=k+1; x(k)=x0-fun(x0)/dfun(x0,1e-4) end x 迭代法原理 迭代法的收敛性 迭代法意义示意图 多项式函数 Matlab多项式函数 Polyval 多项式的值 Polyder 多项式微分 Polyfit 多项式拟合 Conv,Deconv 多项式乘法和除法 Roots 多项式求根 简单多项式函数的使用 求解方程: fzero函数的使用 fzero函数初值的选取 fsolve函数 fsolve函数的使用 fsolve函数的应用 在铜管内在1 atm下将异丙醇加热到400℃。已知铜是生产丙酮和丙醛的催化剂,或许还有某些异丙醇异构化为正丙醇。这三种产物的生成可用如下三个独立反应表示: iC3H7OH(IP) = n C3H7OH(NP) K1 = 0.064 iC3H7OH(IP) = (CH3)CO(AC)+H2 K2 = 0.076 iC3H7OH(IP) = C2H5CHO(PR) +H2 K3 = 0.00012 后续加工步骤需要正丙醇,虽然可含丙酮,但丙醛含量不能超过0.05(mol)%。在上述反应条件下,是否存在违反这种规定的可能性? 数学模型:各反应的化学平衡方程如下 本讲小结 二分法以及牛顿法的matlab程序 sol=roots(C) [sol,feval,exitflag,output]=fzero(@fun,x0,options,p1,p2,...) [sol,feval,exitflag,output,jacobian]=fsolve(@fun,x0,options,p1,p2,...) 练习 编制matlab程序,求方程: x3-3.2x2+1.9x+0.8=0 * 数值计算 单个非线性方程求解 非线性方程组求解 迭代法 MATLAB 求解非线性方程(组)的相关函数 数学模型: 非线性方程(组)在化学工程中的作用 多组分混合溶液的沸点、饱和蒸气压计算 流体在管道中阻力计算 多组分多平衡级分离操作模拟计算 平衡常数法求解化学平衡问题 定态操作的全混流反应器的操作分析 二分法 牛顿法 不动点迭代 威格斯坦法迭代 割线法 编程过程 : 1. 令x0=(a+b)/2,计算f(x0); 2. 若f(x0)=0,则x0为所求的根,输出ξ=x0; 若f(a)· f(x0)0,则令a=a, b=x0; 若f(a)· f(x0)0,则令a=x0, b=b; 3. 若b-a≤ε(ε为预先给定的精度要求),输出ξ=(a+b)/2。 x2 a b ξ x0 x1 x f(x) function [x,yc]=bisection(fun,a,b,tol) % fun_2:即函数f(x) % a b:求解区间 % x :f(x)=0的根 % yc:f(c) % tol:精度 ya=feval(fun,a); %feval:求函数值 yb=feval(fun,b); if ya*yb0,return,end while abs(ya-yb) tol x=(a+b)/2; yc=feval(fun,x); if ya*yc0 a=x;ya=yc; else b=x;yb=yc; end end 执行MATLAB命令: [x,y]=bisection(fun,0,1,1e-3) x = 0.3474 y = -3.0536e-004 结果: 若取前两项来近似代替f (x)(

文档评论(0)

asd522513656 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档