2015-03-25 41 views
0

我有一些代码,特征向量数值求解:Matlab的:命令行输入的特征函数求解(数值方法)

function[efun,V,D] = solveeig(n,xmax,i) 
for j=1:i 

%The first and second derivative matrices 
dd = 1/(xmax/n)^2*(-2*diag(ones(n,1))+diag(ones(n-1,1),1)+... 
diag(ones(n-1,1),-1)); 
d = 1/(xmax/n)*((-1*diag(ones(n,1)))+diag(ones(n-1,1),1)); 

%solve for the eigenvectors 
[V,D] = eig(-dd-2*d); 

%plot the eigenvectors (normalized) with the normalized calculated 
%eigenfunctions 
x = linspace(0,xmax,n); 
subplot(i,1,j); 
plot(x,V(:,j)/sum(V(:,j)),'*'); 
hold on 
efun = exp(-x).*sin(j*pi*x/xmax); 
plot(x,efun/(sum(efun)),'r'); 
shg 
end 
end 

我应该是第一个我的特征向量,n为维 矩阵(我们离散x片段的数量),xmax是定义fxn的范围的上限。我试图从命令行(如:“solveeig###”,其中数字符号对应于i,n和xmax)运行此命令,但不管我似乎为我放置什么, n和xmax,我得到“对于带有char操作数的冒号操作符,第一个和最后一个操作数必须是char。”

我应该在命令行写什么来让它运行?

+1

类型的“不是你要求的”,但解决方案(#,#,#)有什么问题?另外,你的意思是在MATLAB中的命令窗口或Linux终端或DOS提示符? – patrik 2015-03-25 11:11:11

回答

0

使用命令语法解释变量为字符串

更充分的详情,请参阅the documentation但在短:
调用

myFun myVar1 6 myVar2 

相当于调用

myFun('myVar1','6','myVar2') 

,而不是想要的

myFun(myVar1,6,myVar2) 

在第一情况下,该函数将接收3个字符串(文本)
在第二函数将接收存储在myVar1myVar2数据和数字6


您收到的特定错误是由第2行for j=1:i这里引起的i是一个字符串。这个错误仅仅是函数被调用的方式的结果,线本身很好。


如何得到它的工作

使用函数的语法:在命令窗口中是这样的:

solveeig(n,xmax,i) 

如果命令语法是绝对必要的(我想不出为什么将是)更不利的另一种方法是解析命令语法中输入的字符串。将数字转换成数字格式,并从呼叫者使用evalin/assignin上传递的变量名拉变量


正如帕特里克
在评论中提到这意味着它不会错误,但是ij作为变量名称是another matter

+0

意识到在凌晨5点,我的错误就是忘记了逗号......这就是我深夜工作的原因! – 2015-03-25 13:31:25