文档库 最新最全的文档下载
当前位置:文档库 › matlab解决svr代码

matlab解决svr代码

matlab解决svr代码
matlab解决svr代码

多元线性回归和BP 神经网络及决策向量机之间的比较,个人理解:

多元线性回归:就是多个属性的线性组合,在组合时,通过不断调节每个属性的权重来使多元线性回归函数更多的适用于多个样本。

BP 神经网络:通过使用最快速下降法,通过反向传播来不断调整网络中的权值和阈值,使网络的误差平方和最小。

决策向量机:它仍是对每个样本操作,使得所有样本距离最终生成的拟合曲线的间隔最小化。 算法比较: BP 目标函数: 权值调整:

决策向量机目标函数:min1/2w^2 支持向量机(Support vector machines ,SVM)与神经网络类似,都是学习型的机制,但与神经网络不同的是SVM 使用的是数学方法和优化技术。

学习效率的比较:

导入数据:

File->import data

参数优化常用方法:

[train_pca,test_pca] = pcaForSVM(train_data,test_data,97);//主元分析

[bestCVmse,bestc,bestg,ga_option]=gaSVMcgForRegress(train_label,train_pca);

[bestmse,bestc,bestg] = SVMcgForRegress(train_label,train_data)

cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg),' -s 3 -p 0.01'];

train_label=data(1:50,1);

train_data=data(1:50,2:14);

model=svmtrain(train_label,train_data,'-s 3 -t 2 -c 2.2 -g 2.8 -p 0.01');

test_label=data(51:100,1);

test_data=data(51:100,2:14);

[predict_label,mse,dec_value]=svmpredict(test_label,test_data,model);

[bestmse,bestc,bestg] = SVMcgForRegress(train_label,train_data)

cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg),' -s 3 -p 0.01'];

代码整理:

Part1:从核函数的角度出发,当选取不同核函数类型时,模型的效率是否有所提高

1.核函数为RBF 核函数时:

∑=-=m p j j m j d

y J 12)(2111---=?k ij

k ij w J w ??ε

优化前:

train_label=data(1:50,1);

train_data=data(1:50,2:14);

model=svmtrain(train_label,train_data,'-s 3 -t 2 -c 2.2 -g 2.8 -p 0.01');

[predict_label,mse,dec_value]=svmpredict(train_label,train_data,model);

%上一行利用自身的值和预测值进行比较,求得模型实际结果和预测结果的均方值

test_label=data(51:100,1);

test_data=data(51:100,2:14);

[predict_label,mse,dec_value]=svmpredict(test_label,test_data,model);

优化后:

train_label=data(1:50,1);

train_data=data(1:50,2:14);

[bestmse,bestc,bestg] = SVMcgForRegress(train_label,train_data)%优化方法暂定为网格寻优cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg),' -s 3 –t 2 -p 0.01'];

model=svmtrain(train_label,train_data,cmd);

[ptrain,mse,dec_value]=svmpredict(train_label,train_data,model);

figure;%画图比较预测值和实际值

subplot(2,1,1);

plot(train_label,'-o');

hold on;

plot(ptrain,'r-s');

grid on;

legend('original','predict');

title('Train Set Regression Predict by SVM');

2.核函数为多项式核函数时

train_label=data(1:50,1);

train_data=data(1:50,2:14);

[bestmse,bestc,bestg] = SVMcgForRegress(train_label,train_data);

cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg),' -s 3 -t 1 -p 0.01'];

model=svmtrain(train_label,train_data,cmd);

[ptrain,mse]=svmpredict(train_label,train_data,model);

figure;%画图比较预测值和实际值

subplot(2,1,1);

plot(train_label,'-o');

hold on;

plot(ptrain,'r-s');

grid on;

legend('original','predict');

title('Train Set Regression Predict by SVM');

Mean squared error = 14505.6 (regression)

Squared correlation coefficient = 0.349393 (regression)

3.核函数为线性乘积0 -- linear: u'*v

train_label=data(1:50,1);

train_data=data(1:50,2:14);

[bestmse,bestc,bestg] = SVMcgForRegress(train_label,train_data);

cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg),' -s 3 -t 0 -p 0.01'];

model=svmtrain(train_label,train_data,cmd);

[ptrain,mse]=svmpredict(train_label,train_data,model);

figure;%画图比较预测值和实际值

subplot(2,1,1);

plot(train_label,'-o');

hold on;

plot(ptrain,'r-s');

grid on;

legend('original','predict');

title('Train Set Regression Predict by SVM');

Mean squared error = 14537 (regression)

Squared correlation coefficient = 0.389757 (regression)

4.核函数为sigmoid: tanh(gamma*u'*v + coef0)神经元的非线性作用函数

train_label=data(1:50,1);

train_data=data(1:50,2:14);

[bestmse,bestc,bestg] = SVMcgForRegress(train_label,train_data);

cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg),' -s 3 -t 3 -p 0.01'];

model=svmtrain(train_label,train_data,cmd);

[ptrain,mse]=svmpredict(train_label,train_data,model);

figure;%画图比较预测值和实际值

subplot(2,1,1);

plot(train_label,'-o');

hold on;

plot(ptrain,'r-s');

grid on;

legend('original','predict');

title('Train Set Regression Predict by SVM');

Mean squared error = 24326.5 (regression)

Squared correlation coefficient = 0.271859 (regression)

下图为江良学长的测试成本-因素结果

注意:第一部分在建模时仅采用的是前50组数据生成的测试效率-因素模型,当选取的训练集越多(接近100)时,他的效果是越差的,举例说明如下:核函数为RBF

Mean squared error = 20424.8 (regression)

Squared correlation coefficient = 0.527831 (regression)

选取的样本越多,得到的MSE越大(虽然mse增加,但对样本的预测效果肯定会更好,因为随着样本数增加,学习能力肯定提高),而相关系数反而有所提高(接近于1最佳);

问题提出:为什么bestmse =2.3162e+004与实际训练出来的Mean squared error = 20424.8 (regression)相距甚选????

Part2:从参数优化方法选取不同上比较那种参数选取更优

此比较基于RBF核函数而言

1.基于网格寻优方法

代码:

train_label=data(1:50,1);

train_data=data(1:50,2:14);

[bestmse,bestc,bestg] = SVMcgForRegress(train_label,train_data)%优化方法暂定为网格寻优cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg),' -s 3 –t 2 -p 0.01'];

model=svmtrain(train_label,train_data,cmd);

[ptrain,mse,dec_value]=svmpredict(train_label,train_data,model);

结果:

bestmse =

1.5542e+004

bestc =

27.8576

bestg =

0.0039

Mean squared error = 14107.4 (regression)

Squared correlation coefficient = 0.386814 (regression)

2.基于遗传算法寻优

train_label=data(1:50,1);

train_data=data(1:50,2:14);

[bestCVmse,bestc,bestg,ga_option]=gaSVMcgForRegress(train_label,train_data)

cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg),' -s 3 –t 2 -p 0.01'];

model=svmtrain(train_label,train_data,cmd);

[ptrain,mse,dec_value]=svmpredict(train_label,train_data,model);

结果:

bestCVmse =

1.8944e+004

bestc =

59.5370

bestg =

778.3573

ga_option =

maxgen: 200

sizepop: 20

ggap: 0.9000

cbound: [0 100]

gbound: [0 1000]

v: 5

Mean squared error = 10426.1 (regression)

Squared correlation coefficient = 0.622133 (regression)

3.基于pso寻优(在这里使用启发式算法PSO来进行参数寻优,用网格划分(grid search)来寻找最佳的参数c和g,虽然采用网格搜索能够找到在CV意义下的最高的分类准确率,即全局最优解,但有时候如果想在更大的范围内寻找最佳的参数c和g会很费时,采用启发式算法就可以不必遍历网格内的所有的参数点,也能找到全局最优解)

代码:

train_label=data(1:50,1);

train_data=data(1:50,2:14);

[bestCVmse,bestc,bestg,pso_option]=psoSVMcgForRegress(train_label,train_data) cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg),' -s 3 –t 2 -p 0.01'];

model=svmtrain(train_label,train_data,cmd);

[ptrain,mse,dec_value]=svmpredict(train_label,train_data,model);

结果:

bestCVmse =

1.5761e+004

bestc =

49.4305

bestg =

0.0100

pso_option =

c1: 1.5000

c2: 1.7000

maxgen: 200

sizepop: 20

k: 0.6000

wV: 1

wP: 1

v: 5

popcmax: 100

popcmin: 0.1000

popgmax: 1000

popgmin: 0.0100

Mean squared error = 12480.9 (regression)

Squared correlation coefficient = 0.434221 (regression)

注意:仍是以前50组样本为例

Part3:主元分析

仍然以RBF为核函数,进行主元分析之后参数优化,最终得到MSE 代码:

train_label=data(1:50,1);

train_data=data(1:50,2:14);

test_label=data(51:100,1);

test_data=data(51:100,2:14);

[train_pca,test_pca] = pcaForSVM(train_data,test_data,97);%主元分析[bestmse,bestc,bestg] = SVMcgForRegress(train_label,train_pca)

cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg),' -s 3 –t 1 -p 0.01']; [ptrain,mse,dec_value]=svmpredict(train_label,train_pca,model);

结果:

Mean squared error = 12555.9 (regression)

Squared correlation coefficient = 0.552186 (regression)

图论算法及其MATLAB程序代码

图论算法及其MATLAB 程序代码 求赋权图G =(V ,E ,F )中任意两点间的最短路的Warshall-Floyd 算法: 设A =(a ij )n ×n 为赋权图G =(V ,E ,F )的矩阵,当v i v j ∈E 时a ij =F (v i v j ),否则取a ii =0,a ij =+∞(i ≠j ),d ij 表示从v i 到v j 点的距离,r ij 表示从v i 到v j 点的最短路中一个点的编号. ①赋初值.对所有i ,j ,d ij =a ij ,r ij =j .k =1.转向② ②更新d ij ,r ij .对所有i ,j ,若d ik +d k j <d ij ,则令d ij =d ik +d k j ,r ij =k ,转向③. ③终止判断.若d ii <0,则存在一条含有顶点v i 的负回路,终止;或者k =n 终止;否则令k =k +1,转向②. 最短路线可由r ij 得到. 例1求图6-4中任意两点间的最短路. 解:用Warshall-Floyd 算法,MATLAB 程序代码如下: n=8;A=[0281Inf Inf Inf Inf 206Inf 1Inf Inf Inf 8607512Inf 1Inf 70Inf Inf 9Inf Inf 15Inf 03Inf 8 Inf Inf 1Inf 3046 Inf Inf 29Inf 403 Inf Inf Inf Inf 8630];%MATLAB 中,Inf 表示∞ D=A;%赋初值 for (i=1:n)for (j=1:n)R(i,j)=j;end ;end %赋路径初值 for (k=1:n)for (i=1:n)for (j=1:n)if (D(i,k)+D(k,j)

matlab常用操作命令

matlab常用操作备忘(1)2007-11-30 22:01:06 分类: 北京理工大学 20981 陈罡 帮助朋友做几个数据的卷积的仿真,一用才知道,呵呵,发现对不住偶的导师了。。。好多matlab的关键字和指令都忘记了。特意收集回顾一下: (1)管理命令和函数 addpath :添加目录到MATLAB搜索路径 doc :在Web浏览器上现实HTML文档 help :显示Matlab命令和M文件的在线帮助 helpwin helpdesk :help 兄弟几个 lookfor :在基于Matlab搜索路径的所有M文件中搜索关键字 partialpath:部分路径名 8*) path :所有关于路径名的处理 pathtool :一个不错的窗口路径处理界面 rmpath :删除搜索路径中指定目录 type :显示指定文件的内容 ver :版本信息 version :版本号 web :打开web页 what :列出当前目录吓所有的M文件 Mat文件和 Mex文件 whatsnew :显示readme文件 which :显示文件位置 (2)管理变量和工作区 clear :从内存中删除所有变量,clear x y z是删除某个变量 disp :显示文本或数组内容 length :数组长度(最长维数) load :重新载入变量(从磁盘上) mlock :锁定文件,防止文件被错误删除 munlock :解锁文件 openvar :在数组编辑器中打开变量 pack :整理内存空间 save :保存变量到文件 8*) size :数组维数

who whos :列出内存变量 workspace :显示工作空间窗口 (3)管理命令控制窗口(command窗口) clc :清空命令窗口 echo :禁止或允许显示执行过程 format :设置输出显示格式 home :光标移动到命令窗口左上角 more :设置命令窗口页输出格式 (4)文件和工作环境 cd :改变工作目录 copyfile :复制文件 delete :删除文件和图形对象 diary :把命令窗口的人机交互保存到文件 dir :显示目录 edit :编辑文本文件 fileparts :返回文件的各个部分 fullfile :使用指定部分建立文件全名 inmem :返回内存(伪代码区)的matlab函数名 ls :在unix系统中列出目录(win中亦可) matlabroot :根目录 mkdir :新建目录 open :打开文件 pwd :显示当前目录 tempdir :返回系统临时目录的名字 tempname :随机给出一个临时字符串(可用作文件名) ! :直接调用操作系统command命令 (5)启动和推出matlab matlabrc :Matlab的启动M文件 exit quit :退出Matlab startup :运行matlab启动文件 (6)程序设计 builtin :从可重载方法中调用内置函数 eval :执行包含可执行表达式的字符串

Floyd算法Matlab程序

Floyd算法Matlab程序第一种: %floyd.m %采用floyd算法计算图a中每对顶点最短路 %d是矩离矩阵 %r是路由矩阵 function ,d,r,=floyd(a) n=size(a,1); d=a; for i=1:n for j=1:n r(i,j)=j; end end r for k=1:n for i=1:n for j=1:n if d(i,k)+d(k,j)

end k d r end 第二种: %Floyd算法 %解决最短路径问题,是用来调用的函数头文件 %[D,path]=floyd(a) %输入参数a是求图的带权邻接矩阵,D(i,j)表示i到j的最短距 离,path(i,j)i,j之间最短路径上顶点i的后继点 %[D,path,min1,path1]=floyd(a,i,j) %输入参数a是所求图的带权邻接矩阵,i,j起点终点,min1表示i与j最短距离,path1为最短路径function [D,path,min1,path1]=floyd(a,start,terminal) D=a;n=size(D,1);path=zeros(n,n); for i=1:n for j=1:n if D(i,j)~=inf path(i,j)=j; end end end for k=1:n for i=1:n

for j=1:n if D(i,k)+D(k,j)

matlab代码大全

MATLAB主要命令汇总 MATLAB函数参考 附录1.1 管理用命令 函数名功能描述函数名功能描述 addpath 增加一条搜索路径 rmpath 删除一条搜索路径 demo 运行Matlab演示程序 type 列出.M文件 doc 装入超文本文档 version 显示Matlab的版本号 help 启动联机帮助 what 列出当前目录下的有关文件 lasterr 显示最后一条信息 whatsnew 显示Matlab的新特性 lookfor 搜索关键词的帮助 which 造出函数与文件所在的目录 path 设置或查询Matlab路径 附录1.2管理变量与工作空间用命令 函数名功能描述函数名功能描述 clear 删除存中的变量与函数 pack 整理工作空间存 disp 显示矩阵与文本 save 将工作空间中的变量存盘 length 查询向量的维数 size 查询矩阵的维数 load 从文件中装入数据 who,whos 列出工作空间中的变量名 附录1.3文件与操作系统处理命令 函数名功能描述函数名功能描述 cd 改变当前工作目录 edit 编辑.M文件 delete 删除文件 matlabroot 获得Matlab的安装根目录 diary 将Matlab运行命令存盘 tempdir 获得系统的缓存目录 dir 列出当前目录的容 tempname 获得一个缓存(temp)文件 ! 执行操作系统命令 附录1.4窗口控制命令 函数名功能描述函数名功能描述 echo 显示文件中的Matlab中的命令 more 控制命令窗口的输出页面format 设置输出格式 附录1.5启动与退出命令 函数名功能描述函数名功能描述 matlabrc 启动主程序 quit 退出Matlab环境 startup Matlab自启动程序 附录2 运算符号与特殊字符附录 2.1运算符号与特殊字符 函数名功能描述函数名功能描述 + 加 ... 续行标志 - 减 , 分行符(该行结果不显示) * 矩阵乘 ; 分行符(该行结果显示) .* 向量乘 % 注释标志 ^ 矩阵乘方 ! 操作系统命令提示符 .^ 向量乘方矩阵转置 kron 矩阵kron积 . 向量转置 \ 矩阵左除 = 赋值运算 / 矩阵右除 == 关系运算之相等 .\ 向量左除 ~= 关系运算之不等 ./ 向量右除 < 关系运算之小于

Floyd算法_计算最短距离矩阵和路由矩阵_查询最短距离和路由_matlab实验报告

实验四:Floyd 算法 一、实验目的 利用MATLAB 实现Floyd 算法,可对输入的邻接距离矩阵计算图中任意两点间的最短距离矩阵和路由矩阵,且能查询任意两点间的最短距离和路由。 二、实验原理 Floyd 算法适用于求解网络中的任意两点间的最短路径:通过图的权值矩阵求出任意两点间的最短距离矩阵和路由矩阵。优点是容易理解,可以算出任意两个节点之间最短距离的算法,且程序容易实现,缺点是复杂度达到,不适合计算大量数据。 Floyd 算法可描述如下: 给定图G 及其边(i , j )的权w i, j (1≤i≤n ,1≤j≤n) F0:初始化距离矩阵W(0)和路由矩阵R(0)。其中: F1:已求得W(k-1)和R(k-1),依据下面的迭代求W(k)和R(k) F2:若k≤n,重复F1;若k>n,终止。 三、实验内容 1、用MATLAB 仿真工具实现Floyd 算法:给定图G 及其边(i , j )的权 w i , j (1≤i≤n ,1≤j≤n) ,求出其各个端点之间的最小距离以及路由。 (1)尽可能用M 函数分别实现算法的关键部分,用M 脚本来进行算法结 果验证; (2)分别用以下两个初始距离矩阵表示的图进行算法验证:

分别求出W(7)和R(7)。 2、根据最短路由矩阵查询任意两点间的最短距离和路由 (1)最短距离可以从最短距离矩阵的ω(i,j)中直接得出; (2)相应的路由则可以通过在路由矩阵中查找得出。由于该程序中使用的是前向矩阵,因此在查找的过程中,路由矩阵中r(i,j)对应的值为Vi 到Vj 路由上的下一个端点,这样再代入r(r(i,j),j),可得到下下个端点,由此不断循环下去,即可找到最终的路由。 (3)对图1,分别以端点对V4 和V6, V3 和V4 为例,求其最短距离和路由;对图2,分别以端点对V1 和V7,V3 和V5,V1 和V6 为例,求其最短距离和路由。 3、输入一邻接权值矩阵,求解最短距离和路由矩阵,及某些点间的最短路径。 四、采用的语言 MatLab 源代码: 【func1.m】 function [w r] = func1(w) n=length(w); x = w; r = zeros(n,1);%路由矩阵的初始化 for i=1:1:n for j=1:1:n if x(i,j)==inf r(i,j)=0; else r(i,j)=j; end, end end; %迭代求出k次w值 for k=1:n a=w; s = w; for i=1:n

基于matlab的车牌号码识别程序代码

基于matlab的汽车牌照识别程序 摘要:本次作业的任务是设计一个基于matlab的汽车牌照识别程序,能够实现车牌图像预处理,车牌定位,字符分割,然后通过神经网络对车牌进行字符识别,最终从一幅图像中提取车牌中的字母和数字,给出文本形式的车牌号码。 关键词:车牌识别,matlab,神经网络 1 引言 随着我国交通运输的不断发展,智能交通系统(Intelligent Traffic System,简称ITS)的推广变的越来越重要,而作为ITS的一个重要组成部分,车辆牌照识别系统(vehicle license plate recognition system,简称LPR)对于交通管理、治安处罚等工作的智能化起着十分重要的作用。它可广泛应用于交通流量检测,交通控制于诱导,机场,港口,小区的车辆管理,不停车自动收费,闯红灯等违章车辆监控以及车辆安全防盗等领域,具有广阔的应用前景。由于牌照是机动车辆管理的唯一标识符号,因此,车辆牌照识别系统的研究在机动车管理方面具有十分重要的实际意义。 2 车辆牌照识别系统工作原理 车辆牌照识别系统的基本工作原理为:将摄像头拍摄到的包含车辆牌照的图像通过视频卡输入到计算机中进行预处理,再由检索模块对牌照进行搜索、检测、定位,并分割出包含牌照字符的矩形区域,然后对牌照字符进行二值化并将其分割为单个字符,然后输入JPEG或BMP格式的数字,输出则为车牌号码的数字。 3 车辆牌照识别系统组成 (1)图像预处理:对汽车图像进行图像转换、图像增强和边缘检测等。 (2)车牌定位:从预处理后的汽车图像中分割出车牌图像。即在一幅车辆图像中找到车牌所在的位置。 (3)字符分割:对车牌图像进行几何校正、去噪、二值化以及字符分割以从车牌图像中分离出组成车牌号码的单个字符图像

基于matlab的计算器编程附代码

1.需求分析 本次的实验要求是设计一个计算器,主要功能如下: (1)实现基本数学运算(加减乘除等),而且要能进行混合运算 (2)实现部分函数功能,如求平方根、求倒数等 (3)能实现小数运算 界面与标准计算器界面类似 根据要求以及以前的学习情况,决定使用matlab进行编程。Matlab强大的计算功能以及便捷的GUI设计,可以较为简便的实现所要求的功能。按照要求,数据输入和输出支持小数点,支持四则混合运算,决定使用如下几个数据进行分析:(1+3)*5 Sqrt(4) 1/2 Sin4 用以检验是否可以进行加减乘除四则运算、平方根、倒数、正弦的运算。 2.程序设计 M atlab的程序设计较为简便,用GUI设计出一个计算器的模型,然后系统会自动生成一个框架,在框架中,写入每一个按键对应的程序就可以实现功能。 3.调式分析 编程的过程中遇到的问题不是很多,基本就是找要实现各个功能的子程序,通过上网和去图书馆,加上自己的编写,终于实现了实验要求的功能。但是有一点很重要,matlab不支持中文,所以从路径到文件名必须是全英文的,不然就无法识别。此外,给每个按键命名也是很重要的,不然在生成的程序框架里面,就无法识别各个按键的作用,编写程序的时候也就无法做到一一对应。 4.使用说明 程序的使用比较简单,由于是可视化界面,直接打开matlab,然后建立一个GUI 工程,再打开生成的fig文件,就是一个计算器的界面,直接按照市面上卖的计算器的

方法,按键使用即可。 5.测试结果 计算结果为20 4sqrt=2 Sin4结果为 1/2=0.5 经过计算,这些结果均与实际结果相吻合,计算器的功能实现的较为完好。 6.心得体会 本次试验由于不限制语言,于是计算功能强大,操作简便的matlab变成了首选,matlab的GUI设计,操作是较为简单的,首先建立一个GUI工程,然后用可视化界面,

数字图像处理MATLAB相关代码

1.图像反转 MATLAB程序实现如下: I=imread('xian.bmp'); J=double(I); J=-J+(256-1); %图像反转线性变换 H=uint8(J); subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(H); 2.灰度线性变换 MATLAB程序实现如下: I=imread('xian.bmp'); subplot(2,2,1),imshow(I); title('原始图像'); axis([50,250,50,200]); axis on; %显示坐标系 I1=rgb2gray(I); subplot(2,2,2),imshow(I1); title('灰度图像'); axis([50,250,50,200]); axis on; %显示坐标系 J=imadjust(I1,[0.1 0.5],[]); %局部拉伸,把[0.1 0.5]内的灰度拉伸为[0 1] subplot(2,2,3),imshow(J); title('线性变换图像[0.1 0.5]'); axis([50,250,50,200]); grid on; %显示网格线 axis on; %显示坐标系 K=imadjust(I1,[0.3 0.7],[]); %局部拉伸,把[0.3 0.7]内的灰度拉伸为[0 1] subplot(2,2,4),imshow(K); title('线性变换图像[0.3 0.7]'); axis([50,250,50,200]); grid on; %显示网格线 axis on; %显示坐标系 3.非线性变换 MATLAB程序实现如下: I=imread('xian.bmp'); I1=rgb2gray(I); subplot(1,2,1),imshow(I1); title('灰度图像'); axis([50,250,50,200]); grid on; %显示网格线 axis on; %显示坐标系 J=double(I1); J=40*(log(J+1)); H=uint8(J);

matlab图论程序算法大全

精心整理 图论算法matlab实现 求最小费用最大流算法的 MATLAB 程序代码如下: n=5;C=[0 15 16 0 0 0 0 0 13 14 for while for for(i=1:n)for(j=1:n)if(C(i,j)>0&f(i,j)==0)a(i,j)=b(i,j); elseif(C(i,j)>0&f(i,j)==C(i,j))a(j,i)=-b(i,j); elseif(C(i,j)>0)a(i,j)=b(i,j);a(j,i)=-b(i,j);end;end;end for(i=2:n)p(i)=Inf;s(i)=i;end %用Ford 算法求最短路, 赋初值 for(k=1:n)pd=1; %求有向赋权图中vs 到vt 的最短路

for(i=2:n)for(j=1:n)if(p(i)>p(j)+a(j,i))p(i)=p(j)+a(j,i);s(i)=j;pd=0;end ;end;end if(pd)break;end;end %求最短路的Ford 算法结束 if(p(n)==Inf)break;end %不存在vs 到vt 的最短路, 算法终止. 注意在求最小费用最大流时构造有 while if elseif if if pd=0; 值 t=n; if elseif if(s(t)==1)break;end %当t 的标号为vs 时, 终止调整过程 t=s(t);end if(pd)break;end%如果最大流量达到预定的流量值 wf=0; for(j=1:n)wf=wf+f(1,j);end;end %计算最大流量 zwf=0;for(i=1:n)for(j=1:n)zwf=zwf+b(i,j)*f(i,j);end;end%计算最小费用

Floyd算法_计算最短距离矩阵和路由矩阵_查询最短距离和路由_matlab实验报告

一、实验目的 利用MATLAB实现Floyd算法,可对输入的邻接距离矩阵计算图中任意两点间的最短距离矩阵和路由矩阵,且能查询任意两点间的最短距离和路由。 二、实验原理 Floyd 算法适用于求解网络中的任意两点间的最短路径:通过图的权值矩阵求出任意两点间的最短距离矩阵和路由矩阵。优点是容易理解,可以算出任意两个 节点之间最短距离的算法,且程序容易实现,缺点是复杂度达到,不适合计算大量数据。 Floyd 算法可描述如下: 给定图G及其边(i , j ) 的权w, j (1 < i < n ,1 n,终止。?? 三、实验内容 1、用MATLAB仿真工具实现Floyd算法:给定图G及其边(i , j ) 的权 w, j (1 < i < n ,1 < j < n),求出其各个端点之间的最小距离以及路由。 (1)尽可能用 M 函数分别实现算法的关键部分,用 M 脚本来进行算法结果验证; (2)分别用以下两个初始距离矩阵表示的图进行算法验证: 分别求出WT和R7)。 2、根据最短路由矩阵查询任意两点间的最短距离和路由 (1)最短距离可以从最短距离矩阵的3 (i,j)中直接得出; (2)相应的路由则可以通过在路由矩阵中查找得出。由于该程序中使用的是前向矩阵,因此在查找的过程中,路由矩阵中r(i,j) 对应的值为Vi到Vj路由上的下一个端点,这样再代入r(r(i,j),j) ,可得到下下个端点,由此不断循环下去,即可找到最终的路由。 (3)对图1,分别以端点对V4 和V6, V3 和V4 为例,求其最短距离和路由;对图2,分别以端点对V1和V7, V3和V5, V1和V6为例,求其最短距离和路由。 3、输入一邻接权值矩阵,求解最短距离和路由矩阵,及某些点间的最短路径。

matlab代码大全教学文案

m a t l a b代码大全

MATLAB主要命令汇总 MATLAB函数参考 附录1.1 管理用命令 函数名功能描述函数名功能描述 addpath 增加一条搜索路径 rmpath 删除一条搜索路径 demo 运行Matlab演示程序 type 列出.M文件 doc 装入超文本文档 version 显示Matlab的版本号 help 启动联机帮助 what 列出当前目录下的有关文件 lasterr 显示最后一条信息 whatsnew 显示Matlab的新特性 lookfor 搜索关键词的帮助 which 造出函数与文件所在的目录 path 设置或查询Matlab路径 附录1.2管理变量与工作空间用命令 函数名功能描述函数名功能描述 clear 删除内存中的变量与函数 pack 整理工作空间内存 disp 显示矩阵与文本 save 将工作空间中的变量存盘 length 查询向量的维数 size 查询矩阵的维数 load 从文件中装入数据 who,whos 列出工作空间中的变量名 附录1.3文件与操作系统处理命令 函数名功能描述函数名功能描述 cd 改变当前工作目录 edit 编辑.M文件 delete 删除文件 matlabroot 获得Matlab的安装根目录 diary 将Matlab运行命令存盘 tempdir 获得系统的缓存目录 dir 列出当前目录的内容 tempname 获得一个缓存(temp)文件 ! 执行操作系统命令 附录1.4窗口控制命令 函数名功能描述函数名功能描述 echo 显示文件中的Matlab中的命令 more 控制命令窗口的输出页面format 设置输出格式 附录1.5启动与退出命令 函数名功能描述函数名功能描述 matlabrc 启动主程序 quit 退出Matlab环境 startup Matlab自启动程序 附录2 运算符号与特殊字符附录

图论算法及其MATLAB程序代码

图论算法及其MATLAB程序代码 求赋权图G = (V, E , F )中任意两点间的最短路的Warshall-Floyd算法: 设A = (a ij )n×n为赋权图G = (V, E , F )的矩阵, 当v i v j∈E时a ij= F (v i v j), 否则取a ii=0, a ij = +∞(i≠j ), d ij表示从v i到v j点的距离, r ij表示从v i到v j点的最短路中一个点的编号. ①赋初值. 对所有i, j, d ij = a ij, r ij = j. k = 1. 转向② ②更新d ij, r ij . 对所有i, j, 若d ik + d k j<d ij, 则令d ij = d ik + d k j, r ij = k, 转向③. ③终止判断. 若d ii<0, 则存在一条含有顶点v i的负回路, 终止; 或者k = n终止; 否则令k = k + 1, 转向②. 最短路线可由r ij得到. 例1求图6-4中任意两点间的最短路. 图6-4 解:用Warshall-Floyd算法, MA TLAB程序代码如下: n=8;A=[0 2 8 1 Inf Inf Inf Inf 2 0 6 Inf 1 Inf Inf Inf 8 6 0 7 5 1 2 Inf 1 Inf 7 0 Inf Inf 9 Inf Inf 1 5 Inf 0 3 Inf 8 Inf Inf 1 Inf 3 0 4 6 Inf Inf 2 9 Inf 4 0 3 Inf Inf Inf Inf 8 6 3 0]; % MATLAB中, Inf表示∞ D=A; %赋初值 for(i=1:n)for(j=1:n)R(i,j)=j;end;end%赋路径初值 for(k=1:n)for(i=1:n)for(j=1:n)if(D(i,k)+D(k,j)

数字图像处理 MATLAB代码

MATLAB实用源代码 图像读取及灰度变换 I=imread('cameraman.tif');%读取图像 subplot(1,2,1),imshow(I)%输出图像 title('原始图像')%在原始图像中加标题 subplot(1,2,2),imhist(I)%输出原图直方图 title('原始图像直方图')%在原图直方图上加标题 图像旋转 I=imread('cameraman.tif'); figure,imshow(I); theta=30; K=imrotate(I,theta);%Try varying the angle,theta. figure,imshow(K) 边缘检测 I=imread('cameraman.tif'); J1=edge(I,'sobel'); J2=edge(I,'prewitt'); J3=edge(I,'log'); subplot(1,4,1),imshow(I); subplot(1,4,2),imshow(J1); subplot(1,4,3),imshow(J2); subplot(1,4,4),imshow(J3); 1.图像反转 MATLAB程序实现如下: I=imread('xian.bmp'); J=double(I); J=-J+(256-1);%图像反转线性变换 H=uint8(J); subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(H); 2.灰度线性变换 MATLAB程序实现如下: I=imread('xian.bmp'); subplot(2,2,1),imshow(I); title('原始图像'); axis([50,250,50,200]); axis on;%显示坐标系 I1=rgb2gray(I); subplot(2,2,2),imshow(I1); title('灰度图像'); axis([50,250,50,200]);

Dijkstra、Floyd算法Matlab_Lingo实现

Dijkstra 算法Matlab 实现。 %求一个点到其他各点的最短路径 function [min,path]=dijkstra(w,start,terminal) %W 是邻接矩阵 %start 是起始点 %terminal 是终止点 %min 是最短路径长度 %path 是最短路径 n=size(w,1); label(start)=0; f(start)=start; for i=1:n if i~=start label(i)=inf; end end s(1)=start; u=start; while length(s)(label(u)+w(u,v)) label(v)=(label(u)+w(u,v)); f(v)=u; end end end v1=0; k=inf; for i=1:n ins=0; for j=1:length(s) if i==s(j) ins=1; end end 应用举例: edge=[ 2,3,1,3,3,5,4,4,1,7,6,6,5,5,11,1,8,6,9,10,8,9, 9,10;... 3,4,2,7,5,3,5,11,7,6,7,5,6,11,5,8,1,9,5,11,9,8,10,9;... 3,5,8,5,6,6,1,12,7,9,9,2,2,10,10,8,8,3,7,2,9,9,2,2]; n=11; weight=inf*ones(n,n); for i=1:n weight(i,i)=0; end for i=1:size(edge,2) weight(edge(1,i),edge(2,i))=edge(3,i); end [dis,path]=dijkstra(weight,1,11)

MATLAB Coder可以从MATLAB代码生成独立的、可读性强、可移植的CC++代码

MATLAB Coder可以从MATLAB代码生成独立的、可读性强、可移植的C/C++代码。 使用MATLAB Coder产生代码的3个步骤:准备用于产生代码的MATLAB算法;检查MATLAB代码的兼容性(有些matlab代码语句并不能生成c/c++代码);产生最终使用的源代码或MEX。 利用MATLAB Coder生成c++代码,并在vs2008中验证: 一个简单的例子,两数相乘: 1、安装matlab2011a或者更新版本; 2、简单生成一个foo.m文件; function c = foo(a, b)%#codegen %This function muliplies a and b c = a * b 其中,%#codegen可以防止出现警告错误 3、在命令窗口,输入mex -setpu,选中一个存在的编译器; 4、在命令窗口输入coder(图形界面),回车,弹出MATLAB Coder Project对话框; 5、在New选项卡Name中输入一个工程名foo.prj;点击Ok,弹出MATLAB Coder MEX Function对话框; 6、在Overview选项卡中,点击Add files,弹出对话框,选中foo.m打开; 7、单击变量a,选择Define by Example…,弹出MATLAB Coder Define by Example对话框,在MATLAB Expression 中输入5,点击OK;同样变量b也进行相应操作,输入6; 8、选中Build选项卡,Output type中选择c/c++ Static Library;选中Generate code only; 9、点击More settings,GeneralàLanguage选择C++;Interface选项中去掉所有选项;Close; 10、点击Build,进行编译;点击View report,弹出Code Generation Report对话框,此时,变量a、b、c会显示相应的变量信息; 11、利用vs2008建立一个控制台应用程序,将生成的相关文件foo.h、foo.cpp、rtwtypes.h、foo_types.h拷到相关目录下并添加到应用程序中; 12、在foo.cpp文件中添加#include “stdafx.h”; 13、test.cpp文件中代码为: #include "stdafx.h"

matlab-代码-规范

1.标识符命名原则 标识符的名字应当直观,其长度应当符合“最小长度,最大信息量”原则。 1)非矩阵变量: ?变量名应该以小写字母开头的大小写混合形式譬如:shadowFadingTable,servingSector,rxBufferForRe userID,userPriorityPro等 ?循环变量应该以i、j、k等为前缀,如 for i_File = 1:nFiles for j_Position = 1:nPositions ?避免仅用最后的字母s(表示单复数)区别两个变量, 例如point和points. 可以用类似pointArray的形式加以区别。 ?避免使用一个关键字或者特殊意义的字作为变量名 ?结构体的命名应该以一个大写字母开头,结构体的命名应该是暗示性的,并且不需要包括字段名(fieldname)应采用Segment.length,避免用Segment.SegmentLength 2)常数: ?命名常数(包括全局变量)应该采用大写字母,用下划线分割单词,如MAX_ITERA TIONS,COLOR_RED ?参数可以以某些通用类型名作为前缀,如COLOR_RED,COLOR_GREEN 3)草稿变量,含矩阵,结构体,元胞: ?应用范围比较大的变量应该具有有意义的变量名,作为“草稿变量”的的临时存储空间或者索引可以用短名字。程序员在读到这样的变量的时候,可以假定这个变量 的值在没有几行之后的代码中就不会再用到。通常的“草稿变量”整数的时候用i, j,k,m,n(最好少用i,j,因为他们作为MA TLAB中的永久性常量表示虚数单 位的)。双精度数的时候常用x,y和z。m表示矩阵,没有m表示标量?命名上将cell, struct与MA TLAB中最常见的numeric array, 即数值矩阵区分开来. ?n用于整数变量, 如n_File. ?m用于一般的矩阵,如matrix_channelHFResponse; ?c用于cell array, 如cell_temp= cell(1, 4); ?s用于struct array, 如stuct_user= struct('field', {}); ?matrix,cell,stuct后面的channelHFResponse,user用来表示有特定含义的中间变量,比如matrix_channelHFResponse,用来表示计算channelHFResponse时中间变量。4)函数: ?函数名应该采用小写字母,函数名应该是具有意义的,下划线分割单词 如采用:compute_total_width()避免compwid() ?前缀get/set 应该作为访问对象或者属性的保留前缀,如getobj(.)。 ?前缀compute应该用在计算某些量的函数的地方computespread()。 ?前缀is应该用在布尔函数的命名的地方,如iscomplete()。 ?Find,initialize类似。

MATLAB--练习(含代码)

MATLAB 练习 实验一常见分布的概率密度、分布函数生成 [实验目的] 1. 会利用MATLAB软件计算离散型随机变量的概率,连续型随机变量概率密度值。 2.会利用MATLAB软件计算分布函数值,或计算形如事件。 3.会求上分位点以及分布函数的反函数值。 [实验要求] 1.掌握常见分布的分布律和概率密度的产生命令,如binopdf,normpdf 2. 掌握常见分布的分布函数命令,如binocdf,normcdf 3. 掌握常见分布的分布函数反函数命令,如binoinv,norminv [实验内容] 1 事件A在每次试验中发生的概率是0.3,计算 (1)在10次试验中A恰好发生6次的概率; (2)在10次试验中A至多发生6次的概率. binopdf(6,10,0.3) >> binocdf(6,10,0.3) 2设随机变量X服从参数是3的泊松分布,求概率 poisspdf(6,3) 3设随机变量X服从区间[2,6]上的均匀分布,求 (1)X=4时的概率密度值; (2). unifpdf(4,2,6) >> unifcdf(5,2,6) 4设随机变量X服从参数是6的指数分布,求 (1)X=0,1,2,3,4,5,6时的概率密度值; (2). exppdf(0:6,6) >> expcdf(5,6) 5设随机变量X服从均值是6,标准差是2的正态分布,求 (1) X=3,4,5,6,7,8,9时的概率密度值; (2)X=3,4,5,6,7,8,9时的分布函数值; (3)若=0.345,求x; (4)求标准正态分布的上0.05分位数。 normpdf(3:9,6,2) normcdf(3:9,6,2) norminv(0.345,6,2) norminv(0.95,0,1) 6设随机变量X服从自由度是6的t分布,求

基于matlab的floyd算法+matlab计算最短路径

基于matlab的floyd算法 matlab计算最短路径 function [d,path]=floyd(a,sp,ep) % floyd - 最短路问题 % % Syntax: [d,path]=floyd(a,sp,ep) % % Inputs: % a - 距离矩阵是指i到j之间的距离,可以是有向的 % sp - 起点的标号 % ep - 终点的标号 % % Outputs: % d - 最短路的距离 % path - 最短路的路径 % a =[ 0 50 inf; 50 0 15 ; Inf 15 0 ];% a(i,j),从节点i到j之间的距离 % [d,path]=floyd(a,2,5) sp=3; ep=1; n=size(a,1); D=a; path=zeros(n,n); for i=1:n for j=1:n

if D(i,j)~=inf path(i,j)=j; %j是i的后续点 end end end for k=1:n for i=1:n for j=1:n if D(i,j)>D(i,k)+D(k,j) D(i,j)=D(i,k)+D(k,j); path(i,j)=path(i,k); end end end end p=[sp]; mp=sp; for k=1:n if mp~=ep d=path(mp,ep); p=[p,d]; mp=d; end end d=D(sp,ep) path=p

试计算下图的最短路径, 1.起点C点,终点A点。 2.起点A点,终点G点。 3.起点D点,终点F点。 试计算下图的最短路径, 1.起点F点,终点A点。 2. 起点E点,终点C点。

MATLAB实用源代码

clc clear all InputImage=imread('11.png'); %读入要处理的图像 GrayImage=rgb2gray(InputImage);% 将图像转换为灰度图像 figure(1) imshow(Gx) % 显示使用matlab自带sobel水平算子得到的图片 GrayImage=double(GrayImage); % 把图像变为双精度图像类型 [m n]=size(GrayImage); %图像的大小(长和宽) g=zeros(m,n); %定义一个大小为S的空矩阵 for i=2:m-1 for j=2:n-1 g(i,j)=GrayImage(i-1,j-1)+2*GrayImage(i-1,j)+GrayImage(i-1,j+1)-GrayImage(i+1 ,j-1)-2*GrayImage(i+1,j)-GrayImage(i+1,j+1); %Sobel算子的垂直梯度 end end %边缘像素的操作 g(1,:)=0; g(:,1)=0; g(m,:)=0; g(:,n)=0; figure(2) SFImage=uint8(g); % 显示滤波后的图像 imshow(SFImage)

MATLAB实用源代码 (2010-03-31 09:41:21) 转载 标签: 杂谈 1.图像反转 MATLAB 程序实现如下: I=imread('xian.bmp'); J=double(I); J=-J+(256-1); %图像反转线性变换 H=uint8(J); subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(H); 2.灰度线性变换 MATLAB 程序实现如下: I=imread('xian.bmp'); subplot(2,2,1),imshow(I); title('原始图像'); axis([50,250,50,200]); axis on; %显示坐标系 I1=rgb2gray(I); subplot(2,2,2),imshow(I1); title('灰度图像'); axis([50,250,50,200]); axis on; %显示坐标系 J=imadjust(I1,[0.1 0.5],[]); %局部拉伸,把[0.1 0.5]内的灰度拉伸为[0 1] subplot(2,2,3),imshow(J); title('线性变换图像[0.1 0.5]'); axis([50,250,50,200]); grid on; %显示网格线 axis on; %显示坐标系 K=imadjust(I1,[0.3 0.7],[]); %局部拉伸,把[0.3 0.7]内的灰度拉伸为[0 1] subplot(2,2,4),imshow(K); title('线性变换图像[0.3 0.7]'); axis([50,250,50,200]); grid on; %显示网格线 axis on; %显示坐标系 3.非线性变换 MATLAB 程序实现如下: I=imread('xian.bmp'); I1=rgb2gray(I); subplot(1,2,1),imshow(I1); title(' 灰度图像'); axis([50,250,50,200]);

相关文档