我创建了一个执行thomas算法的函数。我正在尝试使用我的函数来解决具有以下数组的系统:
b =-4ε+2αh^ 2
a =2ε-h(1 +α(n + 1)h)
c =2ε+ h(1 +αnh)
g =4kπh^ 2sin(kπnh)
其中α= 1.2,k = 2,ε= 0.02,R = 4
我已插入我的函数(下图),但我不完全确定如何在命令窗口中输入这些参数,因为我对Matlab很新。任何帮助将不胜感激。
function y = ThomasAlgorithm(a,b,c,f)
% obtain values
m = length(f);
f(1) = f(1)/b(1);
% Forward Substitution
for j = 1:m-1
c(j) = c(j)/b(j);
b(j+1) = b(j+1) - a(j)*c(j);
f(j+1) = (f(j+1) - a(j)*f(j))/b(j+1);
end;
% Backwards Substitution
for k = m-1:-1:1
f(k) = f(k) - c(k)*f(k+1);
end;
% Output
y = f;
end
我试着把它放到命令窗口(下面)但是我收到了错误:
Error in ThomasAlgorithm (line 11)
b(j+1) = b(j+1) - a(j)*c(j);
我不太确定我现在在哪里出错或者如何解决它而且我有点碰壁了。
>> m=10;
x0=0, xm=1;
y0=R, ym=0;
alpha=1.2;
k=2;
eps=0.02;
R=4;
h=xm-x0/m;
a=[2*eps-h*(1+alpha*((1:m-1)+1)*h)];
b=[-4*eps+2*alpha*h*h];
c=[2*eps+h*(1+(alpha*(1:m-1)*h))];
f=[4*k*pi*h*h*sin(k*pi*(1:m-1)*h)];
x=ThomasAlgorithm(a,b,c,f);
for ic=1:n
disp(x);
end
答案 0 :(得分:0)
将您放入命令窗口的所有内容放入单独的script(.m
文件)中,然后运行它。这允许您获取实际的完整错误消息,并使命令窗口保持杂乱无章!
使用您的代码运行脚本时,您会看到以下错误:
未定义的函数或变量'R'。
myScript错误(第3行)
y0 = R,ym = 0;
现在您的(第一个)问题很明显了!如果y0=R
不存在,请设置R
。
在运行脚本之前运行clear
这样的好习惯,因此您的工作区已清空,并且您知道脚本中未定义的内容。
因此我们在开始时添加R = 1
或其他内容,然后再次运行它。 现在我们有索引错误!
指数超出矩阵维度。
ThomasAlgorithm中的错误(第8行)
b(j + 1)= b(j + 1) - a(j)* c(j);
这是因为您将b
定义为
b=[-4*eps+2*alpha*h*h]; % a SCALAR not a vector!
然后将其传递给ThomasAlgorithm
,并且当它不是矢量时,可以将其编入索引。
希望能够指出眼前的问题,以及如何更好地诊断问题。此外,当您的代码在脚本中时,您可以step through it进行调试。