❶ 求大神告訴我這個matlab程序的演算法基本原理
在回答之前,我覺得有必要說明下自己的情況,本人剛接觸圖形處理不久(業余愛好),對圖像有一定了解,因此只能算是新手,另外我有使用過matlab的經驗,在這個基礎上嘗試回答下,希望幫助到你。
就這個程序而言,用imread函數讀入的是一個顏色圖(相較於灰階圖),得到的是一個M-by-N-by-3的矩陣,可以這樣理解,這個圖有M-by-N個像素點,每個點的顏色由R,G,B三個通道的值決定,或說每個像素點對應三個通道值。接著程序選擇了兩個像素點P1(1,1)和P2(1,2),即上下相鄰的兩個像素點,然後用這兩個像素點的通道值產生了兩對常量(K1,K2),(L1,L2),可以看到這兩對值用於後邊的變換。具體來說可以這樣看,如果我們認為1通道表示R通道(紅色通道),2通道表示G通道(綠色通道),3通道表示B通道(藍色通道),例如(1,1,1)、(1,1,2)、(1,1,3)分別表示像素點(1,1)rgb通道的值,那麼K1=(G1-G2)/(R1-R2),K2=G1-K1*R1,L1=(G1-G2)/(B1-B2),L2=G1-L1*B1,到這里似乎清楚了,for循環中的三個語句就是對原來r通道的值用(K1,K2)做個線性變換,g通道的值保持不變,b通道的值用(L1,L2)做個線性變換,至於為何這樣就色彩平衡了,看看K1,K2的定義(L1,L2類似),K1表示變化率,K1越大,相鄰像素r通道的差值越大,g通道也就相差越大(或相反,是K1正否),K2明顯就是截距,同時注意到兩個變換都基於g通道,在變換中g通道保持不變,這樣的話使得rb通道的值均接近g通道?網路給出的色彩平衡的含義如下:色彩平衡是圖像處理(PHOTOSHOP)軟體中一個重要環節。通過對圖像的色彩平衡處理,可以校正圖像色偏,過飽和或飽和度不足的情況,也可以根據自己的喜好和製作需要,調制需要的色彩,更好的完成畫面效果,應用於多種軟體和圖像、視頻製作中。注意裡面有一句調制自己想要的色彩這一句,或許可以回到之前的疑問,因為我隨便選用了一個圖像得到了如下結果:
以上或許只是個思路。
❷ matlab計算石墨烯能帶結構的演算法是什麼
這個程序是初步優化後的matlab版本,主要思路是先生成體系的格點坐標,再運用坐標生成體系的哈密頓量,然後進行對角化計算能帶,能帶的計算使用一維體系超原胞的處理方法。可以進一步優化
主程序
nx=3; %
ny=100; % 體系寬度(y方向的長度)
[x,y]=zigzag_graphene(nx,ny);
%plot(x,y,'.','MarkerSize',20)
t1=-2.7;
t2=0.0038/3/sqrt(3);
H=Hamiltonian_NN_graphene(x,y,t1);
Hsp=Hamiltonian_Haldane(x,y,sqrt(3),t2);
H=H+Hsp;
N=length(H);
HDL=H(N/3+1:N*2/3,1:N/3);
HD=H(N/3+1:N*2/3,N/3+1:N*2/3);
HDR=H(N/3+1:N*2/3,N*2/3+1:N);
n = length(HD);
dk = 0.01;
kx=0:dk:2*pi; % k空間路徑
Ek=band_calculate(kx,HD,HDL,HDR);
plot(kx,Ek,'.')
set(gca,'YLim',[-0.5 0.5]);%X軸的數據顯示範圍
坐標生成函數
function [x,y]=zigzag_graphene(nx,ny)
x1=zeros(4,1);
y1=zeros(4,1);
x1(1,1)=sqrt(3)/2;
x1(2,1)=0;
x1(3,1)=0;
x1(4,1)=sqrt(3)/2;
y1(1,1)=0;
y1(2,1)=0.5;
y1(3,1)=1.5;
y1(4,1)=2;
x2=x1;
y2=y1;
for i=1:ny-1
x2=[x2;x1];
y2=[y2;y1+i*ones(4,1)*3];
end
x=x2;
y=y2;
n=length(x2);
for i=1:nx-1
x=[x;x2+i*ones(n,1)*sqrt(3)];
y=[y;y2];
end
最近鄰相互作用哈密頓量的生成
function H=Hamiltonian_NN_graphene(x,y,t)
%t=-2.7;
N=length(x);
H=zeros(N,N);
eps=0.01;
for i=1:N
for j=1:N
if abs(sqrt((x(i)-x(j))^2+(y(i)-y(j))^2)-1)
Haldane模型哈密頓量
function H=Hamiltonian_Haldane(x,y,a,t2)
N=length(x);
H=zeros(N,N);
for l=1:N
for j=1:N
if x(l)>x(j)&&y(l)==y(j)&&mod(j,2)==1&&abs(sqrt((x(j)-x(l))^2+(y(j)-y(l))^2)-a)<0.001
H(j,l)=-1i*t2;
end
if x(l)x(j)&&y(l)>y(j)&&mod(j,2)==1&&abs(sqrt((x(j)-x(l))^2+(y(j)-y(l))^2)-a)<0.001
H(j,l)=1i*t2;
end
if x(l)y(j)&&mod(j,2)==1&&abs(sqrt((x(j)-x(l))^2+(y(j)-y(l))^2)-a)<0.001
H(j,l)=-1i*t2;
end
if x(l)>x(j)&&y(l)x(j)&&y(l)==y(j)&&mod(j,2)==0&&abs(sqrt((x(j)-x(l))^2+(y(j)-y(l))^2)-a)<0.001
H(j,l)=1i*t2;
end
if x(l)x(j)&&y(l)>y(j)&&mod(j,2)==0&&abs(sqrt((x(j)-x(l))^2+(y(j)-y(l))^2)-a)<0.001
H(j,l)=-1i*t2;
end
if x(l)y(j)&&mod(j,2)==0&&abs(sqrt((x(j)-x(l))^2+(y(j)-y(l))^2)-a)<0.001
H(j,l)=1i*t2;
end
if x(l)>x(j)&&y(l)
能帶計算函數
function Ek=band_calculate(kx,HD,HDL,HDR)
dN = length(kx);
n = length(HD);
Ek = zeros(n,dN);
for i = 1:dN
Hk=HDL*exp(-1i*kx(i))+HD+HDR*exp(1i*kx(i));
[~,E]=eig(Hk);
Ek(:,i) = diag(E);
end
❸ 球殼內引力勢能
當然不一樣了。隨著與球心距離的縮小,勢能是不斷減小的。具體演算法要用到微積分了,如果你感興趣,可以自己找書學。
❹ matlab 演算法如何使用
遺傳演算法可以用來最優化計算,即計算一個東西的最大或最小的東西,或者最優解。不知道你想用來具體解決什麼問題,沒法仔細回答。你把具體想幹啥和原始數據發到郵箱[email protected],我可以幫你解答
❺ 分子間能量的問題 高分在線等
The potential energy between two atoms can be represented as follows:
V = − A/r+ B/r^10
兩個原子間勢能可表為:V = − A/r+ B/r^10。【其中前一項為引力勢能,後者為斥力勢能】
Where A and B are constants and r the interatomic separation distance.
上式中A、B為常量,r為原子間距。
Plot the potential energy verses distance relationships for these atoms when A= 8 x 10-30 J.m and B= 5 x 10-119 J.m^10.
當A、B分別取上述值時,繪制原子間勢能-原子間距關系曲線。
【解】
1 函數的具體形式已知,可用描點法繪制曲線。這個函數具有極小值點(其橫坐標r0,求導易得),該函數當r趨於無窮大時有漸近線(r軸),當r趨於零時,勢能趨於正無窮。上面描述了曲線的大致形狀。更准確描點,可取橫坐標r=0.1r0, 0.2r0,0.5r0,1.0r0,2.0r0,5.0r0,10.0r0等等。不過用r0計算工作量較大,也可取r=0.1*10^-10m,0.2*10^-10m,……等等。
2 上述曲線也可用專業軟體例如Matlab、Origin等繪制。
Determine the coefficient of thermal expansion (in m/moK) for the material over the following temperature ranges:
a) 0K to 0℃,
b) 0℃ to 820℃.
分別計算a) 0K to 0℃,b) 0℃ to 820℃范圍內,材料的熱脹系數(單位m m-1 K-1) 【註:此處的熱脹系數由單位知道是線脹系數,表示材料溫度升高1K時的伸長率】
assume that thermal energy of the system is 3kT/2 where k is Boltzman』s constant k = 1.381 x10-23 J/K。
假定系統熱能為3kT/2,其中k為玻茲曼常量。
【注;此處原文不夠准確,3kT/2為分子的平均平動能,對於分子不存在thermal energy。另該系統應為惰性氣體,單原子分子,否則條件不足無法計算】
這個題,比較復雜,你提問中未要求對此作答,這里就不解下去了,如果樓主需要解答可補充問題或在線交流。
❻ 求KM演算法的matlab實現 急
這個演算法的函數matlab中本身就有,名稱為kmeans,你可以試試很好用。
❼ 請教時-能密度函數的matlab編程實現問題
最簡單的話,用ksdensity就可以咯。。。
己知y:
[f, x] = ksdensity(y);
plot(x, f);
補充:
用pdf及其系列函數吧。。。help pdf試試吧
❽ 求matlab大神指教,如下方程(圖片中間的振動方程),怎麼用newmark法編程呀
你好
你也不提前告訴我,你用的newmark演算法,我之前都沒有接觸過。只好網路先學這個演算法,到很晚才給你調試完成,並與精確解進行了對比如下圖。
根據演算法,給你的程序進行了對應的修改,主要有以下4點錯誤。
你的質量矩陣輸入錯誤
初始速度沒有加入
不同時刻的載荷程序錯誤
沒有加速度的迭代方程
修改後程序如下:
clear;clc;
K=[6,-5;-5,5];
M=[1,0;01];%質量矩陣不能有錯誤
C=[2,-1;-1,1];
dt=pi/10;%dt-----時間步長
tend=10*pi;%tend---結束時間
%[n,n]=size(K);
%Newmark演算法
gama=0.5;
beta=0.25;
[n,m]=size(K);
Nalpha0=1/beta/dt^2;
Nalpha1=gama/beta/dt;
Nalpha2=1/beta/dt;
Nalpha3=1/2/beta-1;
Nalpha4=gama/beta-1;
Nalpha5=dt/2*(gama/beta-2);
Nalpha6=dt*(1-gama);
Nalpha7=gama*dt;
NK1=K+Nalpha0*M+Nalpha1*C;
Nd=zeros(n,floor(tend/dt)+1);
Nv=zeros(n,floor(tend/dt)+1);
Na=zeros(n,floor(tend/dt)+1);
f=zeros(n,floor(tend/dt)+1);
Nd(1,1)=-7/15;%初始位
Nd(2,1)=-3/5;
Nv(1,1)=-3/5;%速度初始值不能少
Nv(2,1)=-8/15;%
f(:,1)=0;%初始載荷
Na(:,1)=0;%初始加速度
t=0:dt:tend;
fori=2:1:length(t)
f(:,i)=[0;sin(t(i))];%不同時刻的載荷
f2=f(:,i)+M*(Nalpha0*Nd(:,i-1)+Nalpha2*Nv(:,i-1)+Nalpha3*Na(:,i-1))+C*(Nalpha1*Nd(:,i-1)+Nalpha4*Nv(:,i-1)+Nalpha5*Na(:,i-1));
Nd(:,i)=inv(NK1)*f2;
Na(:,i)=Nalpha0*(Nd(:,i)-Nd(:,i-1))-Nalpha2*Nv(:,i-1)-Nalpha3*Na(:,i-1);%加速度不能少
Nv(:,i)=Nv(:,i-1)+Nalpha6*Na(:,i-1)+Nalpha7*Na(:,i);
end
%disp(Nd);
XX=-1/15*[9;8]*sin(t)-1/15*[7;9]*cos(t);
plot(t,Nd(1,:),t,XX(1,:),'--')
holdon
plot(t,Nd(2,:),'k',t,XX(2,:),'k--')
legend('X1演算法值','X1精確解','X2演算法值','X2精確解');
對比結果如下:
希望對你有幫助