可能会在循环中成长。考虑预分配速度

时间:2014-03-10 12:47:24

标签: matlab matlab-guide matlab-deployment

clear all
k_1 = 37.6;
miu_1 = 41;
Den = 2.7;
N = 100;
n=1;
phi(1)=1;
for n=1:N
phi(n)= 0.3*(n/N);
K_s(n)= K_1*(1-(1+(3*k_1)/(4*miu_1))*phi(n));
miu_s(n)= miu_1*(1-(1+(3*k_1)/(4*miu_1))*phi(n));
den1(n)=Den*(1-phi(n));
vp(n)=sqrt((k_s(n)+(4/3)*miu_s(n))/den1(n));
end
figure(1);
plot(phi,miu_s);
figure(2);
plot (phi,vp)

我是matlab的新手,当我运行我的程序时,我不知道我的代码有什么问题只是一声嘟嘟嗡嗡声,没有任何反应。指导我

3 个答案:

答案 0 :(得分:2)

您的代码无效的原因是区分大小写。您正在使用k_1和K_1,以及k_s和K_s(除非是故意的)。当我改变它时,你的代码编译好了。

clear all
k_1 = 37.6;
miu_1 = 41;
Den = 2.7;
N = 100;
n=1;
phi(1)=1;
for n=1:N
phi(n)= 0.3*(n/N);
k_s(n)= k_1*(1-(1+(3*k_1)/(4*miu_1))*phi(n));
miu_s(n)= miu_1*(1-(1+(3*k_1)/(4*miu_1))*phi(n));
den1(n)=Den*(1-phi(n));
vp(n)=sqrt((k_s(n)+(4/3)*miu_s(n))/den1(n));
end
figure(1);
plot(phi,miu_s);
figure(2);
plot (phi,vp)

答案 1 :(得分:1)

在MatLab中编程时,通常是预先分配变量而不是在循环中声明变量的好习惯。通过这种方式,MatLab只创建一次对象,并在循环中更改它的每个值。否则,您将声明一个新变量并在每次循环迭代中写入其所有内容,这是一个代价高昂的过程。您的代码可能正在运行,但速度极慢,导致您认为没有发生任何事情。尝试使用zeros()函数预先定位循环内的所有变量,如下所示:

phi=zeros(N,1);
phi(1)=1;
K_s=zeros(N,1);
%... and so on for all your variables inside the loop

for n=1:N
phi(n)= 0.3*(n/N);
K_s(n)= k_1*(1-(1+(3*k_1)/(4*miu_1))*phi(n));
miu_s(n)= miu_1*(1-(1+(3*k_1)/(4*miu_1))*phi(n));
den1(n)=Den*(1-phi(n));
vp(n)=sqrt((k_s(n)+(4/3)*miu_s(n))/den1(n));
end

希望有所帮助

答案 2 :(得分:1)

你在这里做了很多不必要的事情,包括整个循环。

例如:

N = 100;
n=1; %this value is never used 
phi(1)=1; % this is overwritten in loop
for n=1:N
phi(n)= 0.3*(n/N);
... (loop continues)

你在这里不需要循环。相反,研究整个载体

N = 100;
n = 1:100; %predefine vector
phi = 0.3*(n/N); % outputs vector of phi from 0.003 to 0.3

对于组合多个向量的情况,请记住使用./.*进行逐元素分割和乘法运算,例如:最后一个等式将最终成为:

vp=sqrt((k_s+(4/3)*miu_s)./den1);