首页 > 编程语言 >工程数学上机实验四:共轭梯度法程序设计代码

工程数学上机实验四:共轭梯度法程序设计代码

时间:2024-06-08 11:11:17浏览次数:10  
标签:10 end dk 上机 gk fun 程序设计 x0 共轭

function [k,x,val] = frcg(fun,gfun,x0,epsilon,N) %共轭梯度法求解无约束问题 % fun,gfun分别为目标函数及其梯度,x0是初始点 % epsilon是容许误差,N是最大的迭代次数 if nargin<5, N=10000;end if nargin<4, epsilon=1e-6;end beta=0.6; sigma=0.4; n=length(x0); k=0; while(k<N) gk=feval(gfun,x0);%计算x0处的梯度方向 itern=k-(n+1)*floor(k/(n+1)); itern=itern+1;%每迭代n次后,要重新开始迭代 if(itern==1) dk=-gk;%第一次的迭代方向取梯度的负方向 else betak=(gk'*gk)/(g0'*g0);%gk'表示矩阵gk的共轭转置,计算β dk=-gk+betak*d0; gd=gk'*dk; if(gd>=0.0) dk=-gk;%当搜索方向不是梯度方向时,重新开始搜索 end end if(norm(gk)<epsilon) break; end m=0;mk=0; while(m<20) if(feval(fun,x0+beta^m*dk)<=feval(fun,x0)+sigma*beta^m*gk'*dk) mk=m; break; end m=m+1; end x=x0+beta^mk*dk;%计算下一个x g0=gk;d0=dk; x0=x; k=k+1;%迭代次数加1 end val=feval(fun,x); end   fun.m文件 function f = fun(x) f=(x(1)+10*x(2))^2+5*(x(3)-x(4))^2+(x(2)-2*x(3))^4+10*(x(1)-x(4))^4; end   gfun.m文件 function gf = gfun(x) gf=[2*(x(1)+10*x(2))+40*(x(1)-x(4))^3;20*(x(1)+10*x(2))+4*(x(2)-2*x(3))^3;10*(x(3)-x(4))-8*(x(2)-2*x(3))^3;-10*(x(3)-x(4))-40*(x(1)-x(4))^3]; end      

标签:10,end,dk,上机,gk,fun,程序设计,x0,共轭
From: https://www.cnblogs.com/youxiandechilun/p/18238431

相关文章

  • 《Python程序设计(第二版)》第一二章冷门点上
    python小白考前复习1.编码(密码本)2.数字类型2.1整数你可以单独使用数字0,但不要前置它幂的优先级高于乘除2.2浮点数科学计数法divmod函数:同时计算商和余数慎用round(x,n)函数abs函数求模关于复数3.字符串类型R方法原始字符串的特点:示例普通字符串与原始字符串的对比原始......
  • PTA--《面向对象程序设计》
    目录 一:超市贴花二:教师类三:快递计价器四:重复数据问题五:List的使用 一:超市贴花某超市有一种促销手段,购买金额超过一定阈值就随机给一个贴花。贴花有不同种类的,种类以编号表示,编号是一个1到100之间的数字。当收集到连续编号的三张贴花时,就可以换一个小礼物。输入样例......
  • 面向对象程序设计课程设计报告——计算器
    报告正文目录概述..............................................................................................................................................................1设计的基本概念和原理.............................................................
  • C程序设计谭浩强例题分析 1.2
    【例1.2】求两个整数之和。【例1.2】求两个整数之和。解题思路:设置3个变量,a和b用来存放两个整数,sum用来存放和数。用赋值运算符“=”把相加的结果传送给sum。这里只列举了一种代码实现如果要看其他代码实现可以到我的:GitHub:三种代码风格我的答案:#include<stdio.h>int......
  • <编译器> 7. 中间代码 | 5. 程序设计
    IR代码中符号代码(label)沿用不变int调用T_Const(inti)Tree模块:1.patchList:真值/假值回填表这里是patchList的生成,至于具体怎么回填后面才会讲structpatchList_{Temp_label*head;patchListtail};//生成stmstm=T_Cjump(T_ge,unEx(......
  • 八(汇编程序设计):输入5个同学成绩(有学号提示),然后排序,最后显示出名次表(学号,成绩)。要求:应
    代码DSEG SEGMENTGRADEDB5DUP(0)XUEHAODB'1','2','3','4','5'BUFDB4DUP(0)INFDB"Student",'$'NEWLINEDB0DH,0AHDSEGENDSSSEGSEGMENTSTACKSKTOPDB50DUP(0)S......
  • 七(汇编程序设计):已知一个M行N列的矩阵A,它的元素按行的顺序存于内存中,试编写求每行元素
    代码DSEGSEGMENTARRDB15H,22H,3H,0E4H,0A5H,56H,7H,18H DB31H,12H,13H,24H,45H,26H,47H,18H DB12H,25H,33H,34H,45H,66H,47H,81H DB10H,21H,63H,54H,56H,0C6H,0A7H,38HMDB4N DB8RowSumdw4DUP(0)ColSumdw8DUP(0)DSEGENDSCSEGS......
  • 工程数学上机实验四:共轭梯度法程序设计
    实验四:共轭梯度法程序设计       一、实验目的掌握共轭梯度法的基本思想及其迭代步骤;学会运用MATLAB编程实现常用优化算法;能够正确处理实验数据和分析实验结果及调试程序。  二、实验内容 (1)求解无约束优化问题:(2)终止准则取;(3)完成FR共轭梯度法的MATLAB编程、调试......
  • 头歌实践教学平台—C语言程序设计(指针)
    5-1学习-指针基本概念(一)通过指针变量间接访问变量#include<stdio.h>intmain(){intx,y;int*p;//定义指针变量Pp=&x;//使指针变量p指向一个变量x/*****请在以下填写通过p输入输出x值代码*****//**********Begin*********/scanf("%d",p......
  • 浙大翁恺《C语言程序设计》课程笔记
    1.1计算机与编程语言设计算法->编写程序->计算机执行程序执行的两种方式1.解释:借助一个程序(解释器),那个程序能试图理解你的程序,然后按照你的要求让计算机执行2.编译:借助一个程序(编译器),把你的程序翻译成机器语言,然后让计算机执行编程语言本身没有解释型和编译型之......