matlab - 如何简化我的 matlab 代码?找不到可以正常工作的方法
问题描述
需要帮助来简化我的 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 次,表示长度(theta)=1000,u1~u1000,del_u1~del_u999,y1~y1000,yy=y1+y2+...y1000。
如何简化我的代码?
解决方案
这是 Matlab,又名矩阵实验室。写成矩阵形式!
而不是u1
, u2
, ... 写 vector\array u
,del_u
将变成u(1:end-1,:)-u(2:end,:)
等。
if y
is a vector\array [ y1 y2 y3...
]... then也一样yy=sum(y)
。
这是非常非常基本的 matlab 编程,您可以在文档中阅读所有相关信息。
编辑:
这是问题中代码的相同版本(在 Matlab 2019b 中编写和测试),展示了如何获取数组并实现矢量化,而不是变量的膨胀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) ;
推荐阅读
- java - 如何在 JavaFX 中操作 GridPane 的子项?
- java - 如何使用 API 制作可扩展的游戏策划者
- python - 从 BST 中删除不删除节点
- javascript - jQuery 像这样返回
- c# - 来自字节数组的近似图像
- python - 如何从嵌套芹菜链中的错误中恢复?
- python-3.x - 'str' 对象是不可调用的,即使没有在代码中使用 str
- django - 如何在 Django 中加入多对多字段
- c++ - CGREEN 编译错误:“assertion_tests”没有命名类型
- xml - 如何使用 XSL-FO 样式表和 Apache FOP 将 XML 文件中的不同表转换为 PDF