2015-02-16 3 views
0

Я создал два массива в октаве, используя цикл for, и я хочу создать граф, используя данные двух массивов. Но он показал ошибку «недопустимое значение для свойства массива« xdata »» и отобразил пустой граф.Не удалось построить график двух массивов в Octave

for i=1:16 
x=1+(10^6)*2 
h{i}=1/(10.^i) 
fdd1{i}=(sin(1+h{i})-sin(1))/h{i} 
error_f1{i}=fdd1{i}-cos(1) 
endfor 
**fplot(loglog(h,error_f1));** 

Я делаю ошибки при построении графика? Могу ли я узнать, как решить эту проблему?

ответ

1

Да, вы делаете все возможные ошибки в этом фрагменте.

  1. ваши переменные h и error_f клеточные массивы. Функция loglog принимает числовые массивы. Я считаю, что ваша конкретная ошибка исходит оттуда. Вы можете конвертировать их с cell2mat, как и в loglog (cell2mat (h), cell2mat (error_f1)), но я бы сказал, что все равно было бы неправильно, так как вы никогда не должны создавать массив ячеек (см. Пункт 4).

  2. Ваши данные имеют неположительные значения, которые вы не можете построить с логарифмической шкалой.

  3. fplot Функция принимает дескриптор функции в качестве аргумента. Почему вы передаете фигуру (вывод loglog)?

  4. Октава - это язык, разработанный вокруг векторизованных операций. Синтаксис имеет сильный акцент, и вы будете страдать, если вы этого не сделаете. Для этого не нужно иметь цикл for. Просто удалите индексирование и сделайте умножение и разделите элемент. Это также устраняет проблему 1, так как вы будете в конечном итоге с числовым массивом


r = 1:16; 
x = 1 + (10^6)*2; 
h = 1 ./ (10.^r); 
fdd1 = (sin (1+h) - sin (1)) ./ h; 
error_f1 = fdd1 - cos(1); 

правило в октаву: если вы когда-нибудь увидеть цикл, скорее всего, вы делаете это неправильно.

+0

Благодарим за полезную информацию! Моя проблема решена :) – Tsing

Смежные вопросы