问题描述:
二十六道二次方程,共二十个未知数。
考虑了matlab中可用的各类算法,最后采用fsolve函数解该复杂非线性方程。
参考:非线性方程(组):MATLAB内置函数 solve, vpasolve, fsolve, fzero, roots [MATLAB] - GentleMin - 博客园
一、使用fsolve最简单函数求解:
将具体的方程定义为root.m文件
用fsolve函数最简单的形式进行求解,x0采用实际模拟结果替代。
myfun = @test_root0426;
x0 = [……];
x = fsolve(myfun,x0)
运行结果出现问题:
1.输入参数位数太小,数量级基本在10的-5次方以下,matlab显示不全
通过format long命令,获得长位数结果
2.无法运行获得结果,代码错误
x0 = [……];
root(x0)
可以通过在root.m文件下输入如下命令,进行单独运行。如果root.m能够成功计算,说明问题出现在主文件main.m下,对主文件进行检查即可。
报错Solver stopped prematurely.检查原因是main.m中变量定义遗漏。
3.调整部分联动数值后,发现计算结果没有改变。计算结果与初值过于接近,且初值改变,计算结果也随之改变。
发现是由于fsolve函数的特性,初值对其影响很大。
原因是fsolve本身使用的算法:优化方法,即用优化方法求解函数距离零点最近,具体方法为信赖域方法。包含预处理共轭梯度(PCG)、狗腿(dogleg)算法和Levenberg-Marquard