реклама на сайте
подробности

 
 
> Первый код на Матлабе :), желающие ругают, я работаю над ошибками
_Ivana
сообщение Aug 11 2012, 23:13
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710



Собственно, делюсь радостью - я наконец-то обрел и поставил себе Матлаб 2012а sm.gif Под это дело купил себе на днях новый комп даже rolleyes.gif Скачал несколько обучающих пдф-ок, прочитал пока только одну - Get start и сразу загорелся идеей смоделировать мои предыдущие эксперименты в 1С по расчету максимальной ошибки различных методов интерполяции - даже получилось. Мыслить в категориях массивов и матриц пока не привык, поэтому в коде скорее всего много глупостей и неоптимальностей, лишних переменных и т.п., не получается вывести график без линеаризации масштаба по оси Х (он сам его линеаризует) и т.д. Буду играться дальше, а пока желающим представляю сам код - для замечаний и предложений, за которые заранее спасибо sm.gif
CODE

clear;

N_points_per = 600;
dt = 2*pi/N_points_per;

k_N = sqrt(sqrt(2));
N = 2;

m_N = 0;
m_count = 0;
count = 0;
m_error_L1 = 0;
m_error_L3 = 0;
m_error_E5 = 0;
m_error_E7 = 0;

while N < 259
t_N = 2*pi/N;

error_L1 = 0;
error_L3 = 0;
error_E5 = 0;
error_E7 = 0;

phase = 0;
while phase < 2*pi

t = 0;
t_abs = 0;

t_left_int = 0;
y_3 = sin(t_left_int - 3*t_N + phase);
y_2 = sin(t_left_int - 2*t_N + phase);
y_1 = sin(t_left_int - t_N + phase);
y0 = sin(t_left_int + phase);
y1 = sin(t_left_int + t_N + phase);
y2 = sin(t_left_int + 2*t_N + phase);
y3 = sin(t_left_int + 3*t_N + phase);
y4 = sin(t_left_int + 4*t_N + phase);

% x = 0;
% y_sin = 0;
% y_int = 0;

while t_abs < 3*pi
if t >= t_N
t = t - t_N;
t_left_int = t_left_int + t_N;

y_3 = y_2;
y_2 = y_1;
y_1 = y0;
y0 = y1;
y1 = y2;
y2 = y3;
y3 = y4;
y4 = sin(t_left_int + 4*t_N + phase);
end

% x = [x t_abs];
% y_sin = [y_sin sin(t_abs + phase)];
y_sin = sin(t_abs + phase);
t_norm = t / t_N;

y_int_cur = y0 + (y1 - y0)*t_norm;
error_L1_cur = abs(y_int_cur - y_sin); if error_L1_cur > error_L1 error_L1 = error_L1_cur; end

a3 = (y2 - y_1)/6 + (y0 - y1)/2;
a1 = (y2 - y0)/2 - a3;
a2 = y2 - y1 - a1 - a3;
a0 = y1;
t_norm_1 = t_norm - 1;
y_int_cur = a3*t_norm_1; y_int_cur = (y_int_cur + a2)*t_norm_1; y_int_cur = (y_int_cur + a1)*t_norm_1; y_int_cur = y_int_cur + a0;
% y_int = [y_int y_int_cur];
error_L3_cur = abs(y_int_cur - y_sin); if error_L3_cur > error_L3 error_L3 = error_L3_cur; end

p0 = (2*(y1-y_1) - (y2 - y_2)/4)/3;
p1 = (2*(y2-y0) - (y3 - y_1)/4)/3;
a0 = y0;
a1 = p0;
a3 = p0 + p1 + 2*(y0 - y1);
a2 = y1 - a3 - a1 - a0;
y_int_cur = a3*t_norm; y_int_cur = (y_int_cur + a2)*t_norm; y_int_cur = (y_int_cur + a1)*t_norm; y_int_cur = y_int_cur + a0;
error_E5_cur = abs(y_int_cur - y_sin); if error_E5_cur > error_E5 error_E5 = error_E5_cur; end

p0 = (y1-y_1)*3/4 - (y2 - y_2)*3/20 + (y3 - y_3)/60;
p1 = (y2-y0 )*3/4 - (y3 - y_1)*3/20 + (y4 - y_2)/60;
a0 = y0;
a1 = p0;
a3 = p0 + p1 + 2*(y0 - y1);
a2 = y1 - a3 - a1 - a0;
y_int_cur = a3*t_norm; y_int_cur = (y_int_cur + a2)*t_norm; y_int_cur = (y_int_cur + a1)*t_norm; y_int_cur = y_int_cur + a0;
error_E7_cur = abs(y_int_cur - y_sin); if error_E7_cur > error_E7 error_E7 = error_E7_cur; end

t = t + dt;
t_abs = t_abs + dt;
end

% x(1) = [];
% y_sin(1) = [];
% y_int(1) = [];
% plot(x, y_sin, x, y_int)

phase = phase + 2*pi/13;
end

m_N = [m_N N];
m_count = [m_count count];
m_error_L1 = [m_error_L1 log10(error_L1)];
m_error_L3 = [m_error_L3 log10(error_L3)];
m_error_E5 = [m_error_E5 log10(error_E5)];
m_error_E7 = [m_error_E7 log10(error_E7)];

N = N*k_N;
count = count + 1;
end

m_N(1) = [];
m_count(1) = [];
m_error_L1(1) = [];
m_error_L3(1) = [];
m_error_E5(1) = [];
m_error_E7(1) = [];
plot(m_N, m_error_L1, '-o', m_N, m_error_L3, '-o', m_N, m_error_E5, '-o', m_N, m_error_E7, '-o')
grid on
figure
plot(m_count, m_error_L1, '-o', m_count, m_error_L3, '-o', m_count, m_error_E5, '-o', m_count, m_error_E7, '-o')
grid on
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 17:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01378 секунд с 7
ELECTRONIX ©2004-2016