❶ 求大神告诉我这个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精确解');
对比结果如下:
希望对你有帮助