PDA

查看完整版本 : [MATLAB数学相关] 复杂的方程组求解


longking0212
2013-09-13, 18:55
现在有这样一个方程组需要求解,麻烦各位路过大神提供一下帮助,谢谢!
D=A(α+2δD)^m[3/2(μξ^2)+(3μ+9λ/2)ε^2]^m
其中α+δ=1,还有D,ξ,ε,μ,λ是已知的,求解m,A,α,δ。
已知的数据都各有四组数据,是一个四元方程组。怎么使用Matlab怎么求解,谢谢各位指导指导!

liuyunfeng
2013-09-19, 08:56
可以用fsolve解非线性方程组。
需要自建一个M文件,编入方程组。
另外,用fsolve的话,几个未知量就用几个方程组,你的α+δ=1求解时可能用不到,但是可以用来验证结果。
比如你的方程D=A(α+2δD)^m[3/2(μξ^2)+(3μ+9λ/2)ε^2]^m,
将四组已知的D,ξ,ε,μ,λ代入方程,得到4个未知量为m,A,α,δ的方程。
将方程变换为XXX=0的形式,0在左边。
未知量为x矩阵,x实际为[m A α δ],将上面得到的4个方程中的m,A,α,δ替换为x(1)、x(2)、x(3)、x(4),四个方程左边的的0分别替换为y(1)、y(2)、y(3)、y(4)。
这样,新建M文件,写入上面的4个方程:

function y=rootegBfun(x)
y(1)=XXX;
y(2)=XXX;
y(3)=XXX;
y(4)=XXX; %其中都已经替换为x(1)、x(2)、x(3)、x(4)的关系。
保存为rootegBfun.m
命令行下,输入:
x0=ones(1,4);%迭代法需要初始值,这里随便设个[1 1 1 1]示意一下,建议要尽量接近真实的[m A α δ]
x=fsolve(@rootegBfun,x0,optimset('Display','off'));
按照上面的,应该可以求出来。