Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 可能在循环内部增长。考虑预定位速度_Matlab_Matlab Guide_Matlab Deployment - Fatal编程技术网

Matlab 可能在循环内部增长。考虑预定位速度

Matlab 可能在循环内部增长。考虑预定位速度,matlab,matlab-guide,matlab-deployment,Matlab,Matlab Guide,Matlab Deployment,我是matlab新手,不知道我的代码有什么问题,当我运行我的程序时,只有一声蜂鸣,什么也没发生。在MatLab中编程时,预先定位变量而不是在循环中声明变量通常是一种很好的做法。这样,MatLab只创建一次对象,并在循环中更改每个对象的值一次。否则,您将在每次循环迭代中声明一个新变量并写入其所有内容,这是一个代价高昂的过程。您的代码可能正在工作,但速度非常慢,导致您认为什么都没有发生。尝试使用zeros()函数预先定位循环中的所有变量,如下所示: clear all k_1 = 37.6; miu

我是matlab新手,不知道我的代码有什么问题,当我运行我的程序时,只有一声蜂鸣,什么也没发生。在MatLab中编程时,预先定位变量而不是在循环中声明变量通常是一种很好的做法。这样,MatLab只创建一次对象,并在循环中更改每个对象的值一次。否则,您将在每次循环迭代中声明一个新变量并写入其所有内容,这是一个代价高昂的过程。您的代码可能正在工作,但速度非常慢,导致您认为什么都没有发生。尝试使用
zeros()
函数预先定位循环中的所有变量,如下所示:

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中编程有所帮助,这通常是一种很好的做法,即预先定位变量,而不是在循环中声明变量。这样,MatLab只创建一次对象,并在循环中更改每个对象的值一次。否则,您将在每次循环迭代中声明一个新变量并写入其所有内容,这是一个代价高昂的过程。您的代码可能正在工作,但速度非常慢,导致您认为什么都没有发生。尝试使用
zeros()
函数预先定位循环中的所有变量,如下所示:

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)

希望这有帮助

您的代码不起作用的原因是区分大小写。您正在使用k_1和k_1,以及k_s和k_s(除非是有意的)。当我改变它时,你的代码编译正常

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

代码不工作的原因是区分大小写。您正在使用k_1和k_1,以及k_s和k_s(除非是有意的)。当我改变它时,你的代码编译正常

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

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

例如:

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)
这里不需要循环。相反,要处理整个向量

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

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

例如:

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)
这里不需要循环。相反,要处理整个向量

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


标题中的信息只是一个警告,与性能有关。如果你的代码不起作用,那是因为其他原因。谢谢你的评论,但原因是什么??先生@Tom FenechPreallocation或缺少,请查看我的答案。请编辑您的问题,使其更清晰。你想干什么?什么不起作用了?“哔哔”的一声?问题是:没有编译?回答错误?标题中的信息只是一个警告,与性能有关。如果你的代码不起作用,那是因为其他原因。谢谢你的评论,但原因是什么??先生@Tom FenechPreallocation或缺少,请查看我的答案。请编辑您的问题,使其更清晰。你想干什么?什么不起作用了?“哔哔”的一声?问题是:没有编译?给出了错误的答案?你是对的,这样做会阻止警告,但不会影响代码是否正常工作。结果是一样的,但会极大地影响速度!试试看!另请看@anderlucas关于案件敏感性的评论;)只要您在上面的某个地方声明“N”,它就会创建一个大小为Nx1的数组,并用零对其进行预定位。您是对的,这样做可以防止出现警告,但不会影响代码是否工作。结果是一样的,但会大大影响速度!试试看!另请看@anderlucas关于案件敏感性的评论;)这是正确的,只要您在上面的某个地方声明了“N”,它就会创建一个大小为Nx1的数组,并用零对其进行预定位。我对区分大小写进行了相同的尝试,但在我的案例中无效。我的代码版本对我来说编译正常。如果你照原样复制它,它应该能工作。除非k_1和k_1是独立的变量,但您尚未定义k_1是什么。我尝试了区分大小写的相同方法,但在我的案例中无效。您的代码的我的版本对我来说编译正常。如果你照原样复制它,它应该能工作。除非k_1和k_1是独立的变量,但您还没有定义k_1是什么。