如何将Approximation - Answer
的值绘制为s
在下面的代码中有所不同?如果您查看下面的代码,您可以看到我使用的方法(我把它放在一个单独的文件中)。
但是,它没有显示从1
到1000
的图表。而是图表从999
到1001
,并且没有任何积分。
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);
任何帮助将不胜感激。感谢。
答案 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)
。