A. 如何用matlab求每對頂點之間的最短路徑
1、最短路問題
兩個指定頂點之間的最短路徑。
例如,給出了一個連接若干個城鎮的鐵路網路,在這個網路的兩個指定城鎮間,找一條最短鐵路線。
以各城鎮為圖G的頂點,兩城鎮間的直通鐵路為圖G相應兩頂點間的邊,得圖G。對G的每一邊e,賦以一個實數)(ew—直通鐵路的長度,稱為e的權,得到賦權圖G。G的子圖的權是指子圖的各邊的權和。問題就是求賦權圖G中指定的兩個頂點00,vu間的具最小權的軌。這條軌叫做00,vu間的最短路,它的權叫做00,vu間的距離,亦記作),(00vud。
求最短路已有成熟的演算法:迪克斯特拉(Dijkstra)演算法,其基本思想是按距0u從近到遠為順序,依次求得0u到G的各頂點的最短路和距離,直至0v(或直至G的所有頂點),演算法結束。為避免重復並保留每一步的計算信息,採用了標號演算法。下面是該演算法。
(i) 令0)(0ul,對0uv,令)(vl,}{00uS,0i。
(ii) 對每個iSv(iiSVS\),用
)}
B. 如何使用Matlab實現雙線性插值演算法
提問前建議先自行網路
關鍵詞
「matlab」+
「雙線性插值」
首先需要了解什麼是雙線性插值:
如果選擇一個坐標系統使得
的四個已知點坐標分別為
(0,
0)、(0,
1)、(1,
0)
和
(1,
1),那麼插值公式就可以化簡為
f(x,y)=f(0,0)(1-x)(1-y)+f(0,1)(1-x)y+f(1,1)xy+f(1,0)x(1-y)
相應進行matlab程序編寫即可
C. matlab標號
我是這么想
設有n個點,那麼計算所有點的距離可以進行雙重n循環
設置一個距離矩陣A,它的維數應該是n*n,表示任意兩點間的距離
A11--就是第1個點和自己的距離;
A23--就是第2個點和第3個點的距離;
這樣就可以找到某種意義的距離。
D. matlab 標號
最速下降法程序,你自己琢磨一下吧,呵呵!
function
[x,minf]
=
minFD(f,x0,var,eps)
format
long;
if
nargin
==
3
eps
=
1.0e-6;
end
syms
l;
tol
=
1;
gradf
=
-
jacobian(f,var);
while
tol>eps
v
=
Funval(gradf,var,x0);
tol
=
norm(v);
y
=
x0
+
l*v;
yf
=
Funval(f,var,y);
[a,b]
=
minJT(yf,0,0.1);
xm
=
minHJ(yf,a,b);
x1
=
x0
+
xm*v;
x0
=
x1;
end
x
=
x1;
minf
=
Funval(f,var,x);
format
short;
E. matlab中如何對一些散點進行標號,標號完成好如何將其中一些散點進行連線
可以使用line函數,如line([x1,x2],[y1,y2])就是將(x1,y1)與(x2,y2)相連。如果要將好多對點相連,可以寫一個循環。
F. 如何使用Matlab實現雙線性插值演算法
由於很多人都在問彩色圖像的雙線性插值程序,這里就給出一個簡陋的示常式序,根據具體需要稍做一些修改應該就可以用於其它情況了。完整源程序以及說明請下載附件bilinear_rgb.rar。 % THIS PROGRAMME IS WRITTEN BY Rockins % THE FEATURE IS BILINEAR-INTERPOLATE THE SOUCE-IMAGE TO GET A DESTINATE-IMAGE % THE MAXIMUM SCALOR == 9.0, THE MINIMUM SCALOR == 1.0 % Copyright 2006-2007,All Copyrights(C) Reserved by Rockins % You can redistibute this programme under the GNU Less GPL license % If you have any question about this programme,please contact me via % ybc2084@163 com % read source image into memory,and get the primitive rows and cols RGB = imread('FreeBSD.jpg'); R = RGB(:,:,1); G = RGB(:,:,2); B = RGB(:,:,3); [nrows,ncols,ncoms]=size(RGB); % Next line is the scale-factor,the range is 1.0-9.0 K = str2double(inputdlg('please input scale factor (must between 1.0 - 9.0)', 'INPUT scale factor', 1, {'5.0'})); % Validating if (K < 1.0) | (K > 9.0) errordlg('scale factor beyond permitted range(1.0 - 9.0)', 'ERROR'); error('please input scale factor (must between 1.0 - 9.0)'); end % display source image imshow(RGB); % output image width and height are both scaled by factor K width = K * ncols; height = K * nrows; RR = uint8(zeros(height,width)); GG = uint8(zeros(height,width)); BB = uint8(zeros(height,width)); OUT = uint8(zeros(height,width,ncoms)); % width scalor and height scalor widthScale = 1/K; heightScale = 1/K; % bilinear interpolate for x = K:width-K % this index range is to avoid exceeding the permitted matrix index for y = K:height-K xx = x * widthScale; % xx and yy are the source ordinate,while x and y are the destinate ordinate yy = y * heightScale; if (xx <= 1.0e-8) xx = 1; end if (xx > ncols - 1) xx = ncols - 1; end if (yy <= 1.0e-8) yy = 1; end if (yy > nrows - 1) yy = nrows - 1; end if (xx/double(uint16(xx)) == 1.0) && (yy/double(uint16(yy)) == 1.0) % if a and b is integer,then J(x,y) <- I(x,y) RR(y,x) = R(int16(yy),int16(xx)); GG(y,x) = G(int16(yy),int16(xx)); BB(y,x) = B(int16(yy),int16(xx)); else % a or b is not integer a = double(fix(yy)); % (a,b) is the base-dot b = double(fix(xx)); r11 = double(R(a,b)); r12 = double(R(a,b+1)); r21 = double(R(a+1,b)); r22 = double(R(a+1,b+1)); RR(y,x) = uint8( (b+1-xx) * ((yy-a)*r21 + (a+1-yy)*r11) + (xx-b) * ((yy-a)*r22 +(a+1-yy) * r12) ); g11 = double(G(a,b)); g12 = double(G(a,b+1)); g21 = double(G(a+1,b)); g22 = double(G(a+1,b+1)); GG(y,x) = uint8( (b+1-xx) * ((yy-a)*g21 + (a+1-yy)*g11) + (xx-b) * ((yy-a)*g22 +(a+1-yy) * g12) ); b11 = double(B(a,b)); b12 = double(B(a,b+1)); b21 = double(B(a+1,b)); b22 = double(B(a+1,b+1)); BB(y,x) = uint8( (b+1-xx) * ((yy-a)*b21 + (a+1-yy)*b11) + (xx-b) * ((yy-a)*b22 +(a+1-yy) * b12) ); end end end OUT(:,:,1) = RR; OUT(:,:,2) = GG; OUT(:,:,3) = BB; % show the interplated image imwrite(OUT, 'FreeBSD2.jpg', 'jpg'); figure; imshow(OUT);
G. matlab 標號
最速下降法程序,你自己琢磨一下吧,呵呵!
function [x,minf] = minFD(f,x0,var,eps)
format long;
if nargin == 3
eps = 1.0e-6;
end
syms l;
tol = 1;
gradf = - jacobian(f,var);
while tol>eps
v = Funval(gradf,var,x0);
tol = norm(v);
y = x0 + l*v;
yf = Funval(f,var,y);
[a,b] = minJT(yf,0,0.1);
xm = minHJ(yf,a,b);
x1 = x0 + xm*v;
x0 = x1;
end
x = x1;
minf = Funval(f,var,x);
format short;
H. MATLAB怎樣將矩陣每列分別乘以列標號
用for循環,按照列進行循環。
a=[1 2;3 4];
b=[1;2];
c=[];
for i=1:cols(a)
c=[c,a(:,i).*b];
end
只要矩陣行數等於列向量行數,這個小程序都是可以解決的。

(8)雙標號演算法matlab擴展閱讀:
矩陣相乘只有在第一個矩陣的列數(column)和第二個矩陣的行數(row)相同時才有意義。一個m×n的矩陣就是m×n個數排成m行n列的一個數陣。由於它把許多數據緊湊地集中到了一起,所以有時候可以簡便地表示一些復雜的模型,如電力系統網路模型。
I. matlab新手求大神解答 Dijkstra標號演算法中有這么一句: if a(u,v)+dista
distance(u)表示從起點到u的距離,上面標號演算法的意思是,如果到現在存儲的到v的距離(distance(v))大於通過頂點u的走法,那麼就把distance(v)更新為通過頂點u的走法。