Matlab:特征函数求解器的命令行输入(数值方法)

时间:2015-03-25 09:42:52

标签: matlab command-line-arguments

我已经获得了一些用于数值求解特征向量的代码:

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

我应该是第一个i特征向量,n是该特征向量 矩阵(我们将x离散的片段数),xmax是fxn定义范围的上限。

我试图从命令行运行它(如:" solveeig ###",其中数字符号对应于i,n和xmax)但无论我是什么似乎为i,n和xmax输入,我得到"对于带有char操作数的冒号运算符,第一个和最后一个操作数必须是char。"

我应该在命令行上写什么才能让它运行?

1 个答案:

答案 0 :(得分:0)

使用命令语法将参数解释为字符串

有关详细信息,请参阅the documentation,但简而言之:
调用

myFun myVar1 6 myVar2

相当于调用

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

而不是所需的 1

myFun(myVar1,6,myVar2)

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

中的数据

您收到的具体错误是由第2行for j=1:i引起的,此处i是一个字符串。这个错误只是调用函数的方式的结果,行本身很好 2


如何让它工作

使用函数语法:在命令窗口中输入:

solveeig(n,xmax,i)

如果绝对需要命令语法(我想不出它为什么会这样), 更不利的 替代方法是解析在命令语法中输入的字符串。将数字转换为数字格式,并在传递的变量名称上使用evalin / assignin从调用者中提取变量


1 如patrik的评论中所述 2 意味着它不会出错,但ij变量名为another matter