導航:首頁 > 源碼編譯 > 遍歷演算法matlab

遍歷演算法matlab

發布時間:2023-05-04 17:51:01

⑴ 用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頭。

上面是用遍歷的方法,演算法有可優化之處(比如去除不可能的遍歷條拍返件,或採用線性丟番圖方程的解法),因計算量尚可接受,就馬襲賣飢馬虎虎用吧。

閱讀全文

與遍歷演算法matlab相關的資料

熱點內容
java是不是數字 瀏覽:180
php模擬瀏覽器環境 瀏覽:351
編程誰都能學會嗎 瀏覽:407
使用國家反詐app都要開啟什麼 瀏覽:712
下載民宿APP有什麼用 瀏覽:50
續子語pdf 瀏覽:385
2021年加密貨幣最新行情 瀏覽:162
nfs怎麼加密ipsec 瀏覽:245
國二考試調用編譯器運算選擇題 瀏覽:750
同濟大學高等數學pdf 瀏覽:234
延時的宏命令怎麼設置 瀏覽:596
資料庫有哪些加密 瀏覽:209
改之理反編譯注冊教程 瀏覽:391
什麼是編譯程序和翻譯程序 瀏覽:208
python課程心得總結 瀏覽:17
派派中怎麼看對方在哪個伺服器 瀏覽:796
xp配置java環境變數配置 瀏覽:9
python中1到100怎麼算 瀏覽:768
小度我想看程序員 瀏覽:508
bs刷裝備建立後文件夾沒有 瀏覽:82