求助!关于fsolve求解方程的问题
我用fsolve求解代码中的超越方程得到的解与用fzero得到的解差别很大,我通过改变初值,fzero求解的根很稳定(需要的根),可是fsolve却不稳定,这是怎么回事,我该如何处理能够得到理想的解,请高手明示!clear all;clc;close all;
global T
format long
n0=;
options=optimset('display','on');
T=1;
=fsolve(@myfun,n0,options)
function y=myfun(n)
global T
x=n(1);
y=zeros(1,1);
w=sqrt(1+(6*x)^2);
y(1)=(3*x/w)*tanh(w/(2*T/log(2)))-x;
回复 楼主 小妮妮 的帖子
fsolve对初值的要求比较高,这是其本身的缺陷.你用fzero可以求出来,为什么还有fsolve呢? 因为fzero求解的是一元方程,我涉及的是方程组,所以要用fsolve 有人说可以通过调节TolX和TolFun来处理,可是这两个参数该调节到什么样的值能得到理想的值呢,有什么方法么?回复 板凳 小妮妮 的帖子
通过调节TolX和TolFun也只能猜测,并不能完美解决问题。你可以试一下其他的优化方法,matlab中搜索SQP(序列的二次规划)方法 谢谢楼上,我可以看看你说的那个方法。还有个问题,就是针对具体的方程TolX和TolFun 这两个参数具体取什么,是如何选取的,能详细说说么?回复 6楼 小妮妮 的帖子
自己看看fsolve的帮助文档就不难发现,你的问题用optimset命令解决。自己看看optimset和fsolve的帮助文档吧。 对于一元方程通过调节TolX和TolFun 可以解决这个问题,但是要是方程组,似乎就不行了,该如何处理?而且具体TolX和TolFun 选取多大值该如何选取,在帮助里根本没有说明。 fsolve是采用迭代法求解的如果是多元方程,其中的一个元取值扫过其所有符合的条件时另外一元还没有扫过。也就是有死角,这就要你对初始条件加以更具体的限定,不像一元方程那么随便 请问楼上你是说初值的设定问题么?设在根附近就可以吧。
页:
[1]