matlab中编写复杂函数,matlab编复杂函数
你好,这个程序已经可以运行了,不过为啥输出结果全是0 啊。您帮我看看。
clc;
clear;
close all;
Lk=1000; %马克链长1000
t=10; %初始温度10
tf=0.001; %最低温度0.001
a=0.9; %温度系数0.9
k=1;
a1=[8 9 10 15 15 17 15 18];
b1=[14 13 16 17 18 11 11 12]; %初始点(a1,b1)
while t>tf
for m=1:Lk
f(1)=vfunc([],[],[],a1,b1); %f(1)为初始点的函数值
a2=a1.*(1-0.9^t);
b2=b1.*(1-0.9^t); %产生新解(a2,b2)
f(2)=vfunc([],[],[],a2,b2); %f(2)为新解的函数值
if f(2)-f(1)<0 %如果新解函数值比初始解函数值小
a1=a2;
b1=b2; %用新解取代旧解
elseif exp((f(1)-f(2))/t)>rand %准则接受
a1=a2;
end
temp{m,1}=a1; %将a(1)赋值到temp的m行1列
temp{m,2}=b1; %将b(1)赋值到temp的m行2列
temp{m,3}=vfunc([],[],[],a1,b1); %将最小函数值赋值到temp的m行3列
end
[fmin,i]=min(cell2mat(temp(:,3))); %找出函数值的最小值且找到最小值所在的行数
a1=temp{i,1}; %找出最小值对应的a
b1=temp{i,2}; %找出最小值对应的b
ret1{k}=a1; %把a赋值给rek1变量
ret2{k}=b1; %把b赋值给rek2变量
se(k)=fmin; %把函数值赋值给se变量
k=k+1;
t=t*a; %降温
end
[fmin I]=min(se); %找出函数值的最小值
I %找出函数值最小值所在的行
a1=ret1(I); %将对应最小值的a找出
b1=ret2(I); %将对应最小值的b找出
a1 %输出a
b1 %输出b
fmin%输出最小函数值
tt=1:k-1;
plot(tt,se)
title('模拟退火算法求解二维Rosenbrock函数最优值');
xlabel('迭代次数');
ylabel('各代历史最优解');
函数为
function [s]=vfunc(V,Q,R,a,b)
t1=zeros(size(Q));
t2=zeros(size(R));
for i=1:8
t1=t1+a(i)*Q.^(0.2*(i-1));
t2=t2+b(i)*R.^(-0.1*(i-1));
end
v=Q.^0.3.*R.^(-0.1).*t1.*t2;
s=sum((V-v).^2);
Q=[3.2 3.2 3.2 3.2 3.2 3.2 3.2 3.2 3.2 3.2 3.2 3.2 3.2 3.2 3.2 3.2 3.2 3.2 3.2 3.2];
R=[22 24.2 29.8 21.9 24.1 29.7 21.7 23.9 29.5 21.5 23.7 29.4 21 24 30 21 23 29 21];
V=[0.86646319 0.804096194 0.682383301 1.561431619 0.778830951 0.711086254 1.419960105 0.984476313 0.864576596 1.745105103 1.343163002 1.296263098 2.02640873 1.380744198 1.18635545 2.97598251 1.768937362 1.722728725 1.302980787];
输出结果全为0
matlab中编写复杂函数,matlab编复杂函数相关推荐
- matlab10的阶层怎么输入,在Matlab中编写阶乘函数,并调用该函数来生成一个1!,......,10!的阶乘表...
点击查看在Matlab中编写阶乘函数,并调用该函数来生成一个1!,......,10!的阶乘表具体信息 答:Matlab 2015R 及以后版本,都自带阶乘函数,代码为: >> facto ...
- matlab中conv什么意思,matlab卷积函数conv matlab中conv()是什么意思?
matlab中conv()是什么意思? conv(向量卷积运算) 两个向量卷积,简单理解其实就是多项式乘法. 比如:p=[1 2 3],q=[1 1]是两个向量,p和q的卷积计算方法如下: 把p的元素 ...
- matlab矩阵指定行最大值,求Matlab程序:在2行矩阵中,如何求第1行最大值和第2行相应的最大,请问,如何在MATLAB中编写程序实现求两矩阵A*B,A.*...
导航:网站首页 > 求Matlab程序:在2行矩阵中,如何求第1行最大值和第2行相应的最大,请问,如何在MATLAB中编写程序实现求两矩阵A*B,A.* 求Matlab程序:在2行矩阵中,如何求 ...
- 关于MATLAB中M文件如何解决“未定义函数或变量”的若干办法
MATLAB的M文件分为两种:一种为脚本文件,另一种为函数文件. 脚本文件很简单,就是由一堆命令构成的,里面第一行不是 function 开头,这种文件比如是encrypt.m编写好后直接点F5或者运 ...
- matlab中fval函数,请问matlab中[x,fval,exitflag,output] = simulannealbnd(fun,...)函数怎么调用...
请问matlab中[x,fval,exitflag,output] = simulannealbnd(fun,...)函数怎么调用,有相应的实例吗?或者帮我看一下下面的程序,怎么改. function ...
- matlab 不允许函数定义,MATLAB中此上下文中不允许出现函数定义,急求~
点击查看MATLAB中此上下文中不允许出现函数定义,急求~具体信息 答:从你讲的问题,虽然没讲太清楚,但我推测,你可能写了个脚本程序文件,其中定义了子函数,在运行时就弹出了这个提示.一般情况下,在函数 ...
- matlab中label的意思,matlab中label函数
Xlabel Ylabel Text Gtext Grid MATLAB 编程语言 Function Eval Feval Global 箭头图 绘图函数 星点图 Isletter Isspace 当 ...
- 如何将Matlab中“模糊控制设计器”的隶属度函数导出图片(figure)
如何将Matlab中"模糊控制设计器"的隶属度函数导出图片(figure) 详情参考matlab官方帮助手册:plotmf()函数 https://www.mathworks.co ...
- matlab中的函数调用法则,Matlab怎么调用函数?调用函数技巧一览
Matlab作为一款专业性极强的商业数学软件,将诸多的算法开发.统计分析.数据可视化功能融入其中,用户可以方便地调用需要的函数,建立数学模型,为了满足你工作的需要,还可以自行设置自己需要的函数,下面就 ...
- matlab中rastrigin图形绘制,matlab函数function
x?6 x?6 (1) 利用MATLAB语言编写S函数.程序如下: function [sys,x0,str,ts]=sfunction(t,x,u,flag) switch flag, case 0 ...
最新文章
- Windows10忘记锁屏密码,如何破解
- nodejs获得服务器响应,轻松创建nodejs服务器(6):作出响应
- 敏捷开发团队管理系列之一:序言与出发点
- 考研总分多少能去辽师_考研英语作文平均分出炉,你拖后腿了吗?
- python selenium安装教程_Python Selenium模块安装使用教程详解
- Leetcode 746.使用最小花费爬楼梯
- php中传址调用,PHP中foreach引用传地址
- 安全跑路指南2013之乌云版
- 51c语言单片机io口控制实验报告,单片机实验报告二 单片机IO口实验
- 苹果开发者账户续费 支付授权失败
- Linux中cd会进入什么位置,linux命令中cd/和cd命令是什么意思
- 【美化桌面】删除电脑桌面快捷键箭头
- 自我介绍html模板王,个性简短自我介绍模板十篇
- C语言题目:数字金字塔(有条件的老师同学点一下赞呀)
- 原局凶存,大运流年体现,早亡命例。
- 处理器中的流水线技术
- wdnas群晖nas_WD 西部数据 伪NAS折腾记 篇三:WD 西部数据 MyCloud安装黑群晖教程
- jdk9、jdk10、jdk11、jdk12、jdk13新特性
- protel 99se :format %x invalid or incompatible with argument
- 经典管理学书籍推荐:《经理人参阅:企业管理实务》