最速下降法 非线性方程组 matlab,非线性方程组最速下降法(梯度法).docx

非线性方程组最速下降法(梯度法)

梯度法(又名,最速下降法)(该法总可以收敛,但是,在接近真解时收敛的速度会放慢。)梯度法又称为最速下降法,用于求解实系数非线性方程组(7-15)的一组根。梯度法首先是定义一个目标函数(7-16)使目标函数达到最小的是我们寻找的一组解,这是非线性最小二乘法问题。如果第步求得一组解,使得(7-17)则认为是原方程组满足一定精度的要求的一组解。梯度法的计算过程是:(1)先给定一组不全为零的初值,第k步的一组根为;(2)计算目标函数的值;(单独子程序:fn=TargetFunction)(3)若,则认为是满足一定精度的一组解,否则,作如下修正计算(7-18)其中(7-19)H为控制收敛的常数,通常选为(10-5~10-6),收敛精度选为(10-6~10-8)。(4)重复修正,直到,计算终止。图7-3 最速下降法计算框图对应的计算程序代码为C语言编程,据称该程序经Turboc 2.0编译通过。/* grad1.c程序段名称A system of non-linear equations is solved by using gradient method梯度法解非线性方程组例题3*X1-cos(X2*X3)-0.5=0X1^2-81*(X2+0.1)^2+sin(X3)+1.06=0exp(-X1*X2)+20+X3+(10*PI-3)/3=0#include‘主程序头,包含数学头main(){int i , j ,n = 3;‘定义整型数据,并给定方程个数,n值double y[4], x[4]={0.0,0.5,0.5,0.5};‘公用数据的定义,初始化根和变量double eps = 1.e-08;‘精度要求,以上数据在newton函数中需要用newton(n,x,y,eps);‘调用牛顿子程序printf(“The solutions of non-linear equations\n”);‘制表、划线pri_line(45);(for (i=1; i<=n; i++)‘显示迭代结果printf(“ x%1d=%12.6f\tf%1d=%12.6E\n”,i,x[i],i,y[i]);pri_line(45);}‘主程序段结束double fn(n,x,y)’定义函数fn(),计算目标函数值平方加和值并返回int n; double x[], y[];‘公用数据接口有2个矩阵和n{ int i; double s2=0.0;‘定义数据,s2为目标函数加和y[1]=3.0*x[1]-cos(x[2]*x[3]-0.5;‘构建方程组,并求值y[2]=x[1]*x[1]-81.0*(x[2]+0.1)*(x[2]+0.1)+sin(x[3])+1.06;y[3]=exp(-x[1]*x[2]+20.0*x[3]+(10*M_PI-3.0)/3.0;for (i=1; i<=n ; i++)s2+= y[i]*y[i];‘计算目标函数值平方的加和return(s2);‘返回计算结果}newton(n,x,y,eps)‘牛顿子程序intn; double x[],y[],eps;‘公用数据申明,这些数据为已知{ int i;double s[4],s0,s1,s2,t,alpha,h=1.e-05;‘自用数据定义‘ s[4] = [ ]序列‘s0 =目标函数值‘ s1 = = s1+=s[i]*s[i];‘ s2 = ‘ t = x[i]值的临时存放单元‘while (1)‘while do循环体{ s2=fn(n,x,y);‘调用目标函数计算s0=s2;‘保留k值时的‘给新的目标函数值让位if (s0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值