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的新手,当我运行我的程序时,我不知道我的代码有什么问题只是一声嘟嘟嗡嗡声,没有任何反应。指导我
答案 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);