Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/30: Рейтинг темы: голосов - 30, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 42

Аппроксимация по МНК

30.09.2014, 21:49. Показов 6506. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
подскажите пожалуйста как провести аппроксимация для функции p=(A/x)+B ? и найти коэффициенты A, B.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.09.2014, 21:49
Ответы с готовыми решениями:

Аппроксимация МНК
Нужно переделать программуclear, clc xy = xlsread('lsm.xls'); x = xy(:,1); y = xy(:,2); N = length(x); xx =...

Аппроксимация поверхности МНК
Доброго времени суток, уважаемые форумчане! Передо мной стоит задача аппроксимации экспериментальных данных, представленных в виде...

Аппроксимация МНК вида a*exp(b*x)
Помогите переделать программу. clear all; x=xlsread('lab3.xls',1,'A2:A7'); y=xlsread('lab3.xls',1,'B2:B7'); N=length(x); ...

17
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
30.09.2014, 22:22
КСЮня12, здесь смотрели?
ПОЛЕЗНО! Примеры решений типовых задач
0
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 42
30.09.2014, 23:27  [ТС]
смотрела, но не нашла там того что надо
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
30.09.2014, 23:30
КСЮня12, ищите в той тему,топик с регрессией,меняйте её вид и демонстрируйте её результат для проверки.
Или показывайте наработки.
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
01.10.2014, 10:40
КСЮня12, а точки то у тебя есть? иначе и аппроксимировать нечего
в общем случае можно взять за основу эту тему: Метод наименьших квадратов для линейной функции

в том примере функция имеет вид: y = a*x+b
в твоем случае нужно сделать замену: xx = 1/x и вуаля!
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
clear, clc
 
% точки данных
x = 1:5;
y = exp(-x);
 
xx = 1./x; % делаем замену
 
% делаем линейную МНК:
N = length(xx);
Mx  = sum(xx);
Mx2 = sum(xx.^2);
My  = sum(y);
Mxy = sum(xx.*y);
 
A = [Mx2, Mx;
    Mx,  N];
B = [Mxy;
    My];
X=A\B;
 
% коэф-ты:
a = X(1)
b = X(2)
 
t = linspace(min(x),max(x),50); % 50 точек данных
yy = a./t + b; % рисуем результат апроксимации
 
plot(x,y,'ob', t,yy,'r')
legend('данные','результат аппроксимации')
1
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 42
01.10.2014, 20:39  [ТС]
а если функция будет имеет вид: y = (a/(x+c))+b. будет как то аналогично делаться?
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
01.10.2014, 21:17
увы, я не знаю как для такой функции находить с
однако в матлабе есть встроенная функция метода наименьших квадратов lsqcurvefit (похожая тема)
в твоем случае будет так:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
clear, clc
 
% точки данных
x = 1:5;
y = exp(-x);
 
% аппроксимирующая функция
% k(1) -> a
% k(2) -> b
% k(3) -> c
f = @(k,x) k(1)./(x + k(3)) + k(2); 
 
k0 = [1 0 0]; % начальное предположение коэф-тов
k = lsqcurvefit(f,k0,x,y); % считаем коэфф-ты
 
t = linspace(min(x),max(x),50); % 50 точек данных
Yn = f(k,t); % считаем новые значения даных
 
plot(x,y,'ob', t,Yn,':r') % рисуем
legend('Данные','Апроксимация',2)
title(['a=',num2str(k(1),3),', b=',num2str(k(2),3),', c=',num2str(k(3),3)])
1
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 42
01.10.2014, 21:29  [ТС]
спасибо если у меня свои x и y , мне их за место
Matlab M
1
2
x = 1:5;
y = exp(-x);
написать?
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
01.10.2014, 21:31
КСЮня12, совершенно верно!
0
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 42
01.10.2014, 21:38  [ТС]
с моими данными матлаб почему то не хочет решать. так можно записывать x и y как я записала?
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
clear, clc
 
% точки данных
x=[0            0.00002      0.00004    0.00006    0.00008 0.00010   0.00012    0.00014    0.00016  0.00018  0.00020  0.00022  0.00024   ];
y=[2.1022e8    1.7567e8    1.5884e8  1.4225e8  1.3024e8  1.1653e8  1.0358e8  9.2359e7  7.9194e7 6.9439e7 5.9014e7 4.833e7  3.9634e7 ];
 
 
% аппроксимирующая функция
% k(1) -> a
% k(2) -> b
% k(3) -> c
f = @(k,x) k(1)./(x + k(3)) + k(2); 
 
k0 = [1 0 0]; % начальное предположение коэф-тов
k = lsqcurvefit(f,k0,x,y) % считаем коэфф-ты
 
t = linspace(min(x),max(x),50); % 50 точек данных
Yn = f(k,t); % считаем новые значения даных
 
plot(x,y,'ob', t,Yn,':r') % рисуем
legend('Данные','Апроксимация',2)
title(['a=',num2str(k(1),3),', b=',num2str(k(2),3),', c=',num2str(k(3),3)])
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
02.10.2014, 10:24
КСЮня12, да, с этими данными не справляется обрати внимание на строку 14, там вводятся начальные предположения значений коэф-тов. Многое зависит от правильного выбора этих чисел, если значения будут очень далеки от оптимальных, то программа просто не доберется до них
Немного поигрался и нашел подходящие значения
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
clear, clc
 
% точки данных
x=[0            0.00002      0.00004    0.00006    0.00008 0.00010   0.00012    0.00014    0.00016  0.00018  0.00020  0.00022  0.00024   ];
y=[2.1022e8    1.7567e8    1.5884e8  1.4225e8  1.3024e8  1.1653e8  1.0358e8  9.2359e7  7.9194e7 6.9439e7 5.9014e7 4.833e7  3.9634e7 ];
 
 
% аппроксимирующая функция
% k(1) -> a
% k(2) -> b
% k(3) -> c
f = @(k,x) k(1)./(x + k(3)) + k(2);
 
k0 = [10000, 5, 0.00005]; % начальное предположение коэф-тов
k = lsqcurvefit(f,k0,x,y); % считаем коэфф-ты
 
t = linspace(min(x),max(x),50); % 50 точек данных
Yn = f(k,t); % считаем новые значения данных
 
plot(x,y,'ob', t,Yn,':r') % рисуем
legend('Данные','Апроксимация',2)
%title(['a=',num2str(k(1),3),', b=',num2str(k(2),3),', c=',num2str(k(3),3)])
a = k(1)
b = k(2)
c = k(3)


результат:
Code
1
2
3
4
5
6
7
8
a =
  3.5538e+004
 
b =
 -5.1311e+007
 
c =
  1.2972e-004
1
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 42
02.10.2014, 10:33  [ТС]
Зосима, спасибо большое попробую еще с другими данными x и y
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
02.10.2014, 10:45
КСЮня12, неприятность в том, что для каждого набора нужно подбирать начальное значение k0
0
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 42
02.10.2014, 10:53  [ТС]
Зосима, ага, я поняла. вот, вроде бы получилось как надо
Миниатюры
Аппроксимация по МНК  
0
0 / 0 / 0
Регистрация: 24.11.2017
Сообщений: 1
08.10.2014, 19:25
Здравствуйте, помогите решить задачку. задача.Определить коэффициенты эмпирического уравнения зависимости вязкости жидкости от температуры по экспериментальным данным. температура 0,10,20,30,40,50,60,80,100,120. и соответственно вязкость 3.69, 2.71, 2.01, 1.53, 1.2,0.97, 0.79, 0.57,0.52,043. Аппроксимацию зависимости провести по уравнению:

https://www.cyberforum.ru/cgi-bin/latex.cgi?\mu =\mu0 e^{(-\alpha *t)}

провести лионизацию уравнения, далее построить экспериментальный и теоретический график зависимостей https://www.cyberforum.ru/cgi-bin/latex.cgi?\mu  = \mu(t) т.е вязкости от температуры и оценить точность аппроксимации и предоставить алгоритм расчета( формулы).
0
 Аватар для tvoretsmira
462 / 452 / 56
Регистрация: 28.05.2013
Сообщений: 699
08.10.2014, 22:50
Лионизация это инактивация одной из X-хромосом самки в эмбриогенезе. Уравнение, конечно, записано в непонятном виде, но вряд ли в нём есть Х-хромосомы.
Значит мы будем определять коэффициенты, проводить аппроксимацию, строить зависимости, оценивать точность и писать формулы, а что всё это время будете делать вы?
Мы здесь помогоаем, а не решаем задачи за вас.
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
09.10.2014, 10:18
Цитата Сообщение от tvoretsmira Посмотреть сообщение
Лионизация это инактивация одной из X-хромосом самки в эмбриогенезе.
спинным мозгом чувствую, что имеется ввиду линеаризация
вот практически это задание, только переменные по другому обозваты: Аппроксимация МНК вида a*exp(b*x)
0
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 1
17.10.2014, 00:08
произведите замену переменной и z=1./x -> p=A*z+B и как угодно толи через Sum то ли матрицей: A=inv(X'*X)*X'*Z
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.10.2014, 00:08
Помогаю со студенческими работами здесь

Взвешенный МНК
Здравствуйте! Помогите, пожалуйста! Понимаю, что сложно и много кода :sorry: Просто уже 2 недели не могу найти ошибку((( Реализовала...

МНК. Где ошибка?
Помогите найти ошибку. Неправильно строится график Задание : Методом наименьших квадратов подобрать аппроксимирующую...

Производная (разност. ур-ие и МНК)
Здравствуйте! Не могу понять, почему результаты 2х методов аналогичны? Ошибку тоже не могу найти... ребят, посморите, пожалуйста,...

Двухшаговый и косвенный МНК
Столкнулась с созданием лабораторного практикума по эконометрике в Matlab. Пока не дошла до темы "Системы одновременных...

МНК, расчет итераций
Недавно пользуюсь матлабом и не могу сообразать, как сделать так, чтобы итерации считались автоматически ( не писать формулы для каждой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru