我需要帮助来简化我的matlab代码。
lambda = 1;
k = 2*pi/lambda;
w = 2*pi*v/lambda;
z=linspace(0,10,10000);
t=linspace(0,10,10); %time
theta=(pi)*rand(1,length(t)); %random phase
for a=1:length(t)
u1=1./(1+exp(-2.*(10e4).*(t(a)-z./v))); %step function
u2=1./(1+exp(-2.*(10e4).*(t(a)-z./v-1)));
u3=1./(1+exp(-2.*(10e4).*(t(a)-z./v-2)));
u4=1./(1+exp(-2.*(10e4).*(t(a)-z./v-3)));
u5=1./(1+exp(-2.*(10e4).*(t(a)-z./v-4)));
u6=1./(1+exp(-2.*(10e4).*(t(a)-z./v-5)));
u7=1./(1+exp(-2.*(10e4).*(t(a)-z./v-6)));
u8=1./(1+exp(-2.*(10e4).*(t(a)-z./v-7)));
u9=1./(1+exp(-2.*(10e4).*(t(a)-z./v-8)));
u10=1./(1+exp(-2.*(10e4).*(t(a)-z./v-9)));
del_u1=u1-u2;
del_u2=u2-u3;
del_u3=u3-u4;
del_u4=u4-u5;
del_u5=u5-u6;
del_u6=u6-u7;
del_u7=u7-u8;
del_u8=u8-u9;
del_u9=u9-u10;
y1=del_u1.*cos(k.*z-w.*t(a)+theta(1));
y2=del_u2.*cos(k.*z-w.*t(a)+theta(2));
y3=del_u3.*cos(k.*z-w.*t(a)+theta(3));
y4=del_u4.*cos(k.*z-w.*t(a)+theta(4));
y5=del_u5.*cos(k.*z-w.*t(a)+theta(5));
y6=del_u6.*cos(k.*z-w.*t(a)+theta(6));
y7=del_u7.*cos(k.*z-w.*t(a)+theta(7));
y8=del_u8.*cos(k.*z-w.*t(a)+theta(8));
y9=del_u9.*cos(k.*z-w.*t(a)+theta(9));
y10=u10.*cos(k.*z-w.*t(a)+theta(10));
yy=y1+y2+y3+y4+y5+y6+y7+y8+y9+y10;
figure(1)
plot(z,yy); grid on; axis image;
drawnow;
end这个等式并不复杂,但我很难把它简化。我假设重复这个方程1000次,意思是长度(θ)=1000,u1~u1000,del_u1~del_u999,y1~y1000,yy=y1+y2+...y1000。
我如何简化我的代码?
发布于 2020-10-27 11:51:40
这是Matlab,也就是矩阵实验室。以矩阵的形式写出来!
而不是u1,u2,...写入向量\数组u,del_u将变为u(1:end-1,:)-u(2:end,:),依此类推。
如果y是一个向量\数组y1 y2 y3...,情况也是如此...然后是yy=sum(y)。
这是非常非常基础的matlab编程,你可以在文档中阅读到。
编辑:
这是问题中代码的相同版本(在Matlab2019b中编写和测试),展示了如何获得数组并实现向量化,而不是变量u1、u2和for循环等的膨胀。
u = 1./(1+exp(-2.*(10e4).* (t'-permute(0:9,[3 1 2])-z./v) ));
del_u = cat(3,u(:,:,1:end-1)-u(:,:,2:end), u(:,:,end));
cos_term = cos(k.*z-w.*t'+permute(theta,[3 1 2]));
yy = sum(del_u.*cos_term,3) ;发布于 2020-10-29 04:07:07
这段代码工作得很好,当数据大小发生变化时,不需要对其进行更改。这段代码也运行得更快:
v = 1;
lambda = 1;
k = 2*pi/lambda;
w = 2*pi.*v./lambda;
z=linspace(0,10,10000);
t=linspace(0,10,10); %time
theta=(pi)*rand(1,length(t)); %random phase
for a=1:length(t)
u = 1./(1+exp(-2.*(10e4).*(bsxfun(@minus, t(a) - z./v, [0:9]'))));
del_u = [u(1:end-1, :)-u(2:end, :); u(end, :)];
y = del_u.*cos(bsxfun(@plus, k.*z - w.*t(a), theta'));
yy = sum(y);
figure(1)
plot(z,yy); grid on; axis image;
drawnow;
endhttps://stackoverflow.com/questions/64547947
复制相似问题