如果想以分数输出结果,可以用   format rat

f函数使用以前的稍加改造

function y=f(x)
if(length(x)==1)global xk;global pk;x=xk+x*pk;
end
y=(-x(1)+x(2)+x(3))^2+(x(1)-x(2)+x(3))^2+(x(1)+x(2)-x(3))^2;

1.模式搜索法求解

初始点为(1,1)T

clc
clear
global xk;
global pk;
syms x1 x2 a;
y=x1^2+2*x2^2-4*x1-2*x1*x2;
fprintf('用模式搜索法求解问题:\n');
fprintf('min f(x)=x1^2+2*x2^2-4*x1-2*x1*x2\n');
fprintf('初始点为  \n');
%step 0
x=[1;1]
e=0.001;
n=2
p=eye(n);    %二阶单位矩阵
k=1;
while 1fprintf('=======================================\n');fprintf('第%d次:\n',k);%step 1xk=x;i=1;while 1fprintf('i=%d:-------------------------------\n',i);pk=p(:,i)y1=subs(subs(y,x1,xk(1)+a*pk(1)),x2,xk(2)+a*pk(2));fprintf('f(x+a*pk)  = ');disp(y1);y1=diff(y1);fprintf('f’(x+a*pk) = ');disp(y1);a1=solve(y1);a1=eval(a1);fprintf('a = ');disp(a1);xk=xk+a1*pk;fprintf('xk = \n');disp(xk);fprintf('-------------------------------\n');%step 3if(i<n)i=i+1;elsebreak;endend%step 4%范数用的是平方和开根号xk_x=sum((xk-x).^2)xk_x=sqrt(xk_x)if xk_x<=efprintf('x* = \n');disp(x);break;elsepk=xk-xy1=subs(subs(y,x1,xk(1)+a*pk(1)),x2,xk(2)+a*pk(2));fprintf('f(x+a*pk)\t= ');disp(y1);y1=diff(y1);fprintf('f’(x+a*pk)\t= ');disp(y1);a1=solve(y1);a1=eval(a1);fprintf('a = ');disp(a1);xk=xk+a1*pk;fprintf('xk = \n');disp(xk);endx=xk;k=k+1;
end

2.用改进的powell算法求解

初始点为(1/2,1,1/2)

clc
clear
global xk;
global pk;
syms x1 x2 x3 a;
y=(-x1+x2+x3)^2+(x1-x2+x3)^2+(x1+x2-x3)^2;
fprintf('用改进的Powell法求解问题:\n');
fprintf('min f(x)=(-x1+x2+x3)^2+(x1-x2+x3)^2+(x1+x2-x3)^2\n');
n=3
fprintf('初始点为  \n');
%step 1
x=[1/2,0,0,0;1,0,0,0;1/2,0,0,0];
disp(x(:,1))
fx=[0,0,0,0];
fx(1)=f(x(:,1));
e=0.001;
p=eye(3);    %三阶单位矩阵
c=1;
k=1;
while 1fprintf('=======================================\n');fprintf('第%d次:\n',c);%step 2while 1fprintf('k=%d:-------------------------------\n',k);pk=p(:,k);xk=x(:,k)y1=subs(subs(subs(y,x1,xk(1)+a*pk(1)),x2,xk(2)+a*pk(2)),x3,xk(3)+a*pk(3));fprintf('f(x+a*pk) = ');disp(y1);y1=diff(y1);fprintf('f’(x+a*pk) = ');disp(y1);a1=solve(y1);a1=eval(a1);fprintf('a = ');disp(a1);x(:,k+1)=x(:,k)+a1*pk;fprintf('xk = \n');disp(x(:,k+1));fprintf('-------------------------------\n');%step 3if(k<n)k=k+1;elsebreak;endend%step 4%范数用的是平方和开根号xn_x0=sqrt(sum((x(:,n+1)-x(:,1)).^2))if sqrt(sum((xn_x0.^2)))<=efprintf('x* = \n');disp(x(:,n+1));break;end%setp 5k=1;m=1;fx(k+1)=f(x(:,k+1));d=fx(k)-fx(k+1);k=k+1;while 1fx(k+1)=f(x(:,k+1));d_=fx(k)-fx(k+1);if(d_>d)d=d_;m=k;k=k+1endif(k==n)break;endendf_=f(2*x(:,n+1)-x(:,1))%step 6if (f_>=fx(1))fx(1)=fx(n+1);x(:,1)=x(:,n+1);k=1;elseif (fx(1)-2*fx(n+1)+f_)*(fx(1)-fx(n+1)-d)^2>=0.5*(fx(1)-f_)^2*dfx(1)=fx(n+1);x(:,1)=x(:,n+1);k=1;elsewhile 1p(:,m)=p(:,m+1);m=m+1;if(m==n)break;endendk=1;pk=p(:,n);xk=x(:,n+1)p(n)=(x(:,n+1)-x(:,1))/xn_x0;y1=subs(subs(subs(y,x1,xk(1)+a*pk(1)),x2,xk(2)+a*pk(2)),x3,xk(3)+a*pk(3));fprintf('f(x+a*pk) = ');disp(y1);y1=diff(y1);fprintf('f’(x+a*pk) = ');disp(y1);a1=solve(y1);a1=eval(a1);fprintf('a = ');disp(a1);x(:,1)=x(:,n)+a1*pk;fprintf('xk = \n');disp(x(:,1));endendc=c+1;
end

matlab使用sym类型,subs和diff函数,进行模式搜索法和改进的powell法求解函数相关推荐

  1. 黄金分割(0.618)法求解函数极值(附代码)

    目录 黄金分割法 迭代公式 算法步骤: 例题 C++代码: 黄金分割法也称为中外比,指把一条线段分割为两部分,使其中一部分与全长之比等于另一部分与这部分之比.其比值是一个无理数,取其前三位数字的近似值 ...

  2. 迭代法matlab实现剔除相同,最复杂的雅克比迭代法和搞死赛德尔迭代法matlab实现...

    在程序开始的时候,花了很大的篇幅做了选主元素,甚至比算法本身更长,这里用了一系列的循环,没有用到一点点的矩阵的东西.雅克比程序如下: function [x,i]=jacobi(A,n,x,espx, ...

  3. 高等数学 函数极限求法(一) 代入法

    高数 函数极限求法(一)  代入法 极限是什么? 极限就像你坐着宇宙飞船去探索宇宙的边界一样,无限接近 却 没法到达! 大学高数中极限部分可以简单分为两部分:函数极限 和 数列极限 : 本篇讲解利用代 ...

  4. 高等数学 函数极限求法(二) 画图法

    之前一篇我们了解了 如何通过代入求解函数极限 的方法, 但是也发现有的函数极限是没有办法通过代入法求解的, 下面介绍一种 新的求解函数极限 的方法-------- 画图法 画图法求解函数极限:通过对应 ...

  5. MATLAB中拉氏变换/拉氏反变换如何代入数值求解具体结果(简析syms函数和sym类型)

    1.前言–函数介绍 1.1 laplace函数 功能:拉氏变换 示例: syms t f = t; laplace(f) 输出结果: 1.2 ilaplace函数 功能:拉氏反变换 示例: syms ...

  6. matlab中sym看不到值和属性,matlab 用sym定义了x,但是输入函数却显示“未定义函数或变量 'x'”?...

    答:亲,是syms x,或者是sym('x')来定义x是符号变量 答:matlab2018a中出现未定义函数或"ploy2sym",怎么改要分情况 情况一:符号变量 必须要定义,定 ...

  7. Matlab 自编雅可比矩阵 (jacobi) 函数与官方的Jacobian matrix(雅可比矩阵)函数对比及创新

    目录 0 引言 1 雅可比矩阵 2 matlab中函数表达式两种方法 2.1 符号表达式 2.2 函数句柄 2.3 函数句柄与符号表达式相互转化 2.4 常会用到的一些函数 3 自编代码 4 官方函数 ...

  8. MATLAB最速下降法求解函数极小值

    MATLAB最速下降法求解函数极小值 1.题目 2.matlab代码 2.1主函数 2.2调用函数 2.3运行结果 3.分析 写在前面:最速下降法求解函数极小值的理论部分已经写在上一篇文章中,这篇文章 ...

  9. 如何使用MATLAB绘制不同类型的二维图形

    如何使用MATLAB绘制不同类型的二维图形 听语音 | 浏览:360 | 更新:2014-11-30 18:10 | 标签:matlab 1 2 3 4 5 分步阅读 如何用MATLAB绘制各种二维图 ...

最新文章

  1. goaccess在定时任务中不执行的问题
  2. 20135320赵瀚青LINUX第十八章读书笔记
  3. 白话Elasticsearch42-深入聚合数据分析之案例实战__bucket filter:统计牌品最近一个月的平均价格(Filter Aggregation)
  4. 招聘 | 平安人寿人工智能研发团队北京研发中心
  5. [攻防世界 pwn]——level2
  6. LQ训练营(C++)学习笔记_常见动态规划模型
  7. 【渝粤题库】陕西师范大学700007 生态学
  8. 拿不出双十一成绩单,垂直电商何以安身立命?
  9. Net::OpenSSH 模块使用实例
  10. matlab之简单粒子群的函数寻优
  11. 计算机刷bios版本,技嘉bios升级工具(@BIOS)
  12. 01-Axure9入门培训
  13. web批量打印pdf
  14. 常见720P和1080P的分辨率倒底是多少?
  15. 装饰模式 DecoratePattern
  16. mdadm chuck_面向所有人的Python-Chuck博士提供的14小时免费Python课程
  17. 前端面试题(持续更新中)
  18. QT5+zint库实现条形码条形码(一)
  19. 大数据时代下的小公益
  20. Three.js - 使用 ThreeBSP 对模型进行布尔运算

热门文章

  1. 台湾应广OTP系列单片机
  2. 对 jiffies 溢出、 系统滴答数ticks、time_after 宏的分析理解
  3. 不可不知的android开发冷知识4
  4. 【并行计算】Bitonic Sort(双调排序)基础
  5. JasperReport使用
  6. 利用python从网易云喜欢歌单中获取适合跑步的歌曲
  7. 单片机c语言goto语句用法,goto语句的使用
  8. iOS AVPlayer seektotime 精准定位
  9. offsettop及相关属性介绍
  10. focus 获取焦点, blur 失去焦点 事件 javascript 写法