Я хотел бы создать график угловой скорости пропеллера в Matlab с точки зрения приложенного тока. Дело в том, что это требует объединения двух взаимозависимых наборов данных.
Во-первых, коэффициент лобового сопротивления c_d
зависит от угловой скорости omega
(у меня нет формулы, только данные), как видно на графике ниже - характеристики c_d(omega)
можно легко линеаризовать как c_d(omega) = p*omega + p_0
.
Во-вторых, omega
зависит не только от приложенного тока i
, но и от коэффициента сопротивления c_d(omega)
.
Скрипт, который решает случай, когда c_d
является константой ниже. Должна быть какая-то возможность объединить эти два с помощью команд Matlab. Спасибо за любую помощь.
%%Lookup table for drag coefficient c_d
c_d_lookup = [248.9188579 0.036688351; %[\omega c_d]
280.2300647 0.037199094;
308.6091183 0.037199094;
338.6636881 0.03779496;
365.8908244 0.038305703;
393.9557188 0.039156941;
421.9158934 0.039667683;
452.2846224 0.040348674;
480.663676 0.041199911;
511.032405 0.042051149;
538.9925796 0.042561892;
567.2669135 0.043242882;
598.4734005 0.043668501;
624.1297405 0.044264368;
651.9851954 0.044604863;
683.6105614 0.045200729];
subplot(2,1,1)
plot(c_d_lookup(:,1), c_d_lookup(:,2))
title('This is how c_d depends on \omega')
ylabel('c_d')
xlabel('\omega [rad/s]')
%%Calculate propeller angular speed in terms of applied current. omega
%%depends on c_d, which in turn depends on omega. The formula is:
% omega(i) = sqrt(a*i / (b * c_d(omega)))
% Where:
% i - applied current
% omega - propeller angular velocity
% a,b - coefficients
i = [1:15];
a = 0.0718;
b = 3.8589e-005;
%If c_d was constant, I'd do:
omega_i = sqrt(a .* i / (b * 0.042));
subplot(2,1,2)
plot(i, omega_i)
ylabel({'Propeller ang. vel.', '\omega [rad/s]'})
xlabel('Applied current i[A]')
title('Propeller angular velocity in terms of applied current')
ИЗМЕНИТЬ:
Пытаюсь следовать решению bdecaf. Итак, я создал функцию c_d_find
, например:
function c_d = c_d_find(omega, c_d_lookup)
c_d = interp1(c_d_lookup(:,1), c_d_lookup(:,2), omega, 'linear', 'extrap');
end
Я ничего не знаю об дескрипторах функций Matlab, но, кажется, понимаю эту идею... В командном окне Matlab я набрал:
f = @(omega) omega - sqrt(a .* i / (b * c_d_find(omega, c_d_lookup)))
который, я надеюсь, создал правильный дескриптор функции. Что мне делать дальше? Выполнение ниже не работает:
>> omega_consistent = fzero(f,0)
??? Operands to the || and && operators must be convertible to logical scalar
values.
Error in ==> fzero at 333
elseif ~isfinite(fx) || ~isreal(fx)
omega
илиi
? Нижний график показываетC_d0
по отношению кomega
. Что показывает верхний график? Какие два значения вы хотите построить в конечном итоге? - person Eitan T   schedule 16.07.2012c_d(omega) = 0.042
было постоянным, что не так (см. первый график). Я хотел бы, чтобыomega(i)
отразил это. - person mmm   schedule 17.07.2012i
отдельно. Используйтеf = @(omega) omega - sqrt(a * i(1) / (b * c_d_find(omega, c_d_lookup)))
- person bdecaf   schedule 17.07.2012