2012-05-29 2 views
4

Я заметил, что для меня было непредсказуемое поведение при оценке векторов. Кажется, что это действительно так, как если бы это было прямо, чем индексирование в цикле. Может ли кто-нибудь мне помочь? я знаю, вероятно, объясняется тем, как это делает каждую операцию, так что мне нужно несколько ключей о том, как искать егоmatlab: ошибка/точность при оценке вектора

благодарит за советом заранее спасибо

пример:

x=[0.05:.01:3]; 
n=size(x,2); 
y1 = (8*x-1)/(x)-(exp(x)); 

for i=1:n 
    y2(i)=(8*x(i)-1)/(x(i))-(exp(x(i))); 
end 

a1=[x;y1]; 
a2=[x;y2]; 

plot(x,y1, 'red') 
hold on 
plot(x,y2, 'blue') 

здесь сюжет: http://i.stack.imgur.com/qAHD6.jpg

результаты:

a2: 
0.05 -13.0513 
0.06 -9.7285 
0.07 -7.3582 
0.08 -5.5833 
0.09 -4.2053 
0.10 -3.1052 
0.11 -2.2072 
0.12 -1.4608 
0.13 -0.8311 
0.14 -0.2931 
0.15 0.1715 
0.16 0.5765 




a1: 
0.05 6.4497 
0.06 6.4391 
0.07 6.4284 
0.08 6.4177 
0.09 6.4068 
0.10 6.3958 
0.11 6.3847 
0.12 6.3734 
0.13 6.3621 
0.14 6.3507 
0.15 6.3391 
0.16 6.3274 
+1

+1 Очень хорошо спрошенный первый вопрос. Вы дали небольшой повторяемый фрагмент кода и показали свои результаты. –

ответ

6

Что вы хотите:

y1 = (8*x-1)./(x)-(exp(x)); % note the ./ 

вместо:

y1 = (8*x-1)/(x)-(exp(x)); 

В качестве примечания, вы можете ввести help /, чтобы увидеть, что ваше оригинальное первое заявление было на самом деле. Он эффективно делал (x'\(8*x-1)')' (обратите внимание на обратную косую черту).

+0

Спасибо, очень крис. Я действительно застрял в этой простой вещи. я не понял, что пытаться разделить матрицы MATLAB вобще A * B^-1, то будет на самом деле очень полезно :) все равно им удивляйся, для более высоких значений результатов были настолько похожи еще раз спасибо прощальных – myradio

+1

Для более высоких значений термин 'exp()' доминировал над вашим результатом, поэтому первый термин имел меньшее значение. Имейте в виду, что 'B \ A' немного более общий, чем' A * inv (B) ', и первый дает что-то значимое в некоторых случаях, когда' B' нельзя инвертировать. –

3

Ошибка в вашем первом векторном вычислении y1. Проблема в том, что вы делите на x. Деление Vector/Matrix отличается от деления элемента и возвращает результат вектор/матрица.

Решение состоит в том, чтобы выполнять поэтапное деление этих векторов. Вектор обозначения клавиш для этого является использование ./ (точка-деление):

y3 = (8*x-1)./(x)-(exp(x)); 

Теперь вы должны найти, что y2 и y3 идентичны.