矢量必须是相同的长度

时间:2016-06-01 12:39:06

标签: matlab plot

我想根据时间绘制角度。代码如下:

clear all
close all
params.t0   = 0;     % start time of simulation
params.tend = 10;   % end time
params.m=2^8; %number of steps in each Brownian path
params.deltat=params.tend/params.m; % time increment for each Brownian path
params.R=4; % integer number to obtain EM stepsize from Brownian path stepsize 
params.dt = params.R*params.deltat; %0.01;    % time increment for both EM and ode45
params.D=0.001; % diffusion constant 
deltat= params.tend/params.m; % time increment for each Brownian path
params.D=0.1; %diffsuion 
params.R=4;
params.dt =  params.R*params.deltat; 
theta0=pi*rand(1);
phi0=2*pi*rand(1);
P_initial=[theta0;phi0];

[theta,phi]=difusion_SDE(params);
plot([0:params.dt:params.tend],[theta0,theta],'--*') 
hold on
plot([0:params.dt:params.tend],[phi0,phi],'--*') 

和功能文件:

function [theta,phi]=difusion_SDE(params)

dW=sqrt(params.deltat)*randn(2,params.m);
 theta0=pi*rand(1);
 phi0=2*pi*rand(1);
P_initial=[ theta0; phi0];

L =  params.m/ params.R;
pem=zeros(2,L);
Ang_rescale=zeros(2,L);
Ptemp=P_initial;

for j=1:L
   Winc = sum(dW(:,[ params.R*(j-1)+1: params.R*j]),2);
   theta=Ptemp(1); 
   phi=Ptemp(2);  

   A=[  params.D.*cot(theta);...
       0]; 

   B=[sqrt(params.D)  0 ;...
      0 sqrt(params.D)./sin(theta) ];  

   Ptemp=Ptemp+ params.dt*A+B*Winc;
   pem(1,j)=Ptemp(1); 
   pem(2,j)=Ptemp(2);


Ang_rescale(1,j)=mod(pem(1,j),pi);  
Ang_rescale(2,j)=mod(pem(2,j),2*pi);    
theta= Ang_rescale(1,j);
phi=Ang_rescale(2,j);
end

当我运行代码时,我收到此消息错误     使用绘图时出错     矢量必须是相同的长度。 感谢您解决此错误的任何帮助

1 个答案:

答案 0 :(得分:0)

在图(x,y)中,x和y需要具有相同的长度。 [0:params.dt:params.tend],大小为65,大小为2的[theta0,theta] .difusion_SDE需要输出大小为65的向量,每个时间步长的中间结果,而不仅仅是最终结果。