Matlab 优化问题目标函数的定义方法

转自:http://blog.sina.com.cn/s/blog_84024a4a0101dz4e.html

一、目标函数的定义方式
1. 用内嵌函数inline定义目标函数
fun = inline('[2 * x(1) - x(2) - exp(-x(1)); -x(1) + 2*x(2) - exp(-x(2))]', 'x');
x0 = [-5; -5];
[x, fval] = fsolve(fun, x0)
 
2. 在优化函数中定义和引用目标函数
x0 = [-5; -5];
[x, fval] = fsolve('[2 * x(1) - x(2) - exp(-x(1)); -x(1) + 2*x(2) - exp(-x(2))]', 'x0')
 
3. 在优化函数外部直接定义目标函数
fun = ''[2 * x(1) - x(2) - exp(-x(1)); -x(1) + 2*x(2) - exp(-x(2))]';
x0 = [-5; 5];
[x, fval] = fsolve(fun, x0)
 
4. 用函数过程定义目标函数
function main
 
x0 = [-5; -5];
[x, fval] = fsolve(@objfun, x0)
[x, fval] = fsolve('objfun', x0)
[x, fval] = fsolve(@(x)objfun(x), x0)
 
function f = objfun(x)
f = [2 * x(1) - x(2) - exp(-x(1)); -x(1) + 2*x(2) - exp(-x(2))];
 
以上四种情况,最后一种适用于复杂函数情形,较为实用。另外,经常遇到主程序与函数过程传递数据的情况,一般可以使用三种方式实现。
二、参数的传递
1. 利用全局变量定义关键字global定义全局变量传递参数值。
 
2. 通过在优化函数输入列表尾部加入传递参数来传递参数值。
x0 = [-5; 5];
w = 3;
[x, fval] = fsolve(@objfun1, x0, [], w)
 
function f = objfun1(x, w)
f = [2*x(1) - x(2) - exp(-x(1)); -x(1) + 2*x(2) - exp(-x(2))] + w;
 
3. 通过目标函数本身传递参数。
function main()
x0 = [-5; 5];
w = 3;
[x, fval] = fsolve(@(x)objfun1(x, w), x0, [])
function f = objfun1(x, w)
f = [2 * x(1) - x(2) - exp(-x(1)); -x(1) + 2*x(2) - exp(-x(2))] + w;
 
posted @ 2016-07-06 16:26  御剑飞行  阅读(2970)  评论(0)    收藏  举报