Ошибка построения графика (значения не отображаются) - PullRequest
0 голосов
/ 07 октября 2011

Как отобразить значение 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);

Любая помощь будет оценена. Спасибо.

1 Ответ

1 голос
/ 07 октября 2011

Следующая

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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...