最小生成树matlab程序

最小生成树matlab程序
最小生成树matlab程序

function [Wt,Pp]=mintree(n,W)

%求最小生成树,n为顶点个数,W是权值邻接矩阵,不相邻的用inf表示%Wt是最小生成树的权,Pp(:,1:2)表示最小生成树的两顶点

%Pp(:,4)表示最小生成树的序号

tmpa=find(W~=inf);

[tmpb,tmpc]=find(W~=inf);

w=W(tmpa);

e=[tmpb,tmpc];

[wa,wb]=sort(w);

E=[e(wb,:),wa,wb];

[nE,mE]=size(E);

temp=find(E(:,1)-E(:,2));

E=E(temp,:);

P=E(1,:);

k=length(E(:,1));

while rank(E)>0

temp1=max(E(1,2),E(1,1));

temp2=min(E(1,2),E(1,1));

for i=1:k

if E(i,1)==temp1

E(i,1)=temp2;

end

if E(i,2)==temp1

E(i,2)=temp2;

end

end

a=find(E(:,1)-E(:,2));

E=E(a,:);

if rank(E)>0

P=[P;E(1,:)];

k=length(E(:,1));

end

end

Wt=sum(P(:,3));

Pp=[e(P(:,4),:),P(:,3:4)];

for i=1:length(P(:,3))

disp(['','e',num2str(P(i,4)),'',...

'(v',num2str(P(i,1)),'','v',num2str(P(i,2)),')']);

end

axis equal;%画最小生成树

hold on

[x,y]=cylinder(1,n);

xm=min(x(1,:));

ym=min(y(1,:));

xx=max(x(1,:));

yy=max(y(1,:));

axis([xm-abs(xm)*,xx+abs(xx)*,ym-abs(ym)*,yy+abs(yy)*]); plot(x(1,:),y(1,:),'ko');

for i=1:n

temp=['v',int2str(i)];

text(x(1,i),y(1,i),temp);

end

for i=1:nE

plot(x(1,e(i,:)),y(1,e(i,:)),'b');

end

for i=1:length(P(:,4))

plot(x(1,Pp(i,1:2)),y(1,Pp(i,1:2)),'r');

end

text,,['最小生成树的权为','',num2str(Wt)]);

title('红色连线为最小生成树');

axis off;

hold off;

调用此程序要先编写主程序。例:

n=6;

W=inf*ones(6);

W(1,[2,3,4])=[6,1,5];

W(2,[3,5])=[5,3];

W(3,[4,5,6])=[5,6,4];

W(4,6)=2;

W(5,6)=6;

[a,b]=mintree(n,W)

命名为example

在窗口中运行此程序得:

e2(v1v3)

e9(v4v6)

e6(v2v5)

e8(v1v4)

e3(v2v1)

a =

15

b =

1 3 1 2

4 6 2 9

2 5

3 6

3 6

4 8 2 3

5 3

Matlab程序命令

Matlab程序命令(四)数据处理及空间自回归模型参数估计 一、教材实例 Matlab操作过程(注意:在进行空间计量模型参数估计时,要把空间计量软件包jplv7和fanzuan、lYhbzh函数添加到Matlab程序文件夹中,否则,所有与Matlab相关的程序、函数等都能够被Matlab识别并使用) %空间自回归模型设立 %移项、矩阵变换 %估计结果 (一)构造变量矩阵 y=[42;37;30;26;30;37;42] %7行1列矩阵 x=[10,30;20,20;30,10;50,0;30,10;20,20;10,30] %7行2列矩阵 (二)构建已经行标准化的空间权重矩阵 W=zeros(7) %建立7×7零矩阵 W(1,2)=1 %赋W第1行第2列为1的值 W(2,1)=0.5 %赋W第2行第1列为0.5的值 W(2,3) =0.5 %赋W第2行第3列为0.5的值 W(3,2) =0.5 %赋W第3行第2列为0.5的值 W(3,4) =0.5 %赋W第3行第4列为0.5的值 W(4,3) =0.5 %赋W第4行第3列为0.5的值 W(4,5) =0.5 %赋W第4行第5列为0.5的值 W(5,4) =0.5 %赋W第5行第4列为0.5的值 W(5,6) =0.5 %赋W第5行第6列为0.5的值 W(6,5) =0.5 %赋W第6行第5列为0.5的值 W(6,7) =0.5 %赋W第6行第7列为0.5的值 W(7,6) =1 %赋W第7行第6列为1的值 (三)估计空间自回归模型Matlab程序命令 results = sar(y,x,W) %估计估计空间自回归模型参数 prt(results) %格式化 二、教材实例(续) (一)引进函数lyhbzh的Matlab程序命令

最小二乘法曲线拟合 原理及matlab实现

曲线拟合(curve-fitting ):工程实践中,用测量到的一些离散的数据},...2,1,0),,{(m i y x i i =求一个近似的函数)(x ?来拟合这组数据,要求所得的拟合曲线能最好的反映数据的基本趋势(即使)(x ?最好地逼近()x f ,而不必满足插值原则。因此没必要取)(i x ?=i y ,只要使i i i y x -=)(?δ尽可能地小)。 原理: 给定数据点},...2,1,0),,{(m i y x i i =。求近似曲线)(x ?。并且使得近似曲线与()x f 的偏差最小。近似曲线在该点处的偏差i i i y x -=)(?δ,i=1,2,...,m 。 常见的曲线拟合方法: 1.使偏差绝对值之和最小 2.使偏差绝对值最大的最小 3.使偏差平方和最小 最小二乘法: 按偏差平方和最小的原则选取拟合曲线,并且采取二项式方程为拟合曲线的方法,称为最小二乘法。 推导过程: 1. 设拟合多项式为: 2. 各点到这条曲线的距离之和,即偏差平方和如下: 3. 问题转化为求待定系数0a ...k a 对等式右边求i a 偏导数,因而我们得到 了: ....... 4、 把这些等式化简并表示成矩阵的形式,就可以得到下面的矩阵: 5. 将这个范德蒙得矩阵化简后可得到:

6. 也就是说X*A=Y,那么A = (X'*X)-1*X'*Y,便得到了系数矩阵A,同时,我们也就得到了拟合曲线。 MATLAB实现: MATLAB提供了polyfit()函数命令进行最小二乘曲线拟合。 调用格式:p=polyfit(x,y,n) [p,s]= polyfit(x,y,n) [p,s,mu]=polyfit(x,y,n) x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量p。x必须是单调的。矩阵s包括R(对x进行QR分解的三角元素)、df(自由度)、normr(残差)用于生成预测值的误差估计。 [p,s,mu]=polyfit(x,y,n)在拟合过程中,首先对x进行数据标准化处理,以在拟合中消除量纲等影响,mu包含标准化处理过程中使用的x的均值和标准差。 polyval( )为多项式曲线求值函数,调用格式: y=polyval(p,x) [y,DELTA]=polyval(p,x,s) y=polyval(p,x)为返回对应自变量x在给定系数P的多项式的值。 [y,DELTA]=polyval(p,x,s) 使用polyfit函数的选项输出s得出误差估计Y DELTA。它假设polyfit函数数据输入的误差是独立正态的,并且方差为常数。则Y DELTA将至少包含50%的预测值。 如下给定数据的拟合曲线: x=[0.5,1.0,1.5,2.0,2.5,3.0], y=[1.75,2.45,3.81,4.80,7.00,8.60]。 解:MATLAB程序如下: x=[0.5,1.0,1.5,2.0,2.5,3.0]; y=[1.75,2.45,3.81,4.80,7.00,8.60]; p=polyfit(x,y,2) x1=0.5:0.05:3.0; y1=polyval(p,x1); plot(x,y,'*r',x1,y1,'-b') 运行结果如图1 计算结果为: p =0.5614 0.8287 1.1560 即所得多项式为y=0.5614x^2+0.08287x+1.15560 图1 最小二乘法曲线拟合示例 对比检验拟合的有效性: 例:在[0,π]区间上对正弦函数进行拟合,然后在[0,2π]区间画出图形,比较拟合区间和非拟合区间的图形,考察拟合的有效性。 在MATLAB中输入如下代码: clear x=0:0.1:pi; y=sin(x); [p,mu]=polyfit(x,y,9)

php九九乘法表

"; for($j = 1;$j <= 9;$j++){ echo ""; for($z = 0;$z <9 - $j;$z++){ echo " "; } for($i = $j;$i >= 1;$i--){ echo "$i*$j=".$i*$j.""; } echo ""; } echo "";*/ //第三种 /*echo "

"; for($j = 9;$j >= 1;$j--){ echo ""; for($z = 1;$z <= 9 - $j;$z++ ){ echo ""; //echo "$i*$j=".$i*$j."";

} for($i = 1;$i <= $j;$i++){ echo "

"; } echo ""; } echo "
$i*$j=".$i*$j."
";*/ /*第二种 for($j = 9;$j >= 1;$j--){ for($i = 1; $i <= $j; $i++){ //echo "$i x $j = ".$i * $j; //echo " "; echo "$i x $j =".$i*$j."  "; } echo "
"; } */ /*第一种 for($j = 1;$j <= 9;$j++){

利用Matlab解决数学问地的题目

利用Matlab 解决数学问题 一、线性规划 求解线性规划的Matlab 解法 单纯形法是求解线性规划问题的最常用、最有效的算法之一。单纯形法是首先由 George Dantzig 于1947年提出的,近60年来,虽有许多变形体已被开发,但却保持着同样的基本观念。由于有如下结论:若线性规划问题有有限最优解,则一定有某个最优解是可行区域的一个极点。基于此,单纯形法的基本思路是:先找出可行域的一个极点,据一定规则判断其是否最优;若否,则转换到与之相邻的另一极点,并使目标函数值更优;如此下去,直到找到某一最优解为止。这里我们不再详细介绍单纯形法,有兴趣的读者可以参看其它线性规划书籍。下面我们介绍线性规划的Matlab 解法。 中线性规划的标准型为 b Ax x c T x ≤ such that min 基本函数形式为linprog(c,A,b),它的返回值是向量x 的值。还有其它的一些函数调用形式(在 Matlab 指令窗运行 help linprog 可以看到所有的函数调用形式),如: [x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,X 0,OPTIONS) 这里fval 返回目标函数的值,Aeq 和beq 对应等式约束beq x Aeq =*,LB 和UB 分别是变量x 的下界和上界, x 是x 的初始值,OPTIONS 是控制参数。 例2 求解下列线性规划问题 3 21532m ax x x x z -+=

??? ??≥≥+-=++0,,105273 21321321x x x x x x x x x 解 (i )编写M 文件 c=[2;3;-5]; a=[-2,5,-1]; b=-10; aeq=[1,1,1]; beq=7; x=linprog(-c,a,b,aeq,beq,zeros(3,1)) value=c'*x (ii )将M 文件存盘,并命名为。 (iii )在Matlab 指令窗运行example1即可得所求结果。 例3 求解线性规划问题 3 2132 m in x x x z ++= ??? ??≥≥+≥++0,,62382432121321x x x x x x x x 解 编写Matlab 程序如下: c=[2;3;1]; a=[1,4,2;3,2,0]; b=[8;6];

matlab运算函数与命令

Matlab符号运算介绍 Matlab符号运算是通过符号数学工具箱(Symbolic Math Toolbox)来实现的. Matlab符号运算(二) 符号对象的建立:sym 和syms 例: >> syms x y z >> x=sym('x'); >> y=sym('y'); >> z=sym('z'); 符号对象建立时可以附加属性: real,positive 和unreal >> k=sym('k','positive') >> x=sym('x','real') >> x=sym('x','unreal') 表明x 是实的 Matlab符号运算(二) 表明k 是正的 去掉x 的附加属性 符号表达式的建立 >> f2=sym('sin(x)+cos(x)') >> syms x >> f1=sin(x)+cos(x) >> f3='sin(x)+cos(x)' 用这种方法创建的符号表达式对空格很敏感,不要在字符间随意添加空格! Matlab符号运算(二) 推荐! 符号变量与符号常量 >> a=sym('a'); >> b=sym('5'); >> c=sym(5); b,c有区别吗 hint:help sym 相关函数 findsym: 查找符号表达式中的符号变量 findsym(f) 按字母顺序列出符号表达式 f 中的所有自由变量findsym(f,N) 列出f 中距离x 最近的N 个自由变量(i,j 除外) 默认自变量=findsym(f,1) Matlab符号运算(二) >> a=sym('a');x=sym('x');k=sym('3'); >> f=k*x+a; >> findsym(f) 例: ans=a,x

用matlab实现最小二乘递推算法辨识系统参数

用matlab实现最小二乘递推算法辨识系统参 数 自动化系统仿真实验室指导教师: 学生姓名班级计082-2 班学号撰写时间: 全文结束》》-3-1 成绩评定: 一.设计目的 1、学会用Matlab实现最小二乘法辨识系统参数。 2、进一步熟悉Matlab的界面及基本操作; 3、了解并掌握Matlab中一些函数的作用与使用;二.设计要求最小二乘递推算法辨识系统参数,利用matlab编程实现,设初始参数为零。z(k)-1、5*z(k-1)+0、7*z(k-2)=1*u(k-1)+0、5*u(k-2)+v(k); 选择如下形式的辨识模型:z(k)+a1*z(k- 1)+a2*z(k-2)=b1*u(k-1)+b2*u(k-2)+v(k);三.实验程序 m=3;N=100;uk=rand(1,N);for i=1:Nuk(i)=uk(i)*(-1)^(i-1);endyk=zeros(1,N); for k=3:N yk(k)=1、5*yk(k-1)-0、 7*yk(k-2)+uk(k-1)+0、5*uk(k-2); end%j=100;kn=0;%y=yk(m:j);%psi=[yk(m-1:j-1);yk(m-2:j-2);uk(m-1:j-1);uk(m-2:j- 2)];%pn=inv(psi*psi);%theta=(inv(psi*psi)*psi*y);theta=[0 ;0;0;0];pn=10^6*eye(4);for t=3:Nps=([yk(t-1);yk(t-

2);uk(t-1);uk(t-2)]);pn=pn- pn*ps*ps*pn*(inv(1+ps*pn*ps));theta=theta+pn*ps*(yk(t)-ps*theta);thet=theta;a1=thet(1);a2=thet(2);b1=thet(3);b2= thet(4); a1t(t)=a1;a2t(t)=a2;b1t(t)=b1;b2t(t)=b2;endt=1:N;plot(t,a 1t(t),t,a2t(t),t,b1t(t),t,b2t(t));text(20,1、 47,a1);text(20,-0、67,a2);text(20,0、97,b1);text(20,0、47,b2);四.设计实验结果及分析实验结果图:仿真结果表明,大约递推到第步时,参数辨识的结果基本到稳态状态,即a1=1、5999,b1=1,c1=0、5,d1=-0、7。五、设计感受这周的课程设计告一段落了,时间短暂,意义重大。通过这次次练习的机会,重新把matlab课本看了一遍,另外学习了系统辨识的有关内容,收获颇丰。对matlab的使用更加纯熟,也锻炼了自己在课本中搜索信息和知识的能力。在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。同时我也进一步认识了matlab软件强大的功能。在以后的学习和工作中必定有很大的用处。

图论算法及其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.循环语句for for i=s1:s3:s2 循环语句组 end 解释:首先给i赋值s1;然后,判断i是否介于s1与s2之间;如果是,则执行循环语句组,i=i+s3(否则,退出循环.);执行完毕后,继续下一次循环。 例:求1到100的和,可以编程如下: sum=0 for i=1:1:100 sum=sum+i end 这个程序也可以用while语句编程。 注:for循环可以通过break语句结束整个for循环. 2.循环语句while 例:sum=0;i=1; while(i<=100) sum=sum+i;i=i+1; end 3.if语句 if(条件) 语句 end if(条件) 语句 else 语句 end if(条件) 语句 elseif 语句 end 4.关系表达式:

=,>,<,>=,<=,==(精确等于) 5.逻辑表达式:|(或),&(且) 6.[n,m]=size(A)(A为矩阵) 这样可以得到矩阵A的行和列数 n=length(A),可以得到向量A的分量个数;如果是矩阵,则得到矩阵A的行与列数这两个数字中的最大值。 7.!后面接Dos命令可以调用运行一个dos程序。 8.常见函数: poly():为求矩阵的特征多项式的函数,得到的为特征多项式的各个系数。如 a=[1,0,0;0,2,0;0,0,3],则poly(a)=1 -6 11 -6。相当于poly(a)=1入^3+(-6)入^2+11入+(-6)。 compan():可以求矩阵的伴随矩阵. sin()等三角函数。 MATLAB在数学建模中的应用(3) 一、程序设计概述 MATLAB所提供的程序设计语言是一种被称为第四代编程语言的高级程序设计语言,其程序简洁,可读性很强,容易调试。同时,MATLAB的编程效率比C/C++语言要高得多。 MATLAB编程环境有很多。常用的有: 1.命令窗口 2.word窗口 3.M-文件编辑器,这是最好的编程环境。 M-文件的扩展名为“.m”。M-文件的格式分为两种: ①λ M-脚本文件,也可称为“命令文件”。 ② M-函数文件。这是matlab程序设计的主流。λ 保存后的文件可以随时调用。 二、MATLAB程序结构 按照现代程序设计的观点,任何算法功能都可以通过三种基本程序结构来实现,这三种结构是:顺序结构、选择结构和循环结构。其中顺序结构是最基本的结构,它依照语句的自然顺序逐条地执行程序的各条语句。如果要根据输入数据的实际情况进行逻辑判断,对不同的结果进行不同的处理,可以使用选择结构。如果需要反复执行某些程序段落,可以使用循环结构。 1 顺序结构 顺序结构是由两个程序模块串接构成。一个程序模块是完成一项独立功能的逻辑单元,它可以是一段程序、一个函数,或者是一条语句。 看图可知,在顺序结构中,这两个程序模块是顺序执行的,即先执行<程序

Matlab中求解最小生成树

数学建模——Matlab中求解最小生成树 关键词:Matlab、最小生成树、破圈法、避圈法、运筹学 要求:选择一道编程题自己独立完成,必须自己编写源代码,不能从网上下载。先编写算法的通用程序,然后以例子运行,论文内容包括程序代码、程序说明、例子运行结果,最终程序文件连同论文一起发至e-mail,便于老师运行程序是否正确。编程使用C或MATLAB。 选择题目:编写实现生成树、最小生成树的程序(包括避圈法、破圈法)。 题目分析:本题要求编写实现生成树、最小生成树的程序,首先来了解一下关于关于生成树的概念: 1、树的概念: 树是无向图的特殊情况,即对于一个N个节点的无向图,其中只有N-1条边,且图中任意两点间有且只有一条路径,即图中不存在环,这样的图称为树。2、生成树的概念: 对于一个无向连通图G=(V,E),其中V代表顶点,E代表边,对它做一次遍历,每个节点经过一次,那么图中的N个节点再加上遍历过程中经过的N-1条边所构成的子图就是图G的一个生成树。 3、最小生成树的概念: 对于一个无向连通图G=(V,E),给它的每条边(u,v)赋一个权值w(u,v)。若图G 的生成树不止一个,那么其中包含的N-1条边的权值之和的最小的生成树就是图G的最小生成树。 4、关于运筹学中最小生成树有2种不错的算法,即避圈法和破圈法,下面来看一下求解最小生成树的算法: 先看一下图示法表示的最小生成树:

<1>避圈法求解上面无向带权连通图的基本步骤是: 每步从未选的边中选取边e,使它与已选边不构成圈,且e是未选边中的最小权 边,直到选够n-1条边为止。

<2>破圈法基本思想如下: (1) 每次从图中选取任意一个圈, 然后去掉该圈中权值最大的边(如果存在多条相同权值的最大边,可以任意选择一条去掉即可) 使之不构成圈. (2) 重复上述过程. 直到图中不再含圈且所有顶点均包含在图中为止, 就构成最小生成树. 它的算法图解如下: 5、我们在用matlab程序求解最小生成树的时候需要用到无向图的邻接矩阵,首先来了解一下邻接矩阵的概念。 邻接矩阵(Adjacency Matrix):是表示顶点之间相邻关系的矩阵。设G=(V,E)是

最小二乘法的多项式拟合matlab实现

最小二乘法的多项式拟 合m a t l a b实现 Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】

用最小二乘法进行多项式拟合(matlab 实现) 西安交通大学 徐彬华 算法分析: 对给定数据 (i=0 ,1,2,3,..,m),一共m+1个数据点,取多项式P(x),使 函数P(x)称为拟合函数或最小二乘解,令似的 使得 其中,a0,a1,a2,…,an 为待求未知数,n 为多项式的最高次幂,由此,该问题化为求 的极值问题。由多元函数求极值的必要条件: j=0,1,…,n 得到: j=0,1,…,n 这是一个关于a0,a1,a2,…,an 的线性方程组,用矩阵表示如下:

因此,只要给出数据点 及其个数m ,再给出所要拟合的参数n ,则即可求出未知数矩阵(a0,a1,a2,…,an ) 试验题1 编制以函数 为基的多项式最小二乘拟合程序,并用于对下列数据作三次多项式最小二乘拟合(取权函数wi ≡1) x i y i 总共有7个数据点,令m=6 第一步:画出已知数据的的散点图,确定拟合参数n; x=::;y=[,,,,,,]; plot(x,y,'*') xlabel 'x 轴' ylabel 'y 轴' title '散点图' hold on {} n k k x 0=

因此将拟合参数n设为3. 第二步:计算矩阵 A= 注意到该矩阵为(n+1)*(n+1)矩阵, 多项式的幂跟行、列坐标(i,j)的关系为i+j-2,由此可建立循环来求矩阵的各个元素,程序如下: m=6;n=3; A=zeros(n+1); for j=1:n+1 for i=1:n+1 for k=1:m+1 A(j,i)=A(j,i)+x(k)^(j+i-2) end end

九九乘法表的C语言代码

九九乘法表的C语言代码,黄路平编写与2012.3.6 代码一:#include int main() { int i=1,j; for (i=1,j=1;j<=9;j++) { if( j==1) printf("%d*%d=%d\n",i,j,i*j); else {for (i=1;i<=j;i++) printf("%d*%d=%d\t",i,j,i*j); printf("\n"); } } } 代码二:switch语句 #include int main() { int i=1,j; for (i=1,j=1;j<=9;j++) { switch(j) { case 1:printf ("%d*%d=%d\t",i,j,i*j); printf("\n"); break; case 2: for (i=1;i<=j;i++) printf ("%d*%d=%d\t",i,j,i*j); printf("\n"); break; case 3:for (i=1;i<=j;i++) printf ("%d*%d=%d\t",i,j,i*j); printf("\n"); break; case 4:for (i=1;i<=j;i++) printf ("%d*%d=%d\t",i,j,i*j); printf("\n"); break; case 5:for (i=1;i<=j;i++) printf ("%d*%d=%d\t",i,j,i*j); printf("\n"); break;

case 6:for (i=1;i<=j;i++) printf ("%d*%d=%d\t",i,j,i*j); printf("\n"); break; case 7:for (i=1;i<=j;i++) printf ("%d*%d=%d\t",i,j,i*j); printf("\n"); break; case 8:for (i=1;i<=j;i++) printf ("%d*%d=%d\t",i,j,i*j); printf("\n"); break; case 9:for (i=1;i<=j;i++) printf ("%d*%d=%d\t",i,j,i*j); printf("\n"); break; } } }

Matlab最小二乘法曲线拟合的应用实例

MATLAB机械工程 最小二乘法曲线拟合的应用实例 班级: 姓名: 学号: 指导教师:

一,实验目的 通过Matlab上机编程,掌握利用Matlab软件进行数据拟合分析及数据可视化方法 二,实验内容 1.有一组风机叶片的耐磨实验数据,如下表所示,其中X为使用时间,单位为小时h,Y为磨失质量,单位为克g。要求: 对该数据进行合理的最小二乘法数据拟合得下列数据。 x=[10000 11000 12000 13000 14000 15000 16000 17000 18000 19000 2 0000 21000 22000 23000]; y=[24.0 26.5 29.8 32.4 34.7 37.7 41.1 42.8 44.6 47.3 65.8 87.5 137.8 174. 2] 三,程序如下 X=10000:1000:23000; Y=[24.0,26.5,29.8,32.4,34.7,37.7,41.1,42.8,44.6,47.3,65.8,87.5,137.8,17 4.2] dy=1.5; %拟合数据y的步长for n=1:6 [a,S]=polyfit(x,y,n); A{n}=a;

da=dy*sqrt(diag(inv(S.R′*S.R))); Da{n}=da′; freedom(n)=S.df; [ye,delta]=polyval(a,x,S); YE{n}=ye; D{n}=delta; chi2(n)=sum((y-ye).^2)/dy/dy; end Q=1-chi2cdf(chi2,freedom); %判断拟合良好度 clf,shg subplot(1,2,1),plot(1:6,abs(chi2-freedom),‘b’) xlabel(‘阶次’),title(‘chi2与自由度’) subplot(1,2,2),plot(1:6,Q,‘r’,1:6,ones(1,6)*0.5) xlabel(‘阶次’),title(‘Q与0.5线’) nod=input(‘根据图形选择适当的阶次(请输入数值)’); elf,shg, plot(x,y,‘kx’);xlabel(‘x’),ylabel(‘y’); axis([8000,23000,20.0,174.2]);hold on errorbar(x,YE{nod},D{nod},‘r’);hold off title(‘较适当阶次的拟合’) text(10000,150.0,[‘chi2=’num2str(chi2(nod))‘~’int2str(freedom(nod))])

最小生成树matlab程序

%n表示节点数,A表示弧权矩阵 function [I]=MinTree(n,A) k=1; %记录A中不同正数的个数 for(i=1:n-1)for(j=i+1:n) %此循环是查找A中所有不同的正数 if(A(i,j)>0)x(k)=A(i,j); %数组x记录A中不同的正数 kk=1; %临时变量 for(s=1:k-1)if(x(k)==x(s))kk=0;break;end;end %排除相同的正数 k=k+kk;end;end;end k=k-1 %显示A中所有不同正数的个数 for(i=1:k-1)for(j=i+1:k) %将x中不同的正数从小到大排序 if(x(j)0)kk=kk+1;zz=z;end;end %寻找TT中的树枝 if(kk==1)TT(y,zz)=0;TT(zz,y)=0;pd=0;end;end %砍掉TT中的树枝 if(pd)break;end;end %已砍掉了TT中所有的树枝 pd=0; %判断TT中是否有圈 for(y=1:n-1)for(z=y+1:n)if(TT(y,z)>0)pd=1;break;end;end;end if(pd)T(i,j)=0;T(j,i)=0; %假如TT中有圈 else q=q+1;end;end;end;end;end T %显示近似最小生成树T, 程序结束

第1章 MATLAB

第1章MATLAB 7.x概述 MATLAB是目前世界上最流行的、应用最广泛的工程计算和仿真软件。MATLAB是Matrix Laboratory的缩写,它的产生是与数学计算紧密联系在一起的。MATLAB是一个交互式开发系统,其基本数据要素是矩阵。 本门课程以MATLAB 7.3和simulink 6.5版为平台进行全面地介绍。 1.1 MATLAB 7.3 简介 1.1.1 MATLAB的系统结构 MATLAB系统由MATLAB开发环境、MATLAB语言、MATLAB数学函数库、MATLAB图形处理系统和MATLAB应用程序接口(API)五大部分组成。 (1)MATLAB开发环境是一个集成的工作环境。 (2)MATLAB语言具有程序流程控制、函数、数据结构、输入输出和面向对象的编程特点,是基于矩阵/数组的语言。 (3)MATLAB的数学函数库包含了大量的计算算法。 (4)MATLAB的图形处理系统能够将二维和三维数组的数据用图形表示出来。 (5)MATLAB应用程序接口使MATLAB语言能与C或FORTRAN等其他编程语言进行交互。 1.1.2 MATLAB的特点 1. 运算功能强大 2. 编程效率高 3. 强大而智能化的作图功能 4. 可扩展性强 5. Simulink动态仿真功能 1.1.3 MATLAB工具箱 MATLAB的工具箱(Toolbox)是一个专业家族产品,工具箱实际上是MATLAB 的M文件和高级MATLAB语言的集合,用于解决某一方面的专门问题或实现某一类的新算法。 包括应用数学类、控制类、信号处理类等工具箱。 1.2 MATLAB 7.3的开发环境 1.2.1 MATLAB 7.3的环境设置 1.2.3 菜单和工具栏 1. 菜单 MATLAB 7.3还会根据不同的窗口,增加一些浮动菜单。 (1)File菜单 (2)Edit菜单 (3)Debug菜单 (4)Desktop菜单 (5)Windows菜单 (6)Help菜单 (7)开始菜单 在MATLAB操作界面的左下角有一个按钮,是MATLAB的快捷菜单。

曲线拟合的最小二乘法matlab举例

曲线拟合的最小二乘法 学院:光电信息学院 姓名:赵海峰 学号: 200820501001 一、曲线拟合的最小二乘法原理: 由已知的离散数据点选择与实验点误差最小的曲线 S( x) a 0 0 ( x) a 1 1(x) ... a n n ( x) 称为曲线拟合的最小二乘法。 若记 m ( j , k ) i (x i ) j (x i ) k (x i ), 0 m (f , k ) i0 (x i )f (x i ) k (x i ) d k n 上式可改写为 ( k , jo j )a j d k ; (k 0,1,..., n) 这个方程成为法方程,可写成距阵 形式 Ga d 其中 a (a 0,a 1,...,a n )T ,d (d 0,d 1,...,d n )T , 、 数值实例: 下面给定的是乌鲁木齐最近 1个月早晨 7:00左右(新疆时间 )的天气预报所得 到的温度数据表,按照数据找出任意次曲线拟合方程和它的图像。 它的平方误差为: || 2 | 2 ] x ( f

(2008 年 10 月 26~11 月 26) F 面应用Matlab 编程对上述数据进行最小二乘拟合 三、Matlab 程序代码: x=[1:1:30]; y=[9,10,11,12,13,14,13,12,11,9,10,11,12,13,14,12,11,10,9,8,7,8,9,11,9,7,6,5,3,1]; %三次多项式拟合% %九次多项式拟合% %十五次多项式拟合% %三次多项式误差平方和 % %九次次多项式误差平方和 % %十五次多项式误差平方和 % %用*画出x,y 图像% %用红色线画出x,b1图像% %用绿色线画出x,b2图像% %用蓝色o 线画出x,b3图像% 四、数值结果: 不同次数多项式拟和误差平方和为: r1 = 67.6659 r2 = 20.1060 r3 = 3.7952 r1、r2、r3分别表示三次、九次、十五次多项式误差平方和 拟和曲线如下图: a 仁polyfit(x,y,3) a2= polyfit(x,y,9) a3= polyfit(x,y,15) b1= polyval(a1,x) b2= polyval(a2,x) b3= polyval(a3,x) r1= sum((y-b1).A 2) r2= sum((y-b2).A2) r3= sum((y-b3).A2) plot(x,y,'*') hold on plot(x,b1, 'r') hold on plot(x,b2, 'g') hold on plot(x,b3, 'b:o')

九九乘法表源代码(vb)

Private Sub Command1_Click() For i = 1 To 4 For j = 1 To 6 Print "*"; Next j Print Next i End Sub Private Sub Command2_Click() For i = 1 To 4 Print Tab(i); For j = 1 To 6 Print "*"; Next j Print Next i End Sub Private Sub Command3_Click() For i = 1 To 4 Print Tab(5 - i); For j = 1 To 6 Print "*"; Next j Print Next i End Sub Private Sub Command4_Click() For i = 1 To 9 For j = 1 To 9 Print i; "*"; j; "="; i * j; Next j Print Next i End Sub Private Sub Command5_Click() Dim se As String Print Tab(35); "乘法表" For i = 1 To 9 For j = 1 To 9 se = i & "*" & j & "=" & i * j

Print Tab((j - 1) * 9); se; Next j Picture1.Print Next i End Sub Private Sub Command6_Click() End End Sub Private Sub Command7_Click() Print Tab(35); "乘法表" For i = 1 To 9 For j = i To 9 se = i & "*" & j & "=" & i * j Print Tab((j - 1) * 9); se; Next j Print Next i End Sub Private Sub Command8_Click() Print Tab(35); "乘法表" For i = 1 To 9 For j = 1 To i se = i & "*" & j & "=" & i * j Print Tab((j - 1) * 9); se; Next j Print Next i End Sub Private Sub Command9_Click() Cls End Sub Private Sub Picture1_Click() Dim se As String Picture1.Print Tab(35); "乘法表" For i = 1 To 9 For j = 1 To 9 se = i & "*" & j & "=" & i * j Picture1.Print Tab((j - 1) * 9); se; Next j

最小生成树matlab程序

function [Wt,Pp]=mintree(n,W) %求最小生成树,n为顶点个数,W就是权值邻接矩阵,不相邻的用inf表示%Wt就是最小生成树的权,Pp(:,1:2)表示最小生成树的两顶点 %Pp(:,4)表示最小生成树的序号 tmpa=find(W~=inf); [tmpb,tmpc]=find(W~=inf); w=W(tmpa); e=[tmpb,tmpc]; [wa,wb]=sort(w); E=[e(wb,:),wa,wb]; [nE,mE]=size(E); temp=find(E(:,1)-E(:,2)); E=E(temp,:); P=E(1,:); k=length(E(:,1)); while rank(E)>0 temp1=max(E(1,2),E(1,1)); temp2=min(E(1,2),E(1,1)); for i=1:k if E(i,1)==temp1 E(i,1)=temp2; end if E(i,2)==temp1 E(i,2)=temp2; end end a=find(E(:,1)-E(:,2)); E=E(a,:); if rank(E)>0 P=[P;E(1,:)];

k=length(E(:,1)); end end Wt=sum(P(:,3)); Pp=[e(P(:,4),:),P(:,3:4)]; for i=1:length(P(:,3)) disp(['','e',num2str(P(i,4)),'',、、、 '(v',num2str(P(i,1)),'','v',num2str(P(i,2)),')']); end axis equal;%画最小生成树 hold on [x,y]=cylinder(1,n); xm=min(x(1,:)); ym=min(y(1,:)); xx=max(x(1,:)); yy=max(y(1,:)); axis([xm-abs(xm)*0、15,xx+abs(xx)*0、15,ym-abs(ym)*0、15,yy+abs(yy)*0、15]); plot(x(1,:),y(1,:),'ko'); for i=1:n temp=['v',int2str(i)]; text(x(1,i),y(1,i),temp); end for i=1:nE plot(x(1,e(i,:)),y(1,e(i,:)),'b'); end for i=1:length(P(:,4)) plot(x(1,Pp(i,1:2)),y(1,Pp(i,1:2)),'r'); end text(-0、35,-1、2,['最小生成树的权为','',num2str(Wt)]); title('红色连线为最小生成树');

VB程序设计-九九乘法表

VB程序设计-九九乘法表 (作者:草原飞狼 2014年5月31日) 声明:仅供学习与交流使用,高手请飘过,谢谢!所有代码都是个人亲自编写并调试成功。 布局

运行界面(1) 运行界面(2) 源代码如下: Private Sub Command1_Click() Rem 乘法表算法一 Dim i, j As Integer For i = 1 To 9 For j = 1 To i expss = i & "*" & j & "=" & i * j Form1.Picture1.Print Tab((j - 1) * 8 + 1); '控制每个输出表达式的输出位置 Form1.Picture1.Print expss; Next j Form1.Picture1.Print Next i End Sub Private Sub Command2_Click() Rem 乘法表算法二 Dim i, j As Integer For i = 9 To 1 Step -1 For j = 1 To i expss = j & "*" & i & "=" & i * j

Form1.Picture1.Print Tab((j - 1) * 10 + 1); '控制每个输出表达式的输出位置 Form1.Picture1.Print expss; Next j Form1.Picture1.Print Next i End Sub Private Sub Command3_Click() Rem 清空 Form1.Picture1.Cls End Sub Private Sub Command4_Click() Rem 退出 Dim int_msg As Integer int_msg = MsgBox("单击“是”退出程序,单击“否”返回程序!", vbYesNo + vbQuestion + vbDefaultButton1, "退出提示") If int_msg = vbYes Then Unload Me End If End Sub Private Sub Form_Load() Rem 初始化 With Picture1 .FontName = "宋体" .FontSize = 12 .FontBold = True .ForeColor = &H80FF& End With End Sub

相关文档
最新文档