当前位置:文档之家› MATLAB机器人仿真程序

MATLAB机器人仿真程序

MATLAB机器人仿真程序
MATLAB机器人仿真程序

MATLAB 机器人工具箱仿真程序:

1)运动学仿真模型程序()

L1=link([pi/2 150 0 0])

L2=link([0 570 0 0])

L3=link([pi/2 130 0 0])

L4=link([-pi/2 0 0 640])

L5=link([pi/2 0 0 0])

L6=link([0 0 0 95])

r=robot({L1 L2 L3 L4 L5 L6})

=’MOTOMAN-UP6’ % 模型的名称

>>drivebot(r)

2)正运动学仿真程序()

L1=link([pi/2 150 0 0])

L2=link([0 570 0 0])

L3=link([pi/2 130 0 0])

L4=link([-pi/2 0 0 640])

L5=link([pi/2 0 0 0])

L6=link([0 0 0 95])

r=robot({L1 L2 L3 L4 L5 L6})

=’MOTOMAN-UP6’

t=[0::10];%产生时间向量

qA=[0 0 0 0 0 0 ]; %机械手初始关节角度

qAB=[-pi/2 -pi/3 0 pi/6 pi/3 pi/2 ];%机械手终止关节角度figure('Name','up6机器人正运动学仿真演示');%给仿真图像命名q=jtraj(qA,qAB,t);%生成关节运动轨迹

T=fkine(r,q);%正向运动学仿真函数

plot(r,q);%生成机器人的运动

figure('Name','up6机器人末端位移图')

subplot(3,1,1);

plot(t, squeeze(T(1,4,:)));

xlabel('Time (s)');

ylabel('X (m)');

subplot(3,1,2);

plot(t, squeeze(T(2,4,:)));

xlabel('Time (s)');

ylabel('Y (m)');

subplot(3,1,3);

plot(t, squeeze(T(3,4,:)));

xlabel('Time (s)');

ylabel('Z (m)');

x=squeeze(T(1,4,:));

y=squeeze(T(2,4,:));

z=squeeze(T(3,4,:));

figure('Name','up6机器人末端轨迹图'); plot3(x,y,z);

3)机器人各关节转动角度仿真程序:()

L1=link([pi/2 150 0 0 ])

L2=link([0 570 0 0])

L3=link([pi/2 130 0 0])

L4=link([-pi/2 0 0 640])

L5=link([pi/2 0 0 0 ])

L6=link([0 0 0 95])

r=robot({L1 L2 L3 L4 L5 L6})

='motoman-up6'

t=[0::10];

qA=[0 0 0 0 0 0 ];

qAB=[ pi/6 pi/6 pi/6 pi/6 pi/6 pi/6]; q=jtraj(qA,qAB,t);

Plot(r,q);

subplot(6,1,1);

plot(t,q(:,1));

title('转动关节1');

xlabel('时间/s');

ylabel('角度/rad');

subplot(6,1,2);

plot(t,q(:,2));

title('转动关节2');

xlabel('时间/s');

ylabel('角度/rad');

subplot(6,1,3);

plot(t,q(:,3));

title('转动关节3');

xlabel('时间/s');

ylabel('角度/rad');

subplot(6,1,4);

plot(t,q(:,4));

title('转动关节4');

xlabel('时间/s');

ylabel('角度/rad' );

subplot(6,1,5);

plot(t,q(:,5));

title('转动关节5');

xlabel('时间/s');

ylabel('角度/rad');

subplot(6,1,6);

plot(t,q(:,6));

title('转动关节6');

xlabel('时间/s');

ylabel('角度/rad');

4)机器人各关节转动角速度仿真程序:()t=[0::10];

qA=[0 0 0 0 0 0 ];%机械手初始关节量qAB=[ ];

[q,qd,qdd]=jtraj(qA,qAB,t);

Plot(r,q);

subplot(6,1,1);

plot(t,qd(:,1));

title('转动关节1');

xlabel('时间/s');

ylabel('rad/s');

subplot(6,1,2);

plot(t,qd(:,2));

title('转动关节2');

xlabel('时间/s');

ylabel('rad/s');

subplot(6,1,3);

plot(t,qd(:,3));

title('转动关节3');

xlabel('时间/s');

ylabel('rad/s');

subplot(6,1,4);

plot(t,qd(:,4));

title('转动关节4');

xlabel('时间/s');

ylabel('rad/s' );

subplot(6,1,5);

plot(t,qd(:,5));

title('转动关节5');

xlabel('时间/s');

ylabel('rad/s');

subplot(6,1,6);

plot(t,qd(:,6));

title('转动关节6');

xlabel('时间/s');

ylabel('rad/s');

5)机器人各关节转动角加速度仿真程序:()

t=[0::10];%产生时间向量

qA=[0 0 0 0 0 0]

qAB =[ ];

[q,qd,qdd]=jtraj(qA,qAB,t);

figure('name','up6机器人机械手各关节加速度曲线'); subplot(6,1,1);

plot(t,qdd(:,1));

title('关节1');

xlabel('时间 (s)');

ylabel('加速度 (rad/s^2)');

subplot(6,1,2);

plot(t,qdd(:,2));

title('关节2');

xlabel('时间 (s)');

ylabel('加速度 (rad/s^2)');

subplot(6,1,3);

plot(t,qdd(:,3));

title('关节3');

xlabel('时间 (s)');

ylabel('加速度 (rad/s^2)')

subplot(6,1,4);

plot(t,qdd(:,4));

title('关节4');

xlabel('时间 (s)');

ylabel('加速度 (rad/s^2)')

subplot(6,1,5);

plot(t,qdd(:,5));

title('关节5');

xlabel('时间 (s)');

ylabel('加速度 (rad/s^2)')

subplot(6,1,6);

plot(t,qdd(:,6));

title('关节6');

xlabel('时间 (s)');

ylabel('加速度 (rad/s^2)')

一个简单的Matlab_GUI编程实例

Matlab GUI编程教程(适用于初学者) 1.首先我们新建一个GUI文件:如下图所示; 选择Blank GUI(Default) 2.进入GUI开发环境以后添加两个编辑文本框,6个静态文本框,和一个按钮,布置如下

图所示; 布置好各控件以后,我们就可以来为这些控件编写程序来实现两数相加的功能了。3.我们先为数据1文本框添加代码; 点击上图所示红色方框,选择edit1_Callback,光标便立刻移到下面这段代码的位置。 1. 2. 3.function edit1_Callback(hObject, eventdata, handles) 4.% hObject handle to edit1 (see GCBO) 5.% eventdata reserved - to be defined in a future version of MATLAB

6.% handles structure with handles and user data (see GUIDATA) 7.% Hints: get(hObject,'String') returns contents of edit1 as text 8.% str2double(get(hObject,'String')) returns contents of edit1 as a double 复制代码 然后在上面这段代码的下面插入如下代码: 1. 2.%以字符串的形式来存储数据文本框1的内容. 如果字符串不是数字,则现实空白内容input = str2num(get(hObject,'String')); %检查输入是否为空. 如果为空,则默认显示为0if (isempty(input)) set(hObject,'String','0')endguidata(hObject, handles); 复制代码 这段代码使得输入被严格限制,我们不能试图输入一个非数字。 4.为edit2_Callback添加同样一段代码 5 现在我们为计算按钮添加代码来实现把数据1和数据2相加的目的。 用3中同样的方法在m文件中找到pushbutton1_Callback代码段 如下; 1.function pushbutton1_Callback(hObject, eventdata, handles) 2.% hObject handle to pushbutton1 (see GCBO) 3.% eventdata reserved - to be defined in a future version of MATLAB 4.% handles structure with handles and user data (see GUIDATA) 复制代码

matlab源代码实例

1.硬币模拟试验 源代码: clear; clc; head_count=0; p1_hist= [0]; p2_hist= [0]; n = 1000; p1 = 0.3; p2=0.03; head = figure(1); rand('seed',sum(100*clock)); fori = 1:n tmp = rand(1); if(tmp<= p1) head_count = head_count + 1; end p1_hist (i) = head_count /i; end figure(head); subplot(2,1,1); plot(p1_hist); grid on; hold on; xlabel('重复试验次数'); ylabel('正面向上的比率'); title('p=0.3试验次数N与正面向上比率的函数图'); head_count=0; fori = 1:n tmp = rand(1); if(tmp<= p2) head_count = head_count + 1; end p2_hist (i) = head_count /i; end figure(head); subplot(2,1,2); plot(p2_hist); grid on; hold on; xlabel('重复试验次数'); ylabel('正面向上的比率'); title('p=0.03试验次数N与正面向上比率的函数图'); 实验结果:

2.不同次数的随机试验均值方差比较 源代码: clear ; clc; close; rand('seed',sum(100*clock)); Titles = ['n=5时' 'n=20时' 'n=25时' 'n=50时' 'n=100时']; Titlestr = cellstr(Titles); X_n_bar=[0]; %the samples of the X_n_bar X_n=[0]; %the samples of X_n N=[5,10,25,50,100]; j=1; num_X_n = 100; num_X_n_bar = 100; h_X_n_bar = figure(1);

MATLAB简单程序大全

MATLAB简单程序大全 求特征值特征向量 A=[2 3 4;1 5 9;8 5 2] det(A) A' rank(A) inv(A) rref(A) eig(A)%求特征值和特征向量 卫星运行问题 h=200,H=51000,R=6378; a=(h+H+2*R)/2; c=(H-h)/2; b=(a^2-c^2)^(1/2); e=c/a; f=sqrt(1-exp(2).*cos(t)^2); l=int(f,t,0,pi/2) L=4*a.*l 动态玫瑰线 n=3;N=10000; theta=2*pi*(0:N)/N; r=cos(n*theta); x=r.*cos(theta); y=r.*sin(theta); comet(x,y) 二重积分 syms x y f=x^2*sin(y); int(int(f,x,0,1),y,0,pi) ezmesh(f,[0,1,0,pi]) 函数画图 syms x;f=exp(-0.2*x)*sin(0.5*x); ezplot(f,[0,8*pi])

玫瑰线 theta=0:0.01:2*pi; r=cos(3*theta); polar(theta,r,'r') 求x^2+y^2=1和x^2+z^2=1所围成的体积 syms x y z R r=1; Z=sqrt(1-x^2); y0=Z; V=8*int(int(Z,y,0,y0),x,0,1) 求导数及图像 f='1/(5+4*cos(x))'; subplot(1,2,1);ezplot(f) f1=diff(f) subplot(1,2,2);ezplot(f1) 绕x轴旋转 t=(0:20)*pi/10; r=exp(-.2*t).*sin(.5*t); theta=t; x=t'*ones(size(t)); y=r'*cos(theta); z=r'*sin(theta); mesh(x,y,z) colormap([0 0 0]) 某年是否闰年 year=input('input year:='); n1=year/4; n2=year/100; n3=year/400; if n1==fix(n1)&n2~=fix(n2) disp('是闰年') elseif n1==fix(n1)&n3==fix(n3) disp('是闰年') else

matlab经典编程例题

以下各题均要求编程实现,并将程序贴在题目下方。 1.从键盘输入任意个正整数,以0结束,输出那些正整数中的素数。 clc;clear; zzs(1)=input('请输入正整数:');k=1; n=0;%素数个数 while zzs(k)~=0 flag=0;%是否是素数,是则为1 for yz=2:sqrt(zzs(k))%因子从2至此数平方根 if mod(zzs(k),yz)==0 flag=1;break;%非素数跳出循环 end end if flag==0&zzs(k)>1%忽略0和1的素数 n=n+1;sus(n)=zzs(k); end k=k+1; zzs(k)=input('请输入正整数:'); end disp(['你共输入了' num2str(k-1) '个正整数。它们是:']) disp(zzs(1:k-1))%不显示最后一个数0 if n==0 disp('这些数中没有素数!')%无素数时显示 else disp('其中的素数是:') disp(sus) end 2.若某数等于其所有因子(不含这个数本身)的和,则称其为完全数。编程求10000以内所有的完全数。 clc;clear;

wq=[];%完全数赋空数组 for ii=2:10000 yz=[];%ii的因子赋空数组 for jj=2:ii/2 %从2到ii/2考察是否为ii的因子 if mod(ii,jj)==0 yz=[yz jj];%因子数组扩展,加上jj end end if ii==sum(yz)+1 wq=[wq ii];%完全数数组扩展,加上ii end end disp(['10000以内的完全数为:' num2str(wq)])%输出 3.下列这组数据是美国1900—2000年人口的近似值(单位:百万)。 (1)若. 2c + = y+ 与试编写程序计算出上式中的a、b、c; 的经验公式为 t at bt y (2)若.bt 的经验公式为 y= 与试编写程序计算出上式中的a、b; y ae t (3)在一个坐标系下,画出数表中的散点图(红色五角星),c + =2中 ax bx y+拟合曲线图(蓝色实心线),以及.bt y=(黑色点划线)。 ae (4)图形标注要求:无网格线,横标注“时间t”,纵标注“人口数(百万)”,图形标题“美国1900—2000年的人口数据”。 (5)程序中要有注释,将你的程序和作好的图粘贴到这里。 clf;clc;clear %清除图形窗、屏幕、工作空间 t=1900:10:2000; y=[76 92 106 123 132 151 179 203 227 250 281]; p1=polyfit(t,y,2);%二次多项式拟合

三个遗传算法matlab程序实例

遗传算法程序(一): 说明: fga.m 为遗传算法的主程序; 采用二进制Gray编码,采用基于轮盘赌法的非线性排名选择, 均匀交叉,变异操作,而且还引入了倒位操作! function [BestPop,Trace]=fga(FUN,LB,UB,eranum,popsize,pCross,pMutation,pInversion,options) % [BestPop,Trace]=fmaxga(FUN,LB,UB,eranum,popsize,pcross,pmutation) % Finds a maximum of a function of several variables. % fmaxga solves problems of the form: % max F(X) subject to: LB <= X <= UB % BestPop - 最优的群体即为最优的染色体群 % Trace - 最佳染色体所对应的目标函数值 % FUN - 目标函数 % LB - 自变量下限 % UB - 自变量上限 % eranum - 种群的代数,取100--1000(默认200) % popsize - 每一代种群的规模;此可取50--200(默认100) % pcross - 交叉概率,一般取0.5--0.85之间较好(默认0.8) % pmutation - 初始变异概率,一般取0.05-0.2之间较好(默认0.1) % pInversion - 倒位概率,一般取0.05-0.3之间较好(默认0.2) % options - 1*2矩阵,options(1)=0二进制编码(默认0),option(1)~=0十进制编 %码,option(2)设定求解精度(默认1e-4) % % ------------------------------------------------------------------------ T1=clock; if nargin<3, error('FMAXGA requires at least three input arguments'); end if nargin==3, eranum=200;popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==4, popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==5, pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==6, pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==7, pInversion=0.15;options=[0 1e-4];end if find((LB-UB)>0) error('数据输入错误,请重新输入(LB

图论算法及matlab程序的三个案例

图论实验三个案例 单源最短路径问题 Dijkstra 算法 Dijkstra 算法是解单源最短路径问题的一个贪心算法。其基本思想是,设置一个顶点集合S 并不断地作贪心选择来扩充这个集合。一个顶点属于集合S 当且仅当从源到该顶点的最短路径长度已知。设v 是图中的一个顶点,记()l v 为顶点v 到源点v 1的最短距离,,i j v v V ?∈,若 (,)i j v v E ?,记i v 到j v 的权ij w =∞。 Dijkstra 算法: ① 1{}S v =,1()0l v =;1{}v V v ??-,()l v =∞,1i =,1{}S V v =-; ② S φ=,停止,否则转③; ③ ()min{(),(,)} j l v l v d v v =, j v S ∈,v S ?∈; ④ 存在1 i v +,使 1()min{()} i l v l v +=,v S ∈; ⑤ 1{} i S S v +=U , 1{} i S S v +=-,1i i =+,转②; 实际上,Dijkstra 算法也是最优化原理的应用:如果121n n v v v v -L 是从1v 到 n v 的最 短路径,则 121 n v v v -L 也必然是从1v 到 1 n v -的最优路径。 在下面的MATLAB 实现代码中,我们用到了距离矩阵,矩阵第i 行第j 行元素表 示顶点i v 到j v 的权ij w ,若i v 到j v 无边,则realmax ij w =,其中realmax 是MATLAB 常量,表示最大的实数+308)。 function re=Dijkstra(ma) %用Dijkstra 算法求单源最短路径 %输入参量ma 是距离矩阵 %输出参量是一个三行n 列矩阵,每列表示顶点号及顶点到源的最短距离和前顶点 n=size(ma,1);%得到距离矩阵的维数 s=ones(1,n);s(1)=0;%标记集合S 和S 的补 r=zeros(3,n);r(1,:)=1:n;r(2,2:end)=realmax;%初始化 for i=2:n;%控制循环次数 mm=realmax; for j=find(s==0);%集合S 中的顶点 for k=find(s==1);%集合S 补中的顶点

Matlab简单实例学习

Matlab 程序代码 绘制y = 10e-1.5t sin( 7.75t ) 的函数图象 7.75 fv clear; t=0:0.02:10; f1=10/sqrt(7.75).*exp(-1.5*t); f2=sin(sqrt(7.75).*t); y=f1.*f2; plot(t,y,'-k',t,y,'ok'); xlabel('t');ylabel('y(t) ');title('函数图像') axis([-2 10 -0.5 2]) 拉氏变换 clear; clc; syms s t fs1 fs2 fs3 ft1 ft2 ft3; L=1,C=0.1,R=[1.5 3 5]; h1=1/(L*C*s^2+R(1)*C*s+1); h2=1/(L*C*s^2+R(2)*C*s+1); h3=1/(L*C*s^2+R(3)*C*s+1); fs1=h1*(1/s); fs2=h2*(1/s); fs3=h3*(1/s);

ft1=ilaplace(fs1,s,t); ft2=ilaplace(fs2,s,t); ft3=ilaplace(fs3,s,t); ezplot(t,ft1); hold on; ezplot(t,ft2); hold on; ezplot(t,ft3); 信号编码 对[1 1 0 1 1 1 0 1 0 0 1]进行编码。 clear; clc; c=[1 1 0 1 1 1 0 1 0 0 1] for i=1:length(c) if i==1 d1(i)=0;d2(i)=0; elseif i==2 d1(i)=c(i-1);d2(i)=c(i-1); elseif i==3 d1(i)=mod(c(i-1)+c(i-2),2); d2(i)=c(i-1); else d1(i)=mod(c(i-1)+c(i-2),2); d2(i)=mod(c(i-1)+c(i-3),2); end

matlab程序设计实例

MATLAB 程序设计方法及若干程序实例 樊双喜 (河南大学数学与 信息科学学院开封475004) 摘要本文通过对 MATLAB 程序设计中的若干典型问题做简要的分析和总结,并在此基础上着重讨论了有关算法设计、程序的调试与测试、算法与程序的优化以及循环控制等方面的问题.还通过对一些程序实例做具体解析,来方便读者进行编程训练并掌握一些有关MATLAB 程序设计方面的基本概念、基本方法以及某些问题的处理技巧等.此外,在文章的最后还给出了几个常用数学方法的算法程序, 供读者参考使用.希望能对初学者进行 MATLAB 编程训练提供一些可供参考的材料,并起到一定的指导和激励作用,进而为MATLAB 编程入门打下好的基础. 关键字算法设计;程序调试与测试;程序优化;循环控制 1 算法与程序 1.1 算法与程序的关系算法被称为程序的灵魂,因此在介绍程序之前应先了 解什么是算法.所谓算 法就是对特定问题求解步骤的一种描述.对于一个较复杂的计算或是数据处理的问题,通常是先设计出在理论上可行的算法,即程序的操作步骤,然后再按照算法逐步翻译成相应的程序语言,即计算机可识别的语言. 所谓程序设计,就是使用在计算机上可执行的程序代码来有效的描述用于解决特定问题算法的过程.简单来说,程序就是指令的集合.结构化程序设计由于采用了模块分化与功能分解,自顶向下,即分而治之的方法,因而可将一个较复杂的问题分解为若干子问题,逐步求精.算法是操作的过程,而程序结构和程序流程则是算法的具体体现. 1.2MATLAB 语言的特点 MATLAB 语言简洁紧凑,使用方便灵活,库函数极其丰富,其语法规则与科技人员的思维和书写习惯相近,便于操作.MATLAB 程序书写形式自由,利用其丰富

Matlab简单实例学习

Matlab 程序代码 绘制 1.5 10sin(7.75)7.75 t y e t -= 的函数图象。 fv clear; t=0:0.02:10; f1=10/sqrt(7.75).*exp(-1.5*t); f2=sin(sqrt(7.75).*t); y=f1.*f2; plot(t,y,'-k',t,y,'ok'); xlabel('t');ylabel('y(t) ');title('函数图像') axis([-2 10 -0.5 2]) 拉氏变换 clear; clc; syms s t fs1 fs2 fs3 ft1 ft2 ft3; L=1,C=0.1,R=[1.5 3 5]; h1=1/(L*C*s^2+R(1)*C*s+1); h2=1/(L*C*s^2+R(2)*C*s+1);

h3=1/(L*C*s^2+R(3)*C*s+1); fs1=h1*(1/s); fs2=h2*(1/s); fs3=h3*(1/s); ft1=ilaplace(fs1,s,t); ft2=ilaplace(fs2,s,t); ft3=ilaplace(fs3,s,t); ezplot(t,ft1); hold on; ezplot(t,ft2); hold on; ezplot(t,ft3); 信号编码 对[1 1 0 1 1 1 0 1 0 0 1]进行编码。 clear; clc; c=[1 1 0 1 1 1 0 1 0 0 1] for i=1:length(c) if i==1 d1(i)=0;d2(i)=0; elseif i==2 d1(i)=c(i-1);d2(i)=c(i-1); elseif i==3

多目标优化实例和matlab程序

NSGA-II 算法实例 目前的多目标优化算法有很多,Kalyanmoy Deb 的带精英策略的快速非支配排序遗传算法(NSGA-II)无疑是其中应用最为广泛也是最为成功的一种。本文用的算法是MATLAB 自带的函数gamultiobj ,该函数是基于NSGA-II 改进的一种多目标优化算法。 一、数值例子 多目标优化问题 42422 11211122124224212212112 12min (,)10min (,)55..55 f x x x x x x x x x f x x x x x x x x x s t x =-++-=-++-≤≤??-≤≤?二、Matlab 文件 1.适应值函数m 文件: function y=f(x) y(1)=x(1)^4-10*x(1)^2+x(1)*x(2)+x(2)^4-x(1)^2*x(2)^2; y(2)=x(2)^4-x(1)^2*x(2)^2+x(1)^4+x(1)*x(2);2.调用gamultiobj 函数,及参数设置: clear clc fitnessfcn=@f; %适应度函数句柄nvars=2; %变量个数lb=[-5,-5]; %下限ub=[5,5]; %上限A=[];b=[];%线性不等式约束 Aeq=[];beq=[];%线性等式约束 options=gaoptimset('paretoFraction',0.3,'populationsize',100,'generations',200,'stallGenLimit',200,'TolFun',1e-100,'PlotFcns',@gaplotpareto); %最优个体系数paretoFraction 为0.3;种群大小populationsize 为100,最大进化代数generations 为200, %停止代数stallGenLimit 为200,适应度函数偏差TolFun 设为1e-100,函数gaplotpareto :绘制Pareto 前端 [x,fval]=gamultiobj(fitnessfcn,nvars,A,b,Aeq,beq,lb,ub,options)

遗传算法的MATLAB程序实例讲解学习

遗传算法的M A T L A B 程序实例

遗传算法的程序实例 如求下列函数的最大值 f(x)=10*sin(5x)+7*cos(4x) x∈[0,10] 一、初始化(编码) initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值数的长度), 长度大小取决于变量的二进制编码的长度(在本例中取10位)。 代码: %Name: initpop.m %初始化 function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength)); % rand随机产生每个单元为 {0,1} 行数为popsize,列数为chromlength的矩阵, % roud对矩阵的每个单元进行圆整。这样产生的初始种群。 二、计算目标函数值 1、将二进制数转化为十进制数(1) 代码: %Name: decodebinary.m %产生 [2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制 function pop2=decodebinary(pop) [px,py]=size(pop); %求pop行和例数 for i=1:py pop1(:,i)=2.^(py-1).*pop(:,i); py=py-1; end pop2=sum(pop1,2); %求pop1的每行之和 2、将二进制编码转化为十进制数(2) decodechrom.m函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的起始位置。(对于多个变量而言,如有两个变量,采用20为表示,每个变量10为,则第一个变量从1开始,另一个变量从11开始。本例为1),参数1ength表示所截取的长度(本例为10)。 代码: %Name: decodechrom.m %将二进制编码转换成十进制 function pop2=decodechrom(pop,spoint,length) pop1=pop(:,spoint:spoint+length-1); pop2=decodebinary(pop1); 3、计算目标函数值 calobjvalue.m函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同优化问题予以修改。

Matlab实现Zoutendijk编程例子

22 212312132312min f (x)x 2x 3x x x 2x x x x 4x 6x =+++-+-- . 123123x 2x x 4 x ,x ,x 0++≤≥ 取初始点(1)T x (0,0,0)=,通过Matlab 编程实现求解过程。 公用函数如下: 1、function [f,x]=func %设置目标函数 syms x1 x2 x3; f=x1^2+2*x2^2+3*x3^2+x1*x2-2*x1*x3+x2*x3-4*x1-6*x2; x=[x1,x2,x3]; end 2、function f_val=fval(x0) %求目标函数值 x0=transpose(x0); [f,x]=func; f_val=subs(f,x,x0); end 3、function s=diff_val(x0) %求目标函数梯度 [f,x]=func; grad=jacobian(f,x); s=subs(grad,x,x0); end 4、function h=fmin(x0,d0,vmax) %求函数最小值 [f,x]=func; syms h ; a=x0+h*d0; f_val=inline(subs(f,x,a)); if vmax==inf min_h=fminbnd(f_val,0,10000); else min_h=fminbnd(f_val,0,vmax); end h=min_h; end Zoutendijk 方法主函数 function [X0,f_val]=zoutendijk(A,b,x0,Aeq,beq) %自定义函数diff_val(x0)作用是求所给函数在x0出的偏导数

Matlab100个实例程序

程序代码:(代码标记[code]...[/code] ) 1-32是:图形应用篇 33-66是:界面设计篇 67-84是:图形处理篇 85-100是:数值分析篇 实例1:三角函数曲线(1) function shili01 h0=figure('toolbar','none',... 'position',[198 56 350 300],... 'name','实例01'); h1=axes('parent',h0,... 'visible','off'); x=-pi:0.05:pi; y=sin(x); plot(x,y); xlabel('自变量X'); ylabel('函数值Y'); title('SIN( )函数曲线'); grid on 实例2:三角函数曲线(2) function shili02 h0=figure('toolbar','none',... 'position',[200 150 450 350],... 'name','实例02'); x=-pi:0.05:pi; y=sin(x)+cos(x); plot(x,y,'-*r','linewidth',1); grid on xlabel('自变量X'); ylabel('函数值Y'); title('三角函数');

实例3:图形的叠加 function shili03 h0=figure('toolbar','none',... 'position',[200 150 450 350],... 'name','实例03'); x=-pi:0.05:pi; y1=sin(x); y2=cos(x); plot(x,y1,... '-*r',... x,y2,... '--og'); grid on xlabel('自变量X'); ylabel('函数值Y'); title('三角函数'); 实例4:双y轴图形的绘制 function shili04 h0=figure('toolbar','none',... 'position',[200 150 450 250],... 'name','实例04'); x=0:900;a=1000;b=0.005; y1=2*x; y2=cos(b*x); [haxes,hline1,hline2]=plotyy(x,y1,x,y2,'semilogy','plot'); axes(haxes(1)) ylabel('semilog plot'); axes(haxes(2)) ylabel('linear plot'); 实例5:单个轴窗口显示多个图形 function shili05 h0=figure('toolbar','none',... 'position',[200 150 450 250],... 'name','实例05'); t=0:pi/10:2*pi;

支持向量机Matlab示例程序

2008-10-31 19:32 支持向量机Matlab示例程序 四种支持向量机用于函数拟合与模式识别的Matlab示例程序 [1]模式识别基本概念 模式识别的方法有很多,常用有:贝叶斯决策、神经网络、支持向量机等等。特别说明的是,本文所谈及的模式识别是指“有老师分类”,即事先知道训练样本所属的类别,然后设计分类器,再用该分类器对测试样本进行识别,比较测试样本的实际所属类别与分类器输出的类别,进而统计正确识别率。正确识别率是反映分类器性能的主要指标。 分类器的设计虽然是模式识别重要一环,但是样本的特征提取才是模式识别最关键的环节。试想如果特征矢量不能有效地描述原样本,那么即使分类设计得再好也无法实现正确分类。工程中我们所遇到的样本一般是一维矢量,如:语音信号,或者是二维矩阵,如:图片等。特征提取就是将一维矢量或二维矩阵转化成一个维数比较低的特征矢量,该特征矢量用于分类器的输入。关于特征提取,在各专业领域中也是一个重要的研究方向,如语音信号的谐振峰特征提取,图片的PCA特征提取等等。 [2]神经网络模式识别 神经网络模式识别的基本原理是,神经网络可以任意逼近一个多维输入输出函数。以三类分类:I、II、III为例,神经网络输入是样本的特征矢量,三类样本的神经网络输出可以是[1;0;0]、[0;1;0]、[0;0;1],也可以是[1;-1;-1]、[-1;1;-1]、[-1;-1;1]。将所有样本中一部分用来训练网络,另外一部分用于测试输出。通常情况下,正确分类的第I类样本的测试输出并不是[1;0;0]或是[1;-1;-1],而是如[;0;]的输出。也是就说,认为输出矢量中最大的一个分量是1,其它分量是0或是-1就可以了。 [3]支持向量机的多类分类 支持向量机的基本理论是从二类分类问题提出的。我想绝大部分网友仅着重于理解二类分类问题上了,我当初也是这样,认识事物都有一个过程。二类分类的基本原理固然重要,我在这里也不再赘述,很多文章和书籍都有提及。我觉得对于工具箱的使用而言,理解如何实现从二类分类到多类分类的过渡才是最核心的内容。下面我仅以1-a-r算法为例,解释如何由二类分类器构造多类分类器。 二类支持向量机分类器的输出为[1,-1],当面对多类情况时,就需要把多类分类器分解成多个二类分类器。在第一种工具箱LS_SVMlab中,文件中实现了三类分类。训练与测试样本分别为n1、n2,它们是3 x 15的矩阵,即特征矢量是三维,训练与测试样本数目均是15;由于是三类分类,所以训练与测试目标x1、x2的每一分量可以是1、2或是3,分别对应三类,如下所示: n1 = [rand(3,5),rand(3,5)+1,rand(3,5)+2]; x1 = [1*ones(1,5),2*ones(1,5),3*ones(1,5)];???? n2 = [rand(3,5),rand(3,5)+1,rand(3,5)+2]; x2 = [1*ones(1,5),2*ones(1,5),3*ones(1,5)];???? 1-a-r算法定义:对于N类问题,构造N个两类分类器,第i个分类器用第i类训练样本作为正的训练样本,将其它类的训练样本作为负的训练样本,此时分类器的判决函数不取符号函数sign,最后的输出是N个两类分类器输出中最大的那一类。

__一个实例搞定MATLAB界面编程

一个实例搞定MATLAB界面编程 作者:彭军 邮件:pjun9@https://www.doczj.com/doc/7d5336887.html, 博客:https://www.doczj.com/doc/7d5336887.html,/pengjun 下面请跟我一步一步做一个图像处理的程序,如果您坚持做完这个实例,我想MATLAB界面编程对您而言,就没有什么难度了。当然,我这里说的是,您首先要有一定的MATLAB 编程基础。还有,我的MATLAB版本是2008a。在2008a以前的版本中没有工具栏编辑器,如果需要工具栏要手动写程序,这个我就不多讲了。好了,废话少说,跟我来吧! 在MATLAB的命令窗口(Command Window)中运行guide命令,来打开GUIDE界面,如下: 然后,选择空模板(Blang GUI),点击OK,即可打开GUIDE的设计界面,如下:

点击工具栏上的菜单编辑器(Menu Editor),打开菜单编辑器,如下: 在Menu Bar中新建一个菜单项,名字为“文件”,其他设置请看下图: 在“文件”菜单下添加菜单项:“打开”,“保存”,“退出”。见下图:

如果需要在菜单项“退出”上面添加一个分割线的话,选中“Separator above this item”就行了。

保存我的界面为pjimage.fig.保存完毕之后,会自动打开pjimage.m 文件,而我们所有的程序都是要写在这个M 文件里面的。在编程中,我们的每一个鼠标动作都对应一个Callback 函数。那么我们的菜单项也是如此的。 在界面上,单击鼠标右键选择“Property Inspector ”,即可打开属性窗口。当我们点击不同的 然后,点击工具栏的保存按钮。之后,点击工具栏的运行按钮(Run Figure)。注意,工具栏的图标都会有提示的,像运行按钮的提示就是Run Figure.我们会看到如下的界面: 那说明,我们保存的.fig 文件的目录不是当前目录,但是没关系啊,我们只要点击“Change Directory ”来改变当前目录。当然,如果你想把当前目录添加到MATLAB 路径也可以,那就点击“Add to Path ”就OK 了。我在这里推荐点击“Change Directory ”,因为没有什么太大必要把其添加到MATLAB 路径中,一般是工具箱需要添加或者我们的函数或程序写完了,而在MATLAB 的命令窗口找不到我们的函数的时候,我们可以将函数或程序所在的目录添加到MATLAB 路径。 总之吧,点那个按钮,要看个人的爱好了。不管点击两个按钮的那一个按钮,都会正确的运行程序的。 我们的程序运行时的样子,是这样的:

matlab典型例子(吐血整理)

一、在同一坐标系内,分别用红色实线和蓝色点划线绘制曲线y1(t)=e0.1sin(0.3πt)和y2(t)=2e -0.5cos(0.6πt),其中t ∈[0, 3],并用星号标记出两条曲线的交叉点。请写出实现上述功能的M 文件程序代码,并给出每条语句注释说明。 t=0:0.01:3%t 取值[0,3]步长为0.01 y1=exp(0.1)*sin(0.3*pi*t)%写出公式y1(t)=e0.1sin(0.3πt) plot(t,y1,'r-')%显示该图形 hold on%继续显示 y2=2*exp(-0.5)*cos(0.6*pi*t)%写出公式y2(t)=2e -0.5cos(0.6πt) plot(t,y2,'b-.') %显示该图形 r0=abs(y2-exp(0.1)*sin(0.3*pi*t))<=0.015%设定差值的绝对值<=0.015 yy=r0.*y1;xx=r0.*t;plot(xx(r0~=0),yy(r0~=0),'r*')%用*标记交叉点 结果如下: 00.51 1.52 2.53 -1.5 -1 -0.5 0.5 1 1.5 二、求解多项式3x4-8x2+x -10除以多项式x2+x+3;计算方程3x4-8x2+x -10=0的解。请编写实现上述运算的M 程序代码,并给出每条语句注释说明。 a=[3 0 -8 1 -10]% 3x4-8x2+x -10的系数矩阵 b=[1 1 3]% x2+x+3的系数矩阵 [q,r]=deconv(a,b)%求根和余。q 为根,r 为余 结果如下: q = 3 -3 -1 4 r = 0 0 0 24 32

MATLAB-GUI入门简单实例(加法计算器)

本人初学GUI,针对网上版本的混乱,学得一头雾水,特重新整理如下,供大家参考。 1.首先我们新建一个GUI文件:如下图所示; 选择Blank GUI(Default),点击OK。 2.进入GUI开发环境以后添加3个编辑文本框(Edit Text),2个静态文本框(Static Text),和一个Push Button按钮,布置如下图所示; (1)第一个“Edit Text 1”的用来存储第一个加数,我们将“string”改为“0”,“tag”改为“input1” (2)第二个“Edit Text 2”的用来存储第二个加数,我们将“string”改为“0”,“tag”改为“input2” (3)第三个“Edit Text 3”的“string”改为“0”,“tag”为“answer” (4)修改Pushbutton按钮的属性,“string”改为“Add”,“tag”改为“add” (5)另外2个Static文本就是的“string”修改为“+”“=” (6)点击“保存”,名字任意取,自动弹出M文件(我的是7.0版本,不知其他版本会不会如此)。 Edit Text 1 Edit Text 2 Edit Text 3 Push Button

3.我们先为第一个Edit Text文本框添加代码,即读取第一个加数; 点击上图所示红色方框,选择input1_Callback,光标便立刻移到下面这段代码(程序自动生成)的位置。 function input1_Callback(hObject, eventdata, handles) % hObject handle to input1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDA TA) % Hints: get(hObject,’String’) returns contents of input1 as text % str2double(get(hObject,’String’)) returns contents of edit1 as a double 然后在上面这段代码的下面插入如下代码: %以字符串的形式来存储数据文本框1的内容. 如果字符串不是数字,则现实空白内容input=str2num(get(hObject,'String'));%检查输入是否为空. 如果为空,则默认显示为0 if (isempty(input)) set(hObject,'String','0') end guidata(hObject,handles);%保存handles结构体,只要在handles结构体有改变时,才需要保存%guidata(hObject, handles);%这里由于handles没有改变,故这里其实没有必要,但是为了避免潜在的不必要麻烦,建议在所有Callback都添加该命令。 这段代码使得输入被严格限制,我们不能试图输入一个非数字。 4. 为input2_Callback添加同样一段代码 input=str2num(get(hObject,'String'));%检查输入是否为空. 如果为空,则默认显示为0 if (isempty(input)) set(hObject,'String','0') end guidata(hObject,handles); 5. 现在我们为计算按钮“add”添加代码来实现把数据1(input1)和数据2(input2)相加的目的。 用3中同样的方法在m文件中找到add_Callback代码段,如下; function add_Callback(hObject, eventdata, handles) % hObject handle to add (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB

相关主题
文本预览
相关文档 最新文档