【问题标题】:Matlab plot(x,ans)?Matlab绘图(x,ans)?
【发布时间】:2016-10-14 00:13:57
【问题描述】:

大家好,我已经完成了一个代码,它可以完成我想要它做的所有事情我只是停留在显示我的输出上。我在函数方面没有太多经验,目前我被困在如何绘制我的信息上。我写的代码是:

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 不理解“ans”。我尝试使用像c = Tridiag(e,f,g,r); plot (x,c) 这样的变量来制作ans,但这不起作用。任何帮助将不胜感激

【问题讨论】:

  • 只存储函数的返回值:outval = Tridiag(...); plot(x,outval);。
  • % 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 outval = Tridiag(e,f,g,r); plot(x,outval) end 我收到错误:未定义函数 'Tridiag' 用于类型为“double”的输入参数。
  • 您需要从函数外部调用函数...从另一个函数或从 MATLAB 命令行。你在哪里写 plot...?
  • 我在函数末尾添加了绘图,试图让它在函数完成后绘制信息。
  • @jake 这是不好的编程习惯。不要让函数绘图,让函数计算值,然后在外面绘图。

标签: matlab


【解决方案1】:

有一些问题和一些不同的解决方案:

  • 你的向量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))

【讨论】:

    猜你喜欢
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 2017-10-09
    • 2017-11-27
    • 1970-01-01
    • 2015-09-09
    相关资源
    最近更新 更多