Error: Unable to perform assignment because the left and right sides have a different number of elements.(line 25)
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Asir Tushar
am 28 Mär. 2019
Kommentiert: Asir Tushar
am 30 Mär. 2019
%chebyshev differentiation matrix
function [D,x] = cheb(N)
if N==0,D=0;x=1;return,end
x=cos(pi*(0:N)/N)';
c=[2;ones(N-1,1);2].*(-1).^(0:N)';
X=repmat(x,1,N+1);
dX=X-X';
D=(c*(1./c)')./(dX+(eye(N+1)));
D=D-diag(sum(D'));
end
%Differentiatio matrix and initial data
N=20;
[D,x]=cheb(N);
D2=D^2;
eps=1;
dt=min([.01,50*N^(-4)/eps]);
t=0;
sigma=.10;
r=.12; K=100;
k=2*r/sigma^2;
v=max(exp((k+1)/2)*x-exp((k-1)/2)*x,0);
t=0;
%Differentition matrix and initial data;
%solve pde
tmax=100;tplot=2
nplots=round(tmax/tplot)
plotgap=round(tplot/dt),dt=tplot/plotgap
xx=-1:.025:1; vv=polyval(polyfit(x,v,N),xx);
plotdata=[vv;zeros(nplots,length(xx))]; tdata=t;
for i=1:nplots
for n=1:plotgap
t=t+dt;v=v+dt*(eps*D2*v);
v(1)=exp(((k+1)/2)*x+(((k-1)/2).^2+k)*t)-exp(((k-1)/2)*x+(((k-1)/2)^2)*t);
v(end)=0;
end
vv=polyval(polyfit(x,v,N),xx);
plotdata(i+1,:)=vv;tdata=[tdata;t];
end
clf,subplot('position',[.1 .4 .8 .5])
mesh(xx,tdata,plotdata),grid on
axis([-1 1 0 tmax -1 2]),
view(-60,55),colormap([0 0 0]),xlabel x,ylabel t,zlabel u
2 Kommentare
Walter Roberson
am 28 Mär. 2019
Which cheb() function are you using?
.. We need to know in order to figure out what the size of D and x will be.
Akzeptierte Antwort
Walter Roberson
am 29 Mär. 2019
Your x is a column vector of length N+1. You use all of it in the right hand side of your calculation of v(1) so the right hand side is going to have N+1 elements. You will not be able to fit that into the scalar location v(1).
5 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Geometry and Mesh finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!