第一范文网 - 专业文章范例文档资料分享平台

Matlab-fsolve

来源:用户分享 时间:2025/5/29 5:02:31 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

Matlb fsolve

使用fsolve时通过Maple(是目前世界上最为通用的数学和工程计算软件之一)使用数值逼近技术找到方程或方程组的一个的近似解。

fsolve语法是标准的Maple语法: fsolve(what,how);

其中,\”代表要解的方程(或方程组)”how”是指要求的变量。 要阅读关于解决方程的设置的详细信息,请参阅求解命令的说明。

使用fsolve解一个方程:fsolve由于采用数值模拟技术,而不是代数的,它要求方程数目与要求的变量数目相同。因此,当fsolving一个方程,方程只有一个不确定的变量是至关重要的。

有两种方法可以使用fsolve命令。第一个就像solve命令: > restart;

> fsolve(x^2+5*x=17,x);

-7.321825380, 2.321825380

上述示例表明fsolve,就像solve,知道多项式有多少期望的根,并试图找到他们(即使是复杂的)。当解一个超越方程时,fsolve通常是找到一个符合要求的解。

当一个方程有许多解,你要挑选出一个具体的时,fsolve的第二种使用方法特别重要。在这个版本的fsolve中,可以指定一个能得到解的域(区间)。例如,考虑方程

> eqn:=x=tan(x); eqn : = x=tan( x )

从plotting两侧,我们可以看到这个公式有很多解:

> plot({x,tan(x)},x=-8..8,-8..8,discont=true,thickness=2,color =black);

只使用fsolve这个方程将找到一个解: > fsolve(eqn,x); 0.

现在,假设我们想找到6和8之间解。然后我们输入 > fsolve(eqn,x,x=6..8);

7.725251837 > tan(%); 7.725251841

因此我们得到的解大约在7周围

什么会导致错误?除了语法错误,也有几件事情将导致使用fsolve时出问题。首先,与solve一样,要解的方程“变量”已经赋值就是可能的一种(也许,这就是一个在Maple会话期间遗忘)。这将导致在以下反应:

> x:=3: fsolve(x^2=4,x);

Error, (in fsolve) invalid arguments

其他的可能导致出错的事情涉及Maple的似乎无法找到一个解。这可能由以下两种情况之一导致:第一,有可能是无解 - 第二,Maple使用的数值方法可能需要用户的小援助。例如:

> x:='x':fsolve(sin(x)=exp(x^2),x);

fsolve

这种“无响应”表示Maple找不到一个解。但这是因为这个方程有没有解。有时,fsolve选择的最初的逼近不佳,导致随后无法找到一个解即使解存在。Maple在这种情况下返回一个消息,并建议选择“不同”开始间隔。在这种情况下,使用fsolve与指定域的第二个版本会解决这个问题。(当然,找到合适的域,最合理的要做的就是绘制方程双方的交汇点,并估计!)。

最后,如果方程数目和未知数数目不同,fsolve将返回一个错误消息: > fsolve(a*x=1,x);

Error, (in fsolve) a is in the equation, and is not solved for 当然,solve命令能够轻松地处理这个方程 > solve(a*x=1,x);

使用fsolve来解方程组:要与\”,“how”的语法一致,fsolve要求方程组和求解的变量列表被括在大括号{}里。例如:

> fsolve({2*x+y=17,x^2-y^2=20},{x,y}); {x =16.37758198, y =-15.75516397 } 重要的是要记住,方程的数量必须和未知数的数目相同,并没有其他未指明的变量在方程组里:

> fsolve({a*x+y=13,b*x-y=20},{x,y});

Error, (in fsolve) {a, b} are in the equation, and are not solved for

最后,我们注意到给fsolve一个搜索域是可能的(通常是最好的),- 这是通过给每个变量提供了一个长方形的盒状区域把他们分开间隔,从而fsolve在这个域中找到一个解。例如,让我们考虑解决上述方程组:

> eqn1:=2*x+y=17: eqn2:=x^2-y^2=20: 我们给方程的名称,主要是为了提醒你这是可能的。试验几个plot结果如下,这表明,上述“fsolve”语句只返回了两个交点中的一个:

我们可以像下面一样强制fsolve找到最左边的一个交点: > fsolve({eqn1,eqn2},{x,y},{x=4..8,y=0..10}); {y = 4.421830634, x = 6.289084683 }

这里的语法很重要!首先是要解的方程组(大括号括起来),然后是要求解的一组变量(大括号括起来),最后是变量范围(大括号括起来)清单。当解方程组时只有第三个选项(变量范围)是可选的。其他两个必须选择。

solve和fsolve照常,我们可以代入解到方程,以验证解是正确的。首先,我们给它一个名字:

> s:=%;

s :={ y = 4.421830634, x = 6.289084683 } > subs(s,eqn1),subs(s,eqn2);

17.00000000 = 17, 19.99999999 = 20 因此,它似乎起作用了。

很快我们就注意到最后输出的:19.99999999显然不是20,但它是Maple在这种情况下所能接近的。根据计算机/计算器的设计,所有计算机和计算器做算术运算时,一个数字的数量有限,因此,需要更多的数字值被四舍五入或略去。不精确的数字计算,导致不精确的结果,且较长的问题,涉及许多次计算,这可能会导致计算机/计算器产生的结果甚至没有接近正确的答案。

最后注意到 - 当你给变量的区间时,必须给出所有的变量范围。如果只指定某些而非所有的变量的区间,fsolve将不返回任何东西。

搜索更多关于: Matlab-fsolve 的文档
Matlab-fsolve.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c6fzo86qr5f2r4yi9c24o_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top