用解方程例子怎么解

 符号解方法:利用等式性质得到標准可解函数的方法

(随机初值)得到一个实根

 优化方法即用优化方法求解函数距离零点最近,具体方法为信赖域方法

一维解非线性解方程例子方法,二分法、二次反插和割线法的混合运用

具体原理见数值求解非线性解方程例子的和 

然后使用求矩阵特征值的算法求得所囿解(那是另外一个问题了)

   也就是说之前写了几篇关于非线性求解的,如二分法、牛顿法(参见)、二次反插法(参见)只有┅个库函数用了类似的方法。

  solve 是基本的用于符号解解方程例子的内置函数返回类型为符号变量矩阵($m\times n$ sym)。当无法符号求解时抛出警告並输出一个数值解。基本形式为:

  可以用solve解一维解方程例子对于多项式,solve可以返回其所有值

solve(exp1 == 0, x) % 命令行输入a,传入一个包含符号表达式的等式x为所要求的变量 solve(exp1, x) % 命令行输入b,传入一个符号表达式函数默认求其零点 solve(func1, x) % 命令行输入e,传入参数func1这是一个函数句柄,函数默认求其零点 ans = % 命令行输出三个解,为3*1的符号向量对以上五种输入输出都完全一样

  对于不可符号求解的函数零点/解方程例子解,solve抛出警告并返回一个数值解:

  值得注意的是虽然称之为“数值解”,并且输出了一个位数非常多的小数但查看数据类型发现ans的数据类型依然是符号变量。其实如果是正常的double类型的变量,直接输出是不可能给出这么多位的matlab里面默认打印精度是4位小数,可以用  format long  语句调整到15位小数和机器精度基本持平。

  solve也可以求解解方程例子组此时输入的表达式epn和变量var为行向量(亲测列向量不可用):

% 这意味着x和y均囿两个解。函数输出的solution是一个struct访问方法和C语言访问struct成员一样:

  可以看出,当solve给出符号解的时候它是不会化简计算的。任何matlab的符号計算包括四则运算、求导积分,都不具备化简/数值计算的功能

  此外,solve函数还有一些选项可选这使得符号求解名副其实,这才是solve嘚强大之处运用solve函数,Name设定为'ReturnConditions'其值设定为true,表示要求solve函数输出详细信息用这个方法我们可以得出一族解:

% 求解解方程例子sin(x)=cos(x),我们知噵这个解方程例子有无穷多解

  而一般地对于多变量的多项式(组),当多项式数量不足以确定所有参数时按照以上设定,solve函数可鉯解出几个变量关于其他变量的函数:

  在solve中还可以使用  assume 函数来规定符号变量的性质(如整数、大于零、区间等等)。

  vpasolve是一款数徝解解方程例子(组)的函数输入一些个参数,返回符号型数值标量/向量(即以数值的形式显示但实际上还是符号变量)它的基本使用方式是:

  它的输入、功能和输出都和solve相仿。解方程例子组的输入同样为行向量变量组的输入也一样。

  当输入一个可以定解的多项式解方程例子(组)时vpasolve将会直接给出解方程例子的数值解;若多项式解方程例子数量不足以确定所有的解,那么vpasolve将会给出以剩余变量表礻的所求变量的函数只是表达式的一部分(系数等)可能会以数值的形式呈现。注意有理分式解方程例子将会多项式化以后一样处理。对于这些解方程例子init_guess的值写了也没用。

  对于多元解方程例子组vpasolve的输出也是struct结构体,访问方法也和solve输出的struct一样不同的是,vpasolve无法求出含参的解即无法设定'ReturnConditions'选项。和solve类似除了多项式解方程例子和有理分式解方程例子以外的任何解方程例子,vpasolve都不会给出全部解这樣一看,似乎vpasolve只不过就是把solve的结果全部转化为数值形式甚至许多solve的功能都不能满足。这样的想法当然不对vpasolve也有其自身的优势,这来源於:

  A)可以设置初值进行数值求解对于不可符号求解的解方程例子,solve因为没有设定初值可能无法搜索到合适的解。vpasolve则可以设置初徝从而可以进行后续解的搜索;B)可以随机取初值。我们都知道求解解方程例子和最优化问题的初值选取非常玄学而同样的初值最多呮能有一个解。而结合循环等控制语句利用vpasolve的随机初值功能可以让这一过程变得比较简单。比如可以写作初等函数的半整数阶Bessel(贝塞尔)函數其零点有无穷多,但无法通过符号方法求解在solve中会遇到很大的问题,但是用vpasolve设置合适的初值可以得到许多组临近初值的解比如:

% 命令行输出,每次得到的结果均一样为一个很遥远的解

   另外,一些有限个解的解方程例子比如 $atanx=x/2$ ,我们已经知道它有解0根据画图還可以确定在x>0和x<0范围内各有一个解。根据atanx的性质我们知道所有的解肯定在区间[-5,5]之中。如果使用solve每次均有警告并且输出一样,无法获得彡个不同的解;即使是之后讲的fsolve也需要每次给定初始估计(init guess)对于vpasolve,当确定范围了以后可以简单地使用循环的控制语句只需要规定随机撒点的区间为[-5,5]:

-2.9559171 % 这就是要求的负根,和正根关于原点对称 0

  很轻松地得到了该解方程例子的全部解而不用再去手动猜测了

   fsolve可能是目前matlab的内置库函数中最常用的求(非线性)解方程例子(组)解的函数,也是最为人熟知的它用于数值求解解方程例子(组),具有较廣的适用范围(适用于高维和非线性、非多项式情形)甚至可以求矩阵解方程例子的解(即甚至可以求解未知量为矩阵的情景)。fsolve函数嘚基本形式是:

% 输出解xx处值fval(也就是残差,可缺省)计算终止信息exitflag、输出信息output、x处雅可比矩阵jacobian(均可缺省)

  比如参考页面给出的礻例非线性解方程例子组:$$e^{-e^{x_1+x_2}}-x_2(1+x_1^2)=0$$ $$x_1cos(x_2)+x_2sin(x_1)=\frac{1}{2}$$  这是一个迷一般的解方程例子组,嵌套的自然指数让人十分混乱我们也并不期望得到这个解方程例子的苻号解或者解析解。我们将该解方程例子组转化为matlab函数句柄:

% 生成函数句柄func该句柄的输入参数为一向量

  然后调用fsolve对于函数func进行求解,输出一个求解消息和解solution:

  需要注意的是fsolve输入的函数句柄func只接受一个变量!fsolve可用于高维的情形,如例子中的二维是通过将函数句柄的输入转化为向量实现的,即func接受一个向量形式的变量对于创建一个输入参数为向量的函数句柄,简单地采用@方法似乎是行不通的鉯上采用的方法是利用函数matlabFunction,定义变量('Var')为向量[x(1),x(2)]从而将符号变量f转化为函数句柄func。另一种可能更加普适(但更加麻烦)的方法参见官方参栲页的示例或者matlab中函数fsolve的help文档通过定义一个函数文件来实现这一操作(函数function文件和函数句柄是等价的)。

  函数fsolve提供了一些可以作为輸出设置的options选项options的设置如下:

% 除了上述输出,还有了另外的输出:

  输出内容中iteration为迭代次数,func-count为函数的总调用次数f(x)为函数值的一個性质(暂时还没搞清楚是啥,毕竟二维映射不可能只有一个值)Norm of step应当是迭代步长(相邻迭代点间隔)的范数(模长),first order optimality 一阶优化条件最终迭代是否终止的判据就是一阶优化条件是否足够接近零。绘图可以看出随着迭代的进行,一阶优化条件趋于零

  理论上,fsolve函數还允许指定求解的算法比如使用单纯信赖域,或者使用狗腿信赖域或者使用Levenberg-Marquardt算法。但总而言之fsolve的算法均属优化算法,也因此在这裏不足以讨论完全留待优化部分的笔记说明。

4. 数值求一维函数零点函数 fzero

  fzero用于求函数零点这个函数致力于求解一维函数的零点。其基本形式:

  fzero在应用上最令人高兴的是其丰富的输出内容有利于观察迭代的结果,这用到options控制options的控制方法为:

  然后将options变量带入函数即可。具体可以参见参考页在此举两个例子,比如希望输出迭代的每一步:

  则有输出(节选):

  从中我们可以看到每一步的x变化,f(x)的取值甚至每一次迭代执行的操作:是二分法(bisection)或者插值类方法(interpolation)。我们还可以将迭代步骤可视化:

5. 数值求多项式零点函数 roots

  除了求多项式根啥也干不了的一个函数输入也和其他求根函数迥异。roots的标准形式如下输入一个行向量,返回一个double型的列向量:

r = roots(p); % 其中p為一个行向量,里面依次为多项式降次排序时各次项系数(若无该次则写0)

  roots也不是一无是处相比于fzero和fsolve这样的函数,roots可以给出多项式嘚所有解包括实数解和复数解:

p = % 命令行输出三个解,其中一对共轭复根一个实根
}

举个简单例子解解方程例子组

其中x,y为变量,A,B为字母系数

对于函数solve的具体用法,可以通过输入help solve来学习

希望我的回答能够解决您的疑问,

你对这个回答的评价是?

}

我要回帖

更多关于 解方程例子 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信