⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 解各种方程.txt

📁 matlab中解方程的主要命令,和详细的使用方法,希望对朋友门有用!
💻 TXT
📖 第 1 页 / 共 2 页
字号:


8.2 非线性方程式的实根 
---------------------------------------------------------------------------- 

-- 
-- 
如果求根的方程式不为多项式的形态 就不能用 roots 函数。而这类的方策’h半是非线 


性方程式, 其函数形态变化很大。对于解这类方程式的根,可以用 fzero函数,它其实 


是用来找一函数 f(x) 的 x 值代入时,会使该函数值为零 (f(x)=0);而这也就是根的 

性,因此我们可以用 fzero求根。 
要求任一方程式的根有三步骤: 
先定义方程式。要注意必须将方程式安排成 f(x)=0 的形态,例如一方程式为sin(x)=3 

 则该方程式应表示为 f(x)=sin(x)-3。可以 m-file 定义方程式。 
代入适当范围的 x, y(x) 值,将该函数的分布图画出,藉以了解该方程式的「长相」。 


由图中决定y(x)在何处附近(x0)与 x 轴相交,以fzero的语法fzero('function',x0) 即 


可求出在 x0附近的根,其中 function 是先前已定义的函数名称。如果从函数分布图看 


出根不只一个,则须再代入另一个在根附近的 x0,再求出下一个根。 
以下分别介绍几数个方程式,来说明如何求解它们的根。 
例一、方程式为 
sin(x)=0 
我们知道上式的根有 ,求根方式如下: 

  > > r=fzero('sin',3) % 因为sin(x)是内建函数,其名称为sin,因此无须定义它 

r = % 选择 x=3 附近求根 
3.1416 

  > > r=fzero('sin',6) % 选择 x=6 附近求根 

r = 
6.2832 
例二、方程式为先前提到的 MATLAB 内建函数 humps,我们不须要知道这个方程式的形 

为何,不过我们可以将它划出来,再找出根的位置。求根方式如下: 

  > > x=linspace(-2,3); 
  > > y=humps(x); 
  > > plot(x,y), grid % 由图中可看出在0和1附近有二个根 
  > > r=fzero('humps',1.2) 

r = 
1.2995 
例三、方程式为 
这个方程式其实是个多项式,我们说明除了用 roots 函数找出它的根外,也可以用这节 


介绍的方法求根,注意二者的解法及结果有所不同。求根方式如下: 
% m-function, f_1.m 
function y=f_1(x) % 定义 f_1.m 函数 
y=x.^3-2*x-5; 

  > > x=linspace(-2,3); 
  > > y=f_1(x); 
  > > plot(x,y), grid % 由图中可看出在2和-1附近有二个根 
  > > r=fzero('f_1',2); % 决定在2附近的根 

r = 
2.0946 

  > > p=[1 0 -2 -5] 
  > > r=roots(p) % 以求解多项式根方式验证 

r = 
2.0946 
-1.0473 + 1.1359i 
-1.0473 - 1.1359i 
例四、方程式为 
求根方式如下: 
% m-function, f_2.m 
function y=f_2(x) % 定义 f_2.m 函数 
y=x.^2.*sin(x)+cos(x); 

  > > x=linspace(-3,3); 
  > > y=f_2(x); 
  > > plot(x,y), grid % 由图中可看出在-1和3附近有二个根 
  > > r=fzero('f_2',-1); % 决定在-1附近的根 

r = 
-0.8952 

  > > r=fzero('f_2',3); % 决定在3附近的根 

r = 
3.0333 
例五、方程式为 
求根方式如下: 
% m-function, f_3.m 
function y=f_3(x) % 定义 f_3.m 函数 
y=2*exp(-x).*sin(2*pi*x)-0.5; 

  > > x=0:0.1:2; y=f_3(x); 
  > > plot(x,y), grid % 由图中可看出在0,0.5和1附近有三个根 
  > > r=fzero('f_3',0) % 决定在0附近的根 

r = 
0.0420 

  > > r=fzero('f_3',0.5) % 决定在0.5附近的根 

r = 
0.4368 

  > > r=fzero('f_3',1) % 决定在1附近的根 

r = 
1.1435 
---------------------------------------------------------------------------- 

-- 
9.1.1 梯形法 
---------------------------------------------------------------------------- 

-- 
-- 
MATLAB提供最简单的积分函数是梯形法trapz,我们先说明梯形法语法trapz(x,y),其中 


x,y分别代表数目相同的阵列或矩阵,而y与x的关系可以由是一函数型态(如y=sin(x)) 


或是不以函数描述的离散型态(像第八章介绍的x与y皆为离散点)。 
我们看一简单积分式 
以下为 MATLAB 的程式 

  > > x=0:pi/100:pi; 
  > > y=sin(x); 
  > > k=trapz(x,y) 

k = 
1.9998 
---------------------------------------------------------------------------- 

-- 
9.1.2 二次函数法 
---------------------------------------------------------------------------- 

-- 
-- 
MATLAB 另外提供二种积分函数,它们分别是辛普森法 quad 和牛顿-康兹法 quad8。三 

方法的精确度由低而高,分别为 trapz, quad, quad8。 
由于这二种方法依据的积分法不同于梯形法,因此它们的语法就和 trapz 不同;其语法 


为 quad('function',a,b) (quad8语法相同),其中function是一已定义函数的名称( 


如sin, cos, sqrt, log 等),而 a, b是积分的下限和上限。和 trapz比较,quad, 
quad8不同之处在于这二者类似解析式的积分式,只须设定上下限及定义要积分的函数; 


而 trapz则是针对离散点型态的数据做积分。 
我们看一简单积分式 
以下为 MATLAB 的程式 

  > > a=0; b=0.5; 
  > > kq=quad('sqrt',a,b) 

kq = 
0.2357 

  > > kq8=quad8('sqrt',a,b) 

kq8 = 
0.2357 
再来看一个较复杂的积分式 

  > > x=-1:0.17:2; 
  > > y=humps(x); 
  > > area=trapz(x,y) 

area = 
25.9174 

  > > x=-1:0.07:2; 
  > > y=humps(x); 
  > > area=trapz(x,y) 

area = 
26.6243 

  > > area=quad('hump',-1,2) 

area = 
26.3450 

  > > area=quad8('hump',-1,2) 

area = 
26.3450 
---------------------------------------------------------------------------- 

-- 
9.3.1 差分表示法 
---------------------------------------------------------------------------- 

-- 
-- 
我们知道一微分项的计算,可以在二相邻点 x+h 和 x 间函数取下列极限求得 
若将原连续的空间以多个离散点取代,即是。则上述的极限以离散点的方式计算,即是 

下的差分式 (difference equation) 
其中,而上式被称为前向差分,因为是以为参考点,另一点在它之前。上式的几何意义 

以二点函数值计算在的斜率。事实上,除了上式可计算在的微分值外,也可以下列二式 

而高阶微分项可以利用低阶微分项来计算,举例来说一个二阶微分式可以表示为 
所以对应的差分式有 
---------------------------------------------------------------------------- 

-- 
9.3.2 差分函数 
---------------------------------------------------------------------------- 

-- 
-- 
上述提及的后向差分式,在 MATLAB 有对应的diff 函数来计算二相临点的差值,它的语 


法为 diff(x),其中 x代表一组离散点 。假设有x, y(x)的数据为 
x=[1 3 5 7 9], y=[1 4 9 16 25] 
则 diff(x)=[2 2 2 2], diff(y)=[3 5 7 9],注意二者皆以后向差分计算且数据点只剩 


4 个而不是5个。而的数值微分则为 dy=diff(y)./diff(x)。 
因此要计算下列多项式在 [-4, 5] 区间的微分 
可依以下方式求解 

  > > x=linspace(-4,5); % 产生100个x的离散点 
  > > p=[1 -3 -11 27 10 -24]; 
  > > f=polyval(p,x); 
  > > plot(x,f) % 将多项式函数绘图 
  > > title('Fifth-deg. equation') 
  > > dfb=diff(f)./diff(x); % 注意要分别计算diff(f)和diff(x) 
  > > xd=x(2:length(x)); % 注意只有99个df值,而且是对应x2,x3,...,x100的点 
  > > plot(xd,dfb ) % 将多项式的微分项绘图 
  > > title('Derivative of fifth-deg. equation') 

假设我们要找出上述多项式的局部极值(local critical value),可以利用局部极值所 

点的微分为零,所以在这个点的左侧及右侧的二点微分值一定是一正一负,因此这二点 

微分值相乘为负值,可针对此性质找出局部极值所在点。以原多项式的数据示范如下: 



  > > product=dfb(1:length(dfb)-1).*dfb(2:length(dfb)); % 注意二相临点值相乘的 


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -