функция trapz, дающая странные результаты - PullRequest
1 голос
/ 12 февраля 2012

Я использую функцию trapz для двух наборов данных, и что-то не так.

Вот представление данных: коэффициент сопротивления давлению и коэффициент подъема http://s17.postimage.org/inxk1xolr/cptheta.jpg

Итакты можешь понять мою проблему;ось у - коэффициент давления Cp, ось х - угол (всего 49 значений, 0: 7,5: 360), данные с матрицей зеленого квадрата - это данные, полученные в результате эксперимента, красная кривая в основном Cp sin(угол), в то время как розовый - Cp cos (угол)

Использование trapz на красном работает отлично, это дает 7,5, и если я переверну входные аргументы для trapz, я получу отрицательный результат этогочисло!Проблема в розовом графике: использование trapz дает огромное число (это неправильно, я не должен этого получать), а при переключении входных аргументов я получаю еще одно огромное число, а не отрицание первого числа, что странно,Я не знаю, что не так, поэтому я использовал quad (нужна функция), чтобы проверить результаты trapz

for i = 1:48
    y = @(x) (Cp(i+1) - Cp(i)) / ( theta_rad(i+1) - theta_rad(i) ) * x .* sin(x);
    clll(i) = -0.5* quad(y,theta_rad(i), theta_rad(i+1));

end
clll = sum(clll);

for j = 1:48
    f = @(t) (Cp(j+1) - Cp(j)) / ( theta_rad(j+1) - theta_rad(j) ) * t .* cos(t);
    cdddp(i) = 0.5* quad(f,theta_rad(j), theta_rad(j+1));

end

cdddp = sum(cdddp);

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


Редактировать:

Я только что нашелошибка, я использовал трапецию, используя углы в градусах, а не в радианах!Теперь я получаю гораздо меньшие числа, но я думаю, что есть еще одна ошибка, потому что интеграл, использующий квадрат, дает более разумный ответ.

Вот код, который я использую для trapz

Cdp = 0.5*trapz( theta*pi/180, Cp.*cosd(theta) ); %pressure drag coefficient

Cl = -0.5*trapz(theta*pi/180, Cp.*sind(theta) ); %lift coefficient

1 Ответ

0 голосов
/ 12 февраля 2012

Я получил его сейчас, после использования радиан в функции trapz я получил правильный ответ. Интерполяция, которую я пытался сделать, - ерунда! Мне удалось создать подгонку с помощью Curve Fitting Tool, она очень эффективна

Это

Cdp = 0.5*trapz( theta*pi/180, Cp.*cosd(theta) ); %pressure drag coefficient

может быть достигнуто с помощью инструмента:

fit1 = createFit( theta*pi/180, Cp.*cosd(theta) ); 
##createFit is generated by MatLab and I only need parts of it, all the plots commands were removed.
Cdp = 0.5*integrate(fit1,0,2*pi) ##"integrate" < this is why the tool is great, No need to export the coefficients to the workspace, create a function handle then use quad
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...