matlab 迭代我使用matlab中的fsolve函数解方程组,老是出现exitflag=0,我查
答案:2 悬赏:0 手机版
解决时间 2021-03-08 01:01
- 提问者网友:椧運幽默
- 2021-03-07 03:46
matlab 迭代我使用matlab中的fsolve函数解方程组,老是出现exitflag=0,我查
最佳答案
- 五星知识达人网友:患得患失的劫
- 2021-03-07 04:07
在后面加上optimset('MaxIter',最大迭代次数),例如x = fsolve(@myfun,[2 3 4],optimset('MaxIter',100000))======以下答案可供参考======供参考答案1:有些方程本身就不收敛,无解的,是没有办法的有些需要改变方程的形式,构造新的迭代形式供参考答案2:1.exitflag>0---算法收敛=0---达到最大迭代次数而停止你这里出现=0,不见得是不收敛,但是至少肯定此迭代公式收敛速度过慢。初值的选择固然非常重要,但是要不断尝试显然不是办法。2.我想说一说,如何构造迭代函数使之具有较快的收敛速度,只说方程,方程组同理。把求解方程g(x)=0转化为求不动点问题,从不动点方程f(x)=x自然引出迭代公式xn+1=f(xn).显然,f的构造方法不同,导致的收敛性(收敛或发散)及收敛速度均有不同。从你目前的f出发,构造一族新的函数h(a,x)=af(x)+(1-a)x, .........(*)其中,a取[0,1]间的常数。注意到h(0,x)=x,h(1,x)=f(x),即y=x,y=f(x)都包含在该函数族中。取定某a,对于h(a,x)的不动点,有:x=h(a,x)=af(x)+(1-a)x,移项,ax=af(x),即x=f(x),故h的不动点也是f的不动点。这样,可选择一组a的值来观察函数族(*)的变化,最后选定某a值做迭代。3.关于迭代y=f(x)的收敛性,可使用下面定理以加以验证:y=f(x)在[a,b]上连续,且a供参考答案3:在后面加上optimset('MaxIter',最大迭代次数),例如 x = fsolve(@myfun,[2 3 4],optimset('MaxIter',100000))供参考答案4:在后面加上optimset('MaxIter',最大迭代次数),例如 x = fsolve(@myfun,[2 3 4],optimset('MaxIter',100000))1.exitflag >0---算法收敛 =0---达到最大迭代次数而停止 你这里出现=0,不见得是不收敛,但是至少肯定此迭代公式收敛速度过慢。初值的选择固然非常重要,但是要不断尝试显然不是办法。 2.我想说一说,如何构造迭代函数使之具有较快的收敛速度,只说方程,方程组同理。 把求解方程g(x)=0转化为求不动点问题,从不动点方程f(x)=x自然引出迭代公式xn+1=f(xn).显然,f的构造方法不同,导致的收敛性(收敛或发散)及收敛速度均有不同。 从你目前的f出发,构造一族新的函数 h(a,x)=af(x)+(1-a)x, .........(*) 其中,a取[0,1]间的常数。注意到h(0,x)=x,h(1,x)=f(x),即y=x,y=f(x)都包含在该函数族中。 取定某a,对于h(a,x)的不动点,有: x=h(a,x)=af(x)+(1-a)x, 移项,ax=af(x),即x=f(x),故h的不动点也是f的不动点。这样,可选择一组a的值来观察函数族(*)的变化,最后选定某a值做迭代。 3.关于迭代y=f(x)的收敛性,可使用下面定理以加以验证: y=f(x)在[a,b]上连续,且a任选一种方法即可供参考答案5:你解的是线性方程组的话用solve就可以了,不会出现其它问题,若是微分方程组或偏微方程组,那就有点麻烦了,最好套用工程背景进行求解,比如可用振动理论中的求解震动规律的方法,要活学活用!供参考答案6:楼主没有给出具体的问题,我们在这不好回答。我猜你是在解一个比较特殊的非线性的方程组。但说句实话,对于病态的方程组,很少有人用fsolve去解。建议你用用启发式算法,比如matlab自带的遗传算法(Genetic Algorithm),模拟退火(Simulated Annealing)。当然你也可以在file exchange里下载网友提供的m文件,ant colony ,tabu search 等等如果你对matlab不熟的话,建议你干脆换一个软件,mathematica,可以免去很多需要用户设定初始值,迭代条件的这些麻烦。
全部回答
- 1楼网友:大漠
- 2021-03-07 05:12
正好我需要
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯