绘制图形错误(值未显示)

时间:2011-10-07 00:46:47

标签: matlab

如何将Approximation - Answer的值绘制为s在下面的代码中有所不同?如果您查看下面的代码,您可以看到我使用的方法(我把它放在一个单独的文件中)。

但是,它没有显示从11000的图表。而是图表从9991001,并且没有任何积分。

for s = 1:1000
    error = LaplaceTransform(s,5) - (antiderivative(1,s)-antiderivative(0,s));
end
plot(s,error);
title('Accuracy of Approximation');
xlabel('s');
ylabel('Approximation - Exact Answer');

使用的功能:

function g = LaplaceTransform(s,N);
% define function parameters
a=0; 
b=1;
h=(b-a)/N;
x = 0:h:1;
% define function
g = ff(x).*exp(-s*x);

% compute the exact answer of the integral
exact_answer=antiderivative(b,s)-antiderivative(a,s)
% compute the composite trapezoid sum
If=0;
for i=1:(N-1)
    If=If+g(i).*h;
end;
If=If+g(1).*h/2+g(N).*h/2;
If

function fx=ff(x)
fx=x;

function fx=antiderivative(x,s);
fx= (-exp(-s*x)*(s*x+1))/(s^2);

任何帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:1)

以下

for s = 1:1000
    error = LaplaceTransform(s,5) - (antiderivative(1,s)-antiderivative(0,s));
end
plot(s,error);

已经有几个问题。两个主要的是error在每次迭代时被覆盖,正如@Amro指出的那样,s,你的循环变量,是一个标量。

因此,你需要写

difference = zeros(1000,1); %# preassignment is good for you
for s = 1:1000
    difference(s) = LaplaceTransform(s,5) - (antiderivative(1,s)-antiderivative(0,s));
end
plot(1:1000,difference);

LaplaceTransform功能

中有另一个错误
function g = LaplaceTransform(s,N);
[...]
g = ff(x).*exp(-s*x); %# g is an array

[...]
If %# If is calculated, but not returned.

我假设你想写

function If = LaplaceTransform(s,N);

相反,因为否则,您尝试将数组g分配给标量difference(s)