matlab:

function y=fs2steep(f,e,a,b) %返回的是点坐标的2个分量
 % fs2steep函数 最速下降法
 % x=fs2steep(f,e,a,b)为输入函数 f为函数 e为允许误差 (a,b)为初始点;
 % fsx TJPU 2008.6.15
 x1=a;x2=b;
 Q=fs2hesse(f,x1,x2);
 x0=[x1 x2]';
 fx1=diff(f,'x1'); %对x1求偏导数
 fx2=diff(f,'x2'); %对x2求偏导数
 g=[fx1 fx2]'; %梯度
 g1=subs(g); %把符号变量转为数值
 d=-g1;%d为搜索方向
 while (abs(norm(g1))>=e)  %norm(g1)为g1的2范数,即sqrt(x1^2+x2^2),因为梯度其各分量=0,所以其梯度幅值=0
     t=(-d)'*d/((-d)'*Q*d);%求搜索步长,方法是?
     x0=x0-t*g1; %搜索到的点
     v=x0;
     a=[1 0]*x0;
     b=[0 1]*x0;
     x1=a;
     x2=b;  
     Q=fs2hesse(f,x1,x2);
     x0=[x1 x2]';
     fx1=diff(f,'x1'); %对x1求偏导数
     fx2=diff(f,'x2'); %对x2求偏导数
     g=[fx1 fx2]'; %梯度    
     g1=subs(g);
     d=-g1;
 end;
 y=v;

 function x=fs2hesse(f,a,b)
 % fs2hesse函数 求函数的hesse矩阵;
 % 本程序仅是简单的求二次函数的hesse矩阵!;
 % x=fs2hesse(f)为输入函数 f为二次函数 x1,x2为自变量;
 % fsx TJPU 2008.6.15
 x1=a;x2=b;
 fx=diff(f,'x1');     %求f对x1偏导数
 fy=diff(f,'x2');     %求f对x2偏导数
 fxx=diff(fx,'x1');   %求二阶偏导数 对x1再对x1
 fxy=diff(fx,'x2');   %求二阶偏导数 对x1再对x2
 fyx=diff(fy,'x1');   %求二阶偏导数 对x2再对x1
 fyy=diff(fy,'x2');   %求二阶偏导数 对x2再对x2
 fxx=subs(fxx);       %将符号变量转化为数值
 fxy=subs(fxy);
 fyx=subs(fyx);
 fyy=subs(fyy);
 x=[fxx,fxy;fyx,fyy]; %求hesse矩阵

c++:

/*
 * @author:郑海波
 * blog.csdn.net/nuptboyzhb/
 * 2012-12-11
 */
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
	double e=0.00001;//定义迭代精度
	double alpha=0.5;//定义迭代步长
	double x=0;//初始化x
	double y0=x*x-3*x+2;//与初始化x对应的y值
	double y1=0;//定义变量,用于保存当前值
	while (true)
	{
		x=x-alpha*(2.0*x-3.0);
		y1=x*x-3*x+2;
		if (abs(y1-y0)<e)//如果2次迭代的结果变化很小,结束迭代
		{
			break;
		}
		y0=y1;//更新迭代的结果
	}
	cout<<"Min(f(x))="<<y0<<endl;
	cout<<"minx="<<x<<endl;
	return 0;
}
//运行结果
//Min(f(x))=-0.25
//minx=1.5
//Press any key to continue