2012-07-16 2 views
0

적용 전류에 따른 프로펠러 각속도의 Matlab 플롯을 생성하고 싶습니다. 핵심은 두 개의 상호 의존적 인 데이터 세트를 결합해야한다는 것입니다. 특성 c_d(omega) 쉽게 c_d(omega) = p*omega + p_0으로 선형화 할 수 - Matlab의 비선형 방정식의 교차 특성

첫째, 항력 계수 c_d 아래의 그래프에서 볼 수 있듯이 각속도 omega (I, 그냥 데이터를 어떤 공식이 없다)에 따라 달라집니다.

둘째로, omega은 적용된 전류 (i)뿐만 아니라 끌기 계수 (c_d(omega))에 따라 달라집니다.

사례를 해결하는 스크립트로 c_d은 아래에서 상수입니다. 어떻게 든 Matlab 명령을 사용하여이 두 가지를 결합 할 수 있어야합니다. 어떤 도움을 주셔서 감사합니다.

enter image description here

%%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의 해결 방법을 수행하려고합니다.

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))) 
를 그래서 나는 그렇게 같은 함수 c_d_find를 생성

나는 올바른 함수 핸들을 만들었 으면 좋겠다. 다음에 무엇을해야합니까? 작동하지 않습니다 아래 실행 :

>> 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) 
+0

그래서 당신은 omega' 또는'i''에 대해이 문제를 해결하려면 omega_consistent =fzero(f,omega_0)와 일치 오메가를 계산? 아래 그래프는 '오메가'에 대해 'C_d0'을 보여줍니다. 위 그래프는 무엇을 보여줍니까? 궁극적으로 두 가지 가치관은 무엇입니까? –

+0

네 말이 맞다. 그 질문은 불분명하다. 미안하다. 나는 그것을 바꿨다. 잘하면 지금 대답하기가 쉬워 질 것이다. – mmm

+0

나는 아직도 너를 따라하지 않고있다. 당신은 적용된 전류 관점에서 프로펠러 각속도의 음모를 가지고 있습니다. 무엇을 놓치고 있습니까? –

답변

1

흠 ...

원더 내가 제대로 이해한다면 - 당신이 일관성있는 솔루션을 찾고있는 것처럼하지만 보인다.

귀하의 방정식이 같은 솔루션 개요 것 복잡한에 보이지 않는 :

  1. 일부 보간 정도
  2. f = @(omega) omega - sqrt(a .* i/(b * c_d_find(omega))) 같은 기능 핸들을을 수행하는 기능 function c_d = c_d_find(omega) 쓰기를 -이 제로입니다 일관성있는 오메가
+0

bdecaf 고맙습니다. 나는 지금 실종 된 것이 거의 없다고 생각합니다. – mmm

+0

오 - 간단합니다 - 오메가 _0는 최적화를위한 시작 값에 불과합니다. 그냥 합당한 가치를 넣어. – bdecaf

+0

질문을 수정했지만 여전히 문제가있는 것으로 보입니다. – mmm