MATLAB里面数值求解方程的函数为fsolve,MATLAB自带的帮助文档里有如何直接使用的例子,但没有如何解带参数方程的例子,其实只需要对待求解方程稍作修改即可。比如我们求如下关于
x
1
x_1
x1和
x
2
x_2
x2的方程:
e
−
e
−
(
x
1
+
x
2
)
−
x
2
(
1
+
x
1
2
)
−
c
1
=
0
x
1
cos
(
x
2
)
+
x
2
sin
(
x
1
)
−
c
2
=
0
e^{-e^{-(x_1+x_2)}}-x_2(1+x_1^2)-c_1=0\\ x_1\cos(x_2)+x_2\sin(x_1)-c_2=0
e−e−(x1+x2)−x2(1+x12)−c1=0x1cos(x2)+x2sin(x1)−c2=0
其中 c 1 c_1 c1和 c 2 c_2 c2为外部设定的参数,那么首先自定义一个函数:
function myfun1 = root2d(x,c1,c2)
myfun1(1) = exp(-exp(-(x(1)+x(2)))) - x(2)*(1+x(1)^2)-c1;
myfun1(2) = x(1)*cos(x(2)) + x(2)*sin(x(1)) -c2;
然后在主程序文件中给定 c 1 c_1 c1和 c 2 c_2 c2的值,以及 x 1 x_1 x1和 x 2 x_2 x2的迭代初值,利用@符号将待求解变量进行区分,即可调用fsolve进行求解。
c1=0;
c2=0.5;
x0 = [0,0];
fun = @(x)root2d(x,c1,c2);
x = fsolve(fun,x0)