含参数非线性方程组求解方法总结
以fsolve求解方程组a*log(x1)+x2^2-5=0;exp(x1)+b*sin(x2)-10=0为例。
方法一:全局变量法
- function glo
- global a b
- %主函数定义全局变量
- a=3;
- b=4;
- x0=[1 1];
- x=fsolve(@tes,x0)
- function y=tes(x)
- global a b
- %子函数定义全局变量
- y=[a*log(x(1))+x(2)^2-5;
- exp(x(1))+b*sin(x(2))-10];
- %以上存为glo.m
- %在命令窗口输入
- glo
- %得到:
- Optimization terminated: first-order optimality is less than options.TolFun.
- x =
- 1.80833796874946 1.79520903756128
[color=rgb(51, 102, 153) !important]复制代码
方法二:嵌套函数法
注:此方法在MATLAB7.0以上版本可用
- function nesti
- function y=tes(x)
- %使用嵌套函数时,嵌套函数可以直接调用主函数变量
- y=[a*log(x(1))+x(2)^2-5;
- exp(x(1))+b*sin(x(2))-10];
- end
- %使用嵌套函数时,嵌套函数和主函数都必须用end表示函数结束
- a=3;
- b=4;
- x0=[1 1];
- x=fsolve(@tes,x0)
- end
- %以上存为nesti.m
- %在命令窗口输入
- nesti
- %得到:
- Optimization terminated: first-order optimality is less than options.TolFun.
- x =
- 1.80833796874946 1.79520903756128
[color=rgb(51, 102, 153) !important]复制代码
方法三:没有名字(推荐使用方法)
- function unname
- a=3;
- b=4;
- x0=[1 1];
- x=fsolve(@tes,x0,[],a,b)
- %[]表示fsolve的输入参数options采用默认值
- function y=tes(x,a,b)
- y=[a*log(x(1))+x(2)^2-5;
- exp(x(1))+b*sin(x(2))-10];
- %以上存为unname.m
- %在命令窗口输入
- unname
- %得到:
- Optimization terminated: first-order optimality is less than options.TolFun.
- x =
- 1.80833796874946 1.79520903756128