⑴ 用matlab遍历矩阵的问题,程序不会编,求大神
直接用广度优先搜索即可。
ff.m文件:
functionff(G,s,e,n)
%%Paras:Graph,Start,End,PathLegnth
path巧并=s;
bfs(path);
functionbfs(path)
iflength(path)==n+1
ifpath(end)==e
disp(path)
end
return
end
fori=find(G(path(end),:))
孝族迹if~ismember(i,path)
bfs([pathi]);
end
end
end
end
主程序穗樱:
%%a是图的邻接矩阵
ff(a,1,4,3)
ff(a,1,6,3)
⑵ matlab 对矩阵某个元素怎么进行for遍历
用什么for,那是c的编程习惯,matlab最大好誉迟处是不用开辟数组,不用使用for就可对数组每一元素进行运算,每种对数组的运算都是遍历的。 a=1:5;即可绝虚衡得到一个1,并做2,3,4,5的数组。
⑶ Matlab中,怎样让一个值遍历一个规定的范围。 比如说让x取遍1~10的所有整
遍历即可,我用matlab编的简单程序,其他语言类似
A=[11.61,25.38,44.8,59.25,
121.66,126.93
,142.79,155.07,246.24,288.44,389.46,451.14,472.22,557.47,638.59,688.62,746.72,891.7,979.14,1028.66,1038.21,1153.38,1634.87,2760.68];
n=length(A);
%求A中元素的个数
for
i=1:n-3
for
j=i+1:n-2
for
k=j+1:n-1
for
l=k+1:n
if
A(i)+A(j)+A(k)+A(l)==4872.35
%判断条件
[A(i)
A(j)
A(k)
A(l)]
end
end
end
end
end
我陵仿这里预设的和是4872.35
程序运尺迟纤行的结果是旦告44.8、1028.66、1038.21、2760.68
你要的和无解
⑷ 关于MATLAB遍历求解最大值
用优化函数就可以很简单的求解
⑸ 利用MATLAB遍历算法如何计算图像指定区域像素点
imread就可以读入图像坐标就是x,y的碰哗值除以分辨拿芦率图像在matlab里就是一个矩阵用行列号找就可以比如图像a左上角坐标为(0,0),其坐标(100,100)笑敏行的点的像素为a(101,101)
⑹ 从原点出发,遍历50个点,再回到原点的最短路径,求matlab程序
据 Drew 所知最短路经算法现在重要的应用有计算机网络路由算法,机器人探路,交通路线导航,人工智能,游戏设计等等。美国火星探测器核心的寻路算法就是采用的D*(D Star)算法。
最短路经计算分静态最短路计算和动态最短路计算。
静态路径最短路径算法是外界环境不变,计算最短路径。主要有Dijkstra算法,A*(A Star)算法。
动态路径最短路是外界环境不断发生变化,即不能计算预测的情况下计算最短路。如在游戏中敌人或障碍物不断移动的情况下。典型的有D*算法。这是Drew程序实现的10000个节点的随机路网三条互不相交最短路真实路网计算K条路径示例:节点5696到节点3006,三条最快速路,可以看出路径基本上走环线或主干路。黑线为第一条,兰线为第二条,红线为第三条。约束条件系数为1.2。共享部分路段。 显示计算部分完全由Drew自己开发的程序完成。 参见 K条路算法测试程序
Dijkstra算法求最短路径:
Dijkstra算法是典型最短路算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。
Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。
Dijkstra一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用OPEN, CLOSE表方式,Drew为了和下面要介绍的 A* 算法和 D* 算法表述一致,这里均采用OPEN,CLOSE表的方式。
大概过程:
创建两个表,OPEN, CLOSE。
OPEN表保存所有已生成而未考察的节点,CLOSED表中记录已访问过的节点。
1. 访问路网中里起始点最近且没有被检查过的点,把这个点放入OPEN组中等待检查。
2. 从OPEN表中找出距起始点最近的点,找出这个点的所有子节点,把这个点放到CLOSE表中。
3. 遍历考察这个点的子节点。求出这些子节点距起始点的距离值,放子节点到OPEN表中。
4. 重复2,3,步。直到OPEN表为空,或找到目标点。
这是在drew 程序中4000个节点的随机路网上Dijkstra算法搜索最短路的演示,黑色圆圈表示经过遍历计算过的点由图中可以看到Dijkstra算法从起始点开始向周围层层计算扩展,在计算大量节点后,到达目标点。所以速度慢效率低。
提高Dijkstra搜索速度的方法很多,据Drew所知,常用的有数据结构采用Binary heap的方法,和用Dijkstra从起始点和终点同时搜索的方法。
推荐网页:http://www.cs.ecnu.e.cn/assist/js04/ZJS045/ZJS04505/zjs045050a.htm
简明扼要介绍Dijkstra算法,有图解显示和源码下载。
A*(A Star)算法:启发式(heuristic)算法
A*(A-Star)算法是一种静态路网中求解最短路最有效的方法。
公式表示为: f(n)=g(n)+h(n),
其中f(n) 是节点n从初始点到目标点的估价函数,
g(n) 是在状态空间中从初始节点到n节点的实际代价,
h(n)是从n到目标节点最佳路径的估计代价。
保证找到最短路径(最优解的)条件,关键在于估价函数h(n)的选取:
估价值h(n)<= n到目标节点的距离实际值,这种情况下,搜索的点数多,搜索范围大,效率低。但能得到最优解。
如果 估价值>实际值, 搜索的点数少,搜索范围小,效率高,但不能保证得到最优解。
估价值与实际值越接近,估价函数取得就越好。
例如对于几何路网来说,可以取两节点间欧几理德距离(直线距离)做为估价值,即f=g(n)+sqrt((dx-nx)*(dx-nx)+(dy-ny)*(dy-ny));这样估价函数f在g值一定的情况下,会或多或少的受估价值h的制约,节点距目标点近,h值小,f值相对就小,能保证最短路的搜索向终点的方向进行。明显优于Dijstra算法的毫无无方向的向四周搜索。
conditions of heuristic
Optimistic (must be less than or equal to the real cost)
As close to the real cost as possible
主要搜索过程:
创建两个表,OPEN表保存所有已生成而未考察的节点,CLOSED表中记录已访问过的节点。
遍历当前节点的各个节点,将n节点放入CLOSE中,取n节点的子节点X,->算X的估价值->
While(OPEN!=NULL)
{
从OPEN表中取估价值f最小的节点n;
if(n节点==目标节点) break;
else
{
if(X in OPEN) 比较两个X的估价值f //注意是同一个节点的两个不同路径的估价值
if( X的估价值小于OPEN表的估价值 )
更新OPEN表中的估价值; //取最小路径的估价值
if(X in CLOSE) 比较两个X的估价值 //注意是同一个节点的两个不同路径的估价值
if( X的估价值小于CLOSE表的估价值 )
更新CLOSE表中的估价值; 把X节点放入OPEN //取最小路径的估价值
if(X not in both)
求X的估价值;
并将X插入OPEN表中;//还没有排序
}
将n节点插入CLOSE表中;
按照估价值将OPEN表中的节点排序; //实际上是比较OPEN表内节点f的大小,从最小路径的节点向下进行。
}
⑺ matlab牛顿迭代法急!!(100分悬赏)
我是用牛顿法的基本原理,碧祥旅自己写的一个函数,因为我也刚学完牛顿法,我只写出了第一个,第二个和第一个一样,就需要在定义函数的时候重新写一下,别的什么也不用改!!!
function shu()
syms x
f=x^3-3*x-1; %定义函数
f1=diff(f,'x',1); %一阶导数
f2=diff(f,'x',2); %二阶导数
x=2; %x赋初值2
pds=subs(f1)/subs(f2); %把判断数定义为在x点的一阶导数比上二阶导数宴败,就是是牛顿法的迭代结悔凳束条件
while pds>10^(-3)
x=x-subs(f1)/subs(f2); %x的迭代
pds=subs(f1)/subs(f2); %判断数的迭代
end
disp(x) %打印最优点x
disp(subs(f)) %打印函数的最小值
运行结果:
>> shu
1.00030487804878
-2.99999972111979
⑻ 在matlab中使用for循环求1到10阶乘的值
用matlab设计程序如下:
for i=1:10
sum=1;
for j=1:i
sum=sum*j;
end
sum
end
运行结果显示,1到10的阶乘分别是: 1、2、 6、 24、森滚120、 720、5040、40320、362880 、3628800。
运行结果如图:
⑼ matlab怎么遍历目录
Matlab中可以使用C的同名函数system实现对控制台程序的调用,并取得控制台程序的返回值和租碧缺stdout输出。
所以你可以直接输入:
system('dir')
来查看当前目录下所有的文件。
你可以像在windows的命令提示符下输入命令一样操作。
如果想查看指定目录下的文件,你可以输入:
system('dir [指定目录]')
比如:system('dir c:\');
dir命令的参数有:
C:\Documents and Settings\Administrator>dir /?
显示目录中的文件和子弊辩目录列表。
DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]
[/O[[:]sortorder]] [/P] [/Q] [/S] [/T[[:]timefield]] [/W] [/X] [/4]
[drive:][path][filename]
指定要列出的驱动器、目录和/或文件。
/A 显示具有指定属性的文件。
attributes D 目录 R 只读文件
H 隐藏文件 A 准备存档的文件
S 系统文件 - 表示“否”的前缀
/B 使用空格式(没有标题信息或摘要)。
/C 在文件大小中显示千位数分隔符。这是默认值。用 /-C 来
停用分隔符显示。
/D 跟宽式相同,但文件是按栏分类列出的。
/L 用小写。
/N 新的长列表格式,其中文件名在最右边。
/O 用分类顺序列出文件。
sortorder N 按名称(字母顺序) S 按大小(从小到大)
E 按扩展名(字母顺序) D 按日期/时间(从先到后)
G 组目录优先 - 颠慧唯倒顺序的前缀
/P 在每个信息屏幕后暂停。
请按任意键继续. . .
⑽ 请使用MATLAB编程求解出x,y,z的值
参考代码:
[x,y,z]=meshgrid(0:10,0:20,0:200);
I=find(sum([x(:)y(:)z(:)],2)==100&sum([x(:)*10y(:)*5z(:)*0.5],2)==100);
[x(I)y(I)z(I)]
得到结果:
ans=
1990
即大牛、小牛、牛犊分别配樱1、9、90头。
上面是用遍历的方法,算法有可优化之处(比如去除不可能的遍历条拍返件,或采用线性丢番图方程的解法),因计算量尚可接受,就马袭卖饥马虎虎用吧。