每天一个小算法(matlab armijo)
下面是 armijo线搜索+最速下降法的小程序,matlab用的很不熟,费了不少劲。
函数:
function g=fun_obj(x)
syms a b
f = 1/2*a^2+b^2-a*b-2*a;
a=x(1);b=x(2);
g=eval(f);
求梯度:
function g=fun_grad(x)
syms a b
f = 1/2*a^2+b^2-a*b-2*a;
gradient = jacobian(f,[a,b]);
a = x(1);b = x(2);
g = eval(gradient);
armijo线搜索:
function mk = armijo( xk, rho, sigma, d ) assert( rho > 0 && rho < 1 );
assert( sigma > 0 && sigma < 0.5 ); mk = 0; max_mk = 100; while mk <= max_mk
x = xk + rho^mk * d;
if fun_obj( x ) <= fun_obj( xk ) + sigma * rho^mk *fun_grad(xk)*d';
break;
end
mk = mk + 1;
end return;
主程序:
function result = armijograd(x0) max_iter = 5000; % max number of iterations
EPS = 1e-6; % threshold of gradient norm rho = 0.45; sigma = 0.2; % Armijo parameters k = 0; xk = x0; % initialization while k < max_iter k = k + 1; dk = fun_grad( xk ); % gradient vector
d = -1 * dk; % search direction if norm( dk ) < EPS %precision
break;
end mk = armijo( xk, rho, sigma, d); %armijo line search xk = xk + rho^mk * d; %update
end
result = xk;
return;
最终结果是:[4,2]';程序正确。
每天一个小算法(matlab armijo)的更多相关文章
- 每天一个小算法(Shell sort5)
希尔排序的关键在于步长的选取. 希尔排序的复杂度比较复杂,主要跟步长的选择有关,大概是 O(n logn^2),一般认为就是介于 O(n^2) 和 O(n logn) 之间.最好步长比较复杂,一般第一 ...
- 每天一个小算法(Shell Sort3)
希尔算法自己编了一个,循环很多,很不美观,不过运行正确: c语言实现: #include <stdio.h> #include <stdlib.h> #define LEN 2 ...
- 每天一个小算法(4)----在O(1)时间删除指定结点
O(1)时间内删除结点的思路只能是复制该结点下一个结点的数据,然后删除该结点的下一个结点,来等效删除此结点. 需要注意的地方是删除头结点和尾结点的处理. #include <stdio.h> ...
- 每天一个小算法(insertion sort3)
今天多看看插入排序的理论部分. 先贴几个概念吧: 1.伪代码(英语:pseudocode),又称为虚拟代码,是高层次描述算法的一种方法.它不是一种现实存在的编程语言(已经出现了类似伪代码的语言,参见N ...
- python3 自己写的一个小算法(比对中文文本相似度)
函数使用说明: 函数的三个参数分别是“匹配语句”,“匹配语料”,“相关度”: 匹配语句,和匹配预料中的语句匹配的语句,必须为字符串: 匹配语料,被匹配语句来匹配的语句列表,必须为列表: 相关度,函数只 ...
- 感冒了~ vs中py和vb实现一个小算法
1+1*2+1*2*3+--+1*2*3*n 下面是窗体,就一个按钮和编辑框. 中途还遇到了编码问题,但是感冒太难受,加上明天还要上课.就睡了~ 晚安世界.
- Python数学运算的一个小算法(求一元二次方程的实根)
请定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程:ax² + bx + c = 0的两个解. #!/usr/bin/env python # -*- coding: ...
- 每天一个小算法(Heapsort)
#include "stdio.h" #include "stdlib.h" #define Num 10 Heap(int arr[],int i,int n ...
- 每天一个小算法(5)----找到链表倒数第K个结点
估计这个问题在面试中被问烂了. 思路是先找到正数的第K个结点的指针pT,然后和指向头结点的指针pN一起向后移动,直到第K个指针指向NULL,此时pN指向的结点即倒数第K个结点. 如图: #includ ...
随机推荐
- 类模板的困扰 LNK2019 (转)
原文地址:http://www.eetop.cn/blog/html/93/493893-14903.html 在使用类模板技术时,可在.h中实现,也可在.h和.cpp中分开实现,若用.h实现,不要在 ...
- JDBC数据库连接池原理
JDBC是java数据库连接的简称.它是一种用于实行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用java语言编写的类和接口组成.其相关的API都在java.sql.*包下 ...
- Linq to Xml示例
Xml文件: <?xml version="1.0"?> <Software xmlns:xsi="http://www.w3.org/2001/XML ...
- Leetcode#105 Construct Binary Tree from Preorder and Inorder Traversal
原题地址 基本二叉树操作. O[ ][ ] [ ]O[ ] 代码: TreeNode *restore(vector< ...
- [百度空间] [原] Empty base class optimization
最近遇到了一个诡异的问题, 数组的数据不对, 最后发现是两个类型的大小不一样导致的. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...
- 【ASP.Net MVC】在AspNet Mvc使用Ajax
目录 一.使用System.Web.Mvc.Ajax 1.1 System.Web.Mvc.Ajax.BeginForm 1.2 System.Web.Mvc.Ajax.ActionLink 二.手工 ...
- PHP-Java-Bridge使用笔记,2014年9月最新版
这是我在做平安银行开发的时候,本地使用PHP环境,平安银行接口为Java接口的时候,采用PHP-Java-Bridge的方式调用接口的笔记.因为现在网上的教程基本上都不行了,所以在这里贴出我能使用的而 ...
- 九个衡量 Rails 应用性能的小方法
你有个绝佳的商业创意,日复一日地将它完善丰满起来.后来,你雇了一群天赋异禀的开发者.Web 设计师和用户体验专家,他们用一种非常棒的框架--Ruby on Rails 帮你实现长久以来的梦想. 你的网 ...
- delphi 网络函数
Delphi网络函数 unit net; interfaceusessysutils,windows,dialogs,winsock,classes,comobj,wininet; //得到本机的局域 ...
- HDU 1247 Hat’s Words(map,STL,字符处理,string运用)
题目 用map写超便捷 也可以用字典树来写 我以前是用map的: #include<stdio.h> #include<string.h> #include<algori ...