我请分析下,帮忙写一个Matlab的子程序,解方程!?
比如有方程f=f(x),g=g(x),a<x<b,且f,g在[a,b]上连续可导。现在要求出f(x)=0在[a,b]上所有的根,并代入g=g(x),取使g最小的那个根作为方程f(x)=0的所求根。要求:
1、使用f=f(x)的导函数df=df(x),使df(x)=0;
2、求出df(x)=0在[a,b]上所有的根x1,x2,x3,……,如果df(x)=0在[a,b]无解,直接进行第4步;
3、将a,x1,x2,x3,……,b按从小到大的顺序排列;
4、然后分别判断f(x)在a,x1,x2,x3,……,b点的值,然后选择相邻两点用二分法求出f(x)=0的数值解;
5、将所得的解代入g,并比较,取一个最小的g,并将那个使g取得最小值的点x作为方程f(x)=0的最终根;
6、如果f(x)=0在[a,b]上无解,则给x赋值为一个极大的值。
我自己已经解决了,在选择最小值问题上,只需要对二维数组进行排序,就可以很方便的求出最小值;
而在求导函数的方程时,可以用solve解决,然后去掉虚根,合并重复的根,就可以得到实根的个数和值。