如何使用 Matlab 执行我的托马斯算法函数?



我创建了一个函数来执行托马斯算法。我正在尝试使用我的函数来解决具有以下数组的系统:

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

将命令窗口中放置的所有内容放入单独的脚本(.m文件(中,然后运行它。这使您可以获得实际的完整错误消息,并保持命令窗口整洁!

使用代码运行脚本时,会看到以下错误:

未定义的函数或变量"R"。
myScript 中的错误(第 3 行(
y0=R, ym=0;

现在你的(第一个(问题很清楚了!当R不存在时设置y0=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,并期望能够在它不是向量时对其进行索引。


希望这能指出眼前的问题,以及如何更好地诊断问题。此外,当您的代码位于脚本中时,您可以单步执行它来调试内容。

最新更新