Я пытаюсь построить график полиномиального соответствия 2D-набора данных в Matlab. Вот что я пробовал: rawTable = readtable ('Test_data.xlsx', 'Sheet', 'Sheet1'); x = rawTable.A; y = rawTable.B; Рисунок 1) ...

0
Yuv 3 Янв 2021 в 21:39

1 ответ

Лучший ответ

Я чувствую некоторую путаницу относительно того, что означает вывод каждой из этих функций Matlab. Так что уточню. И я думаю, нам тоже нужны некоторые детали. Так что ожидайте некоторого многословия. Однако быстрый ответ доступен в конце.

c = polyfit(x,y,2) дает векторы коэффициентов полиномиальной подгонки. Вы можете получить информацию о соответствии, например оценку ошибок, следуя документации.

Назовите этот многочлен P. P в Matlab на самом деле является функцией P=@(x)c(1)*x.^2+c(2)*x+c(3).

Предположим, у вас есть единственная точка X, тогда polyval(c,X) выводит значение P(X). И если x - вектор, polyval(c,x) - вектор, соответствующий [P(x(1)), P(x(2)),...].

Теперь это не отражает то, что подходит. Как быстрый способ увидеть что-то визуально, вы можете попробовать plot(sort(x),polyval(c,sort(x)),'r','LineWidth',2), т.е. вы можете сначала отсортировать данные и попробовать построить график по этим значениям x.

Однако это всего лишь взлом, потому что а) ваш набор данных может быть настолько неравномерным, что сплайн не представляет функцию, или б) оценка всего вашего набора данных не нужна и неэффективна.

Надежный и «стандартный» способ построения 2D-функции известной аналитической формы в Matlab выглядит следующим образом:

  1. Определите несколько равномерно расположенных значений x в интервале, на котором вы хотите построить график функции. Например, x=1:0.1:10. Например, x=linspace(0,1,100).

  2. Оцените функцию по этим x-значениям

  3. Поместите два вышеуказанных компонента в plot(). plot() может отображать функцию как точки выборки или соединять точки с помощью автоматического сплайна , который используется по умолчанию.

(Для шага 1 квадратура является двусмысленным, но достаточно конкретным термином, чтобы описать этот процесс, если вы хотите общаться с помощью одного слова.)

Итак, вместо использования x в исходном наборе данных вы должны сделать что-то вроде:

t=linspace(min(x),max(x),100);
plot(t,polyval(c,t),'r','LineWidth',2)
1
Argyll 3 Янв 2021 в 20:19