大家好,我有一个代码完成,做我想做的一切,我只是卡住了显示我的输出。我没有那么多的函数经验,我目前被困在如何绘制我的信息。我的代码是:
function x = Tridiag(e,f,g,r)
% Tridiag: Tridiagonal equation solver banded system
% x = Tridiag(e,f,g,r): Tridiagonal system solver.
clc;clear;
% input:
D = 2;
U =1;
L = 0.2;
c0 = 80;
c10 = 10;
dx = 1;
n=9;
e = ones(n,1)*(-2.5);
f = ones(n,1)*(4.2);
g = ones(n,1)*(-1.5);
r = [200;0;0;0;0;0;0;0;0;15];
% output:
% x = solution vector
% forward elimination
for k = 2:n
factor = e(k)/f(k-1);
f(k) = f(k) - factor*g(k-1);
r(k) = r(k) - factor*r(k-1);
end
% back substitution
x(n) = r(n)/f(n);
for k = n-1:-1:1
x(k) = (r(k)-g(k)*x(k+1))/f(k);
end
end
当前当您运行该函数时,它显示的输出为ans= 68.641, 58.87....等等......我想把我的信息用下面的方式表示出来:
x = 0.1:1:10
plot(x,ans)
我遇到了x = 0.1:1:10覆盖我的函数值的问题,matlab不理解"one_answers"。我试图使用像c = Tridiag(e,f,g,r); plot (x,c)
这样的变量,但这不起作用。如有任何帮助,不胜感激
有几个问题和几个不同的解决方案:
- 你的向量
ans
和x
的长度是不一样的。 - 你将变量传递给函数但不使用它们(你甚至在函数开始时清除它们)。
我将假设x
应该是ans
的长度,即n=9
。你应该按你认为合适的比例缩放。
你可以在脚本中运行一切,而不是一个函数。
clc; clear;
D = 2;
U =1;
L = 0.2;
c0 = 80;
c10 = 10;
dx = 1;
n=9;
e = ones(n,1)*(-2.5);
f = ones(n,1)*(4.2);
g = ones(n,1)*(-1.5);
r = [200;0;0;0;0;0;0;0;0;15];
% output:
% x = solution vector
% forward elimination
for k = 2:n
factor = e(k)/f(k-1);
f(k) = f(k) - factor*g(k-1);
r(k) = r(k) - factor*r(k-1);
end
% back substitution
y(n) = r(n)/f(n);
for k = n-1:-1:1
y(k) = (r(k)-g(k)*y(k+1))/f(k);
end
x = 1:1:n;
plot(x,y)
或指定函数:
function x = Tridiag(e,f,g,r,n)
% Tridiag: Tridiagonal equation solver banded system
% x = Tridiag(e,f,g,r): Tridiagonal system solver.
% input:
D = 2;
U =1;
L = 0.2;
c0 = 80;
c10 = 10;
dx = 1;
% output:
% x = solution vector
% forward elimination
for k = 2:n
factor = e(k)/f(k-1);
f(k) = f(k) - factor*g(k-1);
r(k) = r(k) - factor*r(k-1);
end
% back substitution
x(n) = r(n)/f(n);
for k = n-1:-1:1
x(k) = (r(k)-g(k)*x(k+1))/f(k);
end
end
并命名为:
n=9;
e = ones(n,1)*(-2.5);
f = ones(n,1)*(4.2);
g = ones(n,1)*(-1.5);
r = [200;0;0;0;0;0;0;0;0;15];
x = 1:1:n;
plot(x,Tridiag(e,f,g,r,n))