如何使用Matlab执行我的Thomas算法功能?

时间:2017-08-18 09:27:48

标签: matlab

我创建了一个执行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

1 个答案:

答案 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进行调试。